summaryrefslogtreecommitdiff
path: root/target/arm
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@uclibc-ng.org>2015-10-07 17:55:17 +0200
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2015-10-07 17:55:17 +0200
commit1f713cadaed5a48d8539e6376a0b59627086c43e (patch)
tree746f9339341f873d802ba354efacbc2e3ca3ccfc /target/arm
parent6d99c6b253a1816d3efc12578deb05222ff3f9f8 (diff)
update to latest github version
Diffstat (limited to 'target/arm')
-rw-r--r--target/arm/bcm28xx/patches/4.1.10/0001-raspberry-pi-github.patch27711
1 files changed, 15542 insertions, 12169 deletions
diff --git a/target/arm/bcm28xx/patches/4.1.10/0001-raspberry-pi-github.patch b/target/arm/bcm28xx/patches/4.1.10/0001-raspberry-pi-github.patch
index ce089a8cd..b65e38285 100644
--- a/target/arm/bcm28xx/patches/4.1.10/0001-raspberry-pi-github.patch
+++ b/target/arm/bcm28xx/patches/4.1.10/0001-raspberry-pi-github.patch
@@ -1,276 +1,368 @@
-diff -Nur linux-4.1.6/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 linux-rpi/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00
---- linux-4.1.6/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 2015-08-26 10:26:04.449256090 +0200
-@@ -0,0 +1,6 @@
-+What: /sys/bus/w1/devices/.../w1_seq
-+Date: Apr 2015
-+Contact: Matt Campbell <mattrcampbell@gmail.com>
-+Description: Support for the DS28EA00 chain sequence function
-+ see Documentation/w1/slaves/w1_therm for detailed information
-+Users: any user space application which wants to communicate with DS28EA00
-diff -Nur linux-4.1.6/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt linux-rpi/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
---- linux-4.1.6/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt 2015-08-26 10:26:04.513256993 +0200
-@@ -48,8 +48,8 @@
-
- bcm2835_i2s: i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
-- reg = < 0x7e203000 0x20>,
-- < 0x7e101098 0x02>;
-+ reg = < 0x7e203000 0x24>,
-+ < 0x7e101098 0x08>;
-
- dmas = <&dma 2>,
- <&dma 3>;
-diff -Nur linux-4.1.6/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt linux-rpi/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
---- linux-4.1.6/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt 2015-08-26 10:26:04.549257500 +0200
-@@ -16,8 +16,8 @@
-
- bcm2835_i2s: i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
-- reg = <0x7e203000 0x20>,
-- <0x7e101098 0x02>;
-+ reg = <0x7e203000 0x24>,
-+ <0x7e101098 0x08>;
-
- dmas = <&dma 2>,
- <&dma 3>;
-diff -Nur linux-4.1.6/Documentation/video4linux/bcm2835-v4l2.txt linux-rpi/Documentation/video4linux/bcm2835-v4l2.txt
---- linux-4.1.6/Documentation/video4linux/bcm2835-v4l2.txt 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/Documentation/video4linux/bcm2835-v4l2.txt 2015-08-26 10:26:04.645258854 +0200
-@@ -0,0 +1,60 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708_common.dtsi linux-rpi/arch/arm/boot/dts/bcm2708_common.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708_common.dtsi 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708_common.dtsi 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,321 @@
++/include/ "skeleton.dtsi"
+
-+BCM2835 (aka Raspberry Pi) V4L2 driver
-+======================================
++/ {
++ interrupt-parent = <&intc>;
+
-+1. Copyright
-+============
++ aliases {
++ audio = &audio;
++ sound = &sound;
++ soc = &soc;
++ dma = &dma;
++ intc = &intc;
++ watchdog = &watchdog;
++ random = &random;
++ mailbox = &mailbox;
++ gpio = &gpio;
++ uart0 = &uart0;
++ i2s = &i2s;
++ spi0 = &spi0;
++ i2c0 = &i2c0;
++ uart1 = &uart1;
++ mmc = &mmc;
++ i2c1 = &i2c1;
++ i2c2 = &i2c2;
++ usb = &usb;
++ leds = &leds;
++ fb = &fb;
++ vchiq = &vchiq;
++ thermal = &thermal;
++ clocks = &clocks;
++ };
+
-+Copyright © 2013 Raspberry Pi (Trading) Ltd.
++ /* Onboard audio */
++ audio: audio {
++ compatible = "brcm,bcm2835-audio";
++ brcm,pwm-channels = <8>;
++ status = "disabled";
++ };
+
-+2. License
-+==========
++ /* External sound card */
++ sound: sound {
++ };
+
-+This program is free software; you can redistribute it and/or modify
-+it under the terms of the GNU General Public License as published by
-+the Free Software Foundation; either version 2 of the License, or
-+(at your option) any later version.
++ soc: soc {
++ compatible = "simple-bus";
++ #address-cells = <1>;
++ #size-cells = <1>;
+
-+This program is distributed in the hope that it will be useful,
-+but WITHOUT ANY WARRANTY; without even the implied warranty of
-+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+GNU General Public License for more details.
++ dma: dma@7e007000 {
++ compatible = "brcm,bcm2835-dma";
++ reg = <0x7e007000 0xf00>;
++ interrupts = <1 16>,
++ <1 17>,
++ <1 18>,
++ <1 19>,
++ <1 20>,
++ <1 21>,
++ <1 22>,
++ <1 23>,
++ <1 24>,
++ <1 25>,
++ <1 26>,
++ <1 27>;
+
-+You should have received a copy of the GNU General Public License
-+along with this program; if not, write to the Free Software
-+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++ #dma-cells = <1>;
++ brcm,dma-channel-mask = <0x0f35>;
++ };
+
-+3. Quick Start
-+==============
++ intc: interrupt-controller {
++ compatible = "brcm,bcm2708-armctrl-ic";
++ reg = <0x7e00b200 0x200>;
++ interrupt-controller;
++ #interrupt-cells = <2>;
++ };
+
-+You need a version 1.0 or later of v4l2-ctl, available from:
-+ git://git.linuxtv.org/v4l-utils.git
++ mailbox: mailbox@7e00b800 {
++ compatible = "brcm,bcm2835-mbox";
++ reg = <0x7e00b880 0x40>;
++ interrupts = <0 1>;
++ #mbox-cells = <0>;
++ };
+
-+$ sudo modprobe bcm2835-v4l2
++ watchdog: watchdog@7e100000 {
++ compatible = "brcm,bcm2835-pm-wdt";
++ reg = <0x7e100000 0x28>;
++ status = "disabled";
++ };
+
-+Turn on the overlay:
++ random: rng@7e104000 {
++ compatible = "brcm,bcm2835-rng";
++ reg = <0x7e104000 0x10>;
++ status = "disabled";
++ };
+
-+$ v4l2-ctl --overlay=1
++ gpio: gpio@7e200000 {
++ compatible = "brcm,bcm2835-gpio";
++ reg = <0x7e200000 0xb4>;
++ interrupts = <2 17>, <2 18>;
+
-+Turn off the overlay:
++ gpio-controller;
++ #gpio-cells = <2>;
+
-+$ v4l2-ctl --overlay=0
++ interrupt-controller;
++ #interrupt-cells = <2>;
++ };
+
-+Set the capture format for video:
++ uart0: uart@7e201000 {
++ compatible = "arm,pl011", "arm,primecell";
++ reg = <0x7e201000 0x1000>;
++ interrupts = <2 25>;
++ clocks = <&clk_uart0 &clk_apb_p>;
++ clock-names = "uartclk","apb_pclk";
++ arm,primecell-periphid = <0x00241011>; // For an explanation, see
++ // https://github.com/raspberrypi/linux/commit/13731d862cf5219216533a3b0de052cee4cc5038
++ status = "disabled";
++ };
+
-+$ v4l2-ctl --set-fmt-video=width=1920,height=1088,pixelformat=4
++ i2s: i2s@7e203000 {
++ compatible = "brcm,bcm2708-i2s";
++ reg = <0x7e203000 0x24>,
++ <0x7e101098 0x08>;
+
-+(Note: 1088 not 1080).
++ //dmas = <&dma 2>,
++ // <&dma 3>;
++ dma-names = "tx", "rx";
++ status = "disabled";
++ };
+
-+Capture:
++ spi0: spi@7e204000 {
++ compatible = "brcm,bcm2835-spi";
++ reg = <0x7e204000 0x1000>;
++ interrupts = <2 22>;
++ clocks = <&clk_core>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "disabled";
++ /* the dma channels */
++ dmas = <&dma 6>, <&dma 7>;
++ dma-names = "tx", "rx";
++ /* the chipselects used - <0> means native GPIO
++ * add more gpios if necessary as <&gpio 6 1>
++ * (but do not forget to make them output!)
++ */
++ cs-gpios = <0>, <0>;
++ };
+
-+$ v4l2-ctl --stream-mmap=3 --stream-count=100 --stream-to=somefile.h264
++ i2c0: i2c@7e205000 {
++ compatible = "brcm,bcm2708-i2c";
++ reg = <0x7e205000 0x1000>;
++ interrupts = <2 21>;
++ clocks = <&clk_i2c>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "disabled";
++ };
+
-+Stills capture:
++ pwm: pwm@7e20c000 {
++ compatible = "brcm,bcm2835-pwm";
++ reg = <0x7e20c000 0x28>;
++ clocks = <&clk_pwm>;
++ #pwm-cells = <2>;
++ status = "disabled";
++ };
+
-+$ v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3
-+$ v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=somefile.jpg
++ uart1: uart@7e215040 {
++ compatible = "brcm,bcm2835-aux-uart", "ns16550";
++ reg = <0x7e215040 0x40>;
++ interrupts = <1 29>;
++ clocks = <&clk_uart1>;
++ reg-shift = <2>;
++ no-loopback-test;
++ status = "disabled";
++ };
+
-+List of available formats:
++ mmc: mmc@7e300000 {
++ compatible = "brcm,bcm2835-mmc";
++ reg = <0x7e300000 0x100>;
++ interrupts = <2 30>;
++ clocks = <&clk_mmc>;
++ dmas = <&dma 11>,
++ <&dma 11>;
++ dma-names = "tx", "rx";
++ status = "disabled";
++ };
+
-+$ v4l2-ctl --list-formats
-diff -Nur linux-4.1.6/Documentation/w1/slaves/w1_therm linux-rpi/Documentation/w1/slaves/w1_therm
---- linux-4.1.6/Documentation/w1/slaves/w1_therm 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/Documentation/w1/slaves/w1_therm 2015-08-26 10:26:04.653258968 +0200
-@@ -11,12 +11,14 @@
- Description
- -----------
-
--w1_therm provides basic temperature conversion for ds18*20 devices.
-+w1_therm provides basic temperature conversion for ds18*20 devices, and the
-+ds28ea00 device.
- supported family codes:
- W1_THERM_DS18S20 0x10
- W1_THERM_DS1822 0x22
- W1_THERM_DS18B20 0x28
- W1_THERM_DS1825 0x3B
-+W1_THERM_DS28EA00 0x42
-
- Support is provided through the sysfs w1_slave file. Each open and
- read sequence will initiate a temperature conversion then provide two
-@@ -48,3 +50,10 @@
- maximum current draw of 1.5mA and that a 5k pullup resistor is not
- sufficient. The strong pullup is designed to provide the additional
- current required.
++ i2c1: i2c@7e804000 {
++ compatible = "brcm,bcm2708-i2c";
++ reg = <0x7e804000 0x1000>;
++ interrupts = <2 21>;
++ clocks = <&clk_i2c>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "disabled";
++ };
+
-+The DS28EA00 provides an additional two pins for implementing a sequence
-+detection algorithm. This feature allows you to determine the physical
-+location of the chip in the 1-wire bus without needing pre-existing
-+knowledge of the bus ordering. Support is provided through the sysfs
-+w1_seq file. The file will contain a single line with an integer value
-+representing the device index in the bus starting at 0.
-diff -Nur linux-4.1.6/arch/arm/Kconfig linux-rpi/arch/arm/Kconfig
---- linux-4.1.6/arch/arm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/Kconfig 2015-08-26 10:26:04.685259419 +0200
-@@ -314,6 +314,42 @@
- default ARCH_VERSATILE if !MMU
- default ARCH_MULTIPLATFORM if MMU
-
-+config ARCH_BCM2708
-+ bool "Broadcom BCM2708 family"
-+ select CPU_V6
-+ select ARM_AMBA
-+ select HAVE_SCHED_CLOCK
-+ select NEED_MACH_GPIO_H
-+ select NEED_MACH_MEMORY_H
-+ select COMMON_CLK
-+ select ARCH_HAS_CPUFREQ
-+ select GENERIC_CLOCKEVENTS
-+ select ARM_ERRATA_411920
-+ select MACH_BCM2708
-+ select VC4
-+ select FIQ
-+ help
-+ This enables support for Broadcom BCM2708 boards.
++ i2c2: i2c@7e805000 {
++ // Beware - this is shared with the HDMI module.
++ // Careless use may break (really) your display.
++ // Caveat emptor.
++ compatible = "brcm,bcm2708-i2c";
++ reg = <0x7e805000 0x1000>;
++ interrupts = <2 21>;
++ clocks = <&clk_i2c>;
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "disabled";
++ };
+
-+config ARCH_BCM2709
-+ bool "Broadcom BCM2709 family"
-+ select ARCH_HAS_BARRIERS if SMP
-+ select CPU_V7
-+ select HAVE_SMP
-+ select ARM_AMBA
-+ select MIGHT_HAVE_CACHE_L2X0
-+ select HAVE_SCHED_CLOCK
-+ select NEED_MACH_MEMORY_H
-+ select NEED_MACH_IO_H
-+ select COMMON_CLK
-+ select ARCH_HAS_CPUFREQ
-+ select GENERIC_CLOCKEVENTS
-+ select MACH_BCM2709
-+ select VC4
-+ select FIQ
-+ help
-+ This enables support for Broadcom BCM2709 boards.
++ smi: smi@7e600000 {
++ compatible = "brcm,bcm2835-smi";
++ reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
++ interrupts = <2 16>;
++ brcm,smi-clock-source = <6>;
++ brcm,smi-clock-divisor = <4>;
++ dmas = <&dma 4>;
++ dma-names = "rx-tx";
++ status = "disabled";
++ };
+
- config ARCH_MULTIPLATFORM
- bool "Allow multiple platforms to be selected"
- depends on MMU
-@@ -823,6 +859,9 @@
- # Kconfigs may be included either alphabetically (according to the
- # plat- suffix) or along side the corresponding mach-* source.
- #
-+source "arch/arm/mach-bcm2708/Kconfig"
-+source "arch/arm/mach-bcm2709/Kconfig"
++ usb: usb@7e980000 {
++ compatible = "brcm,bcm2708-usb";
++ reg = <0x7e980000 0x10000>,
++ <0x7e006000 0x1000>;
++ interrupts = <2 0>,
++ <1 9>;
++ };
+
- source "arch/arm/mach-mvebu/Kconfig"
-
- source "arch/arm/mach-alpine/Kconfig"
-diff -Nur linux-4.1.6/arch/arm/Kconfig.debug linux-rpi/arch/arm/Kconfig.debug
---- linux-4.1.6/arch/arm/Kconfig.debug 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/Kconfig.debug 2015-08-26 10:26:04.685259419 +0200
-@@ -1197,6 +1197,14 @@
- options; the platform specific options are deprecated
- and will be soon removed.
-
-+ config DEBUG_BCM2708_UART0
-+ bool "Broadcom BCM2708 UART0 (PL011)"
-+ depends on MACH_BCM2708
-+ help
-+ Say Y here if you want the debug print routines to direct
-+ their output to UART 0. The port must have been initialised
-+ by the boot-loader before use.
++ firmware: firmware {
++ compatible = "raspberrypi,bcm2835-firmware";
++ mboxes = <&mailbox>;
++ };
+
- endchoice
-
- config DEBUG_AT91_UART
-diff -Nur linux-4.1.6/arch/arm/Makefile linux-rpi/arch/arm/Makefile
---- linux-4.1.6/arch/arm/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/Makefile 2015-08-26 10:26:04.685259419 +0200
-@@ -142,6 +142,8 @@
-
- # Machine directory name. This list is sorted alphanumerically
- # by CONFIG_* macro name.
-+machine-$(CONFIG_ARCH_BCM2708) += bcm2708
-+machine-$(CONFIG_ARCH_BCM2709) += bcm2709
- machine-$(CONFIG_ARCH_ALPINE) += alpine
- machine-$(CONFIG_ARCH_AT91) += at91
- machine-$(CONFIG_ARCH_AXXIA) += axxia
-diff -Nur linux-4.1.6/arch/arm/boot/dts/Makefile linux-rpi/arch/arm/boot/dts/Makefile
---- linux-4.1.6/arch/arm/boot/dts/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/boot/dts/Makefile 2015-08-26 10:26:04.685259419 +0200
-@@ -1,5 +1,21 @@
- ifeq ($(CONFIG_OF),y)
-
-+dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b.dtb
-+dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b-plus.dtb
-+dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-cm.dtb
-+dtb-$(CONFIG_BCM2709_DT) += bcm2709-rpi-2-b.dtb
++ leds: leds {
++ compatible = "gpio-leds";
++ };
+
-+# Raspberry Pi
-+ifeq ($(CONFIG_BCM2708_DT),y)
-+ RPI_DT_OVERLAYS=y
-+endif
-+ifeq ($(CONFIG_BCM2709_DT),y)
-+ RPI_DT_OVERLAYS=y
-+endif
-+ifeq ($(CONFIG_ARCH_BCM2835),y)
-+ RPI_DT_OVERLAYS=y
-+endif
++ fb: fb {
++ compatible = "brcm,bcm2708-fb";
++ firmware = <&firmware>;
++ status = "disabled";
++ };
+
- dtb-$(CONFIG_ARCH_ALPINE) += \
- alpine-db.dtb
- dtb-$(CONFIG_MACH_ASM9260) += \
-@@ -660,7 +676,18 @@
- mt6592-evb.dtb \
- mt8127-moose.dtb \
- mt8135-evbp1.dtb
++ vchiq: vchiq {
++ compatible = "brcm,bcm2835-vchiq";
++ reg = <0x7e00b840 0xf>;
++ interrupts = <0 2>;
++ cache-line-size = <32>;
++ firmware = <&firmware>;
++ };
+
-+targets += dtbs dtbs_install
-+targets += $(dtb-y)
++ thermal: thermal {
++ compatible = "brcm,bcm2835-thermal";
++ firmware = <&firmware>;
++ };
++ };
+
- endif
-
- always := $(dtb-y)
- clean-files := *.dtb
++ clocks: clocks {
++ compatible = "simple-bus";
++ #address-cells = <1>;
++ #size-cells = <0>;
+
-+# Enable fixups to support overlays on BCM2708 platforms
-+ifeq ($(RPI_DT_OVERLAYS),y)
-+ DTC_FLAGS ?= -@
-+endif
++ clk_mmc: clock@0 {
++ compatible = "fixed-clock";
++ reg = <0>;
++ #clock-cells = <0>;
++ clock-output-names = "mmc";
++ clock-frequency = <250000000>;
++ };
+
-+subdir-y += overlays
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,129 @@
++ clk_i2c: clock@1 {
++ compatible = "fixed-clock";
++ reg = <1>;
++ #clock-cells = <0>;
++ clock-output-names = "i2c";
++ clock-frequency = <250000000>;
++ };
++
++ clk_core: clock@2 {
++ compatible = "fixed-clock";
++ reg = <2>;
++ #clock-cells = <0>;
++ clock-output-names = "core";
++ clock-frequency = <250000000>;
++ };
++
++ clk_uart0: clock@3 {
++ compatible = "fixed-clock";
++ reg = <3>;
++ #clock-cells = <0>;
++ clock-output-names = "uart0_pclk";
++ clock-frequency = <3000000>;
++ };
++
++ clk_apb_p: clock@4 {
++ compatible = "fixed-clock";
++ reg = <4>;
++ #clock-cells = <0>;
++ clock-output-names = "apb_pclk";
++ clock-frequency = <126000000>;
++ };
++
++ clk_pwm: clock@5 {
++ compatible = "fixed-clock";
++ reg = <3>;
++ #clock-cells = <0>;
++ clock-output-names = "pwm";
++ clock-frequency = <100000000>;
++ };
++
++ clk_uart1: clock@6 {
++ compatible = "fixed-factor-clock";
++ clocks = <&clk_core>;
++ #clock-cells = <0>;
++ clock-div = <1>;
++ clock-mult = <2>;
++ };
++ };
++
++ __overrides__ {
++ cache_line_size = <&vchiq>, "cache-line-size:0";
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708.dtsi linux-rpi/arch/arm/boot/dts/bcm2708.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708.dtsi 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708.dtsi 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,25 @@
++/include/ "bcm2708_common.dtsi"
++
++/ {
++ compatible = "brcm,bcm2708";
++ model = "BCM2708";
++
++ chosen {
++ /* No padding required - the boot loader can do that. */
++ bootargs = "";
++ };
++
++ soc {
++ ranges = <0x7e000000 0x20000000 0x01000000>;
++
++ arm-pmu {
++ compatible = "arm,arm1176-pmu";
++ };
++
++ gpiomem {
++ compatible = "brcm,bcm2835-gpiomem";
++ reg = <0x7e200000 0x1000>;
++ status = "okay";
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-b.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,118 @@
+/dts-v1/;
+
+/include/ "bcm2708.dtsi"
+
+/ {
+ compatible = "brcm,bcm2708";
-+ model = "Raspberry Pi Model B+";
++ model = "Raspberry Pi Model B";
+};
+
+&gpio {
@@ -290,8 +382,8 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/ar
+ };
+
+ i2s_pins: i2s {
-+ brcm,pins = <18 19 20 21>;
-+ brcm,function = <4>; /* alt0 */
++ brcm,pins = <28 29 30 31>;
++ brcm,function = <6>; /* alt2 */
+ };
+};
+
@@ -355,13 +447,7 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/ar
+ act_led: act {
+ label = "led0";
+ linux,default-trigger = "mmc0";
-+ gpios = <&gpio 47 0>;
-+ };
-+
-+ pwr_led: pwr {
-+ label = "led1";
-+ linux,default-trigger = "input";
-+ gpios = <&gpio 35 0>;
++ gpios = <&gpio 16 1>;
+ };
+};
+
@@ -369,7 +455,6 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/ar
+ __overrides__ {
+ uart0 = <&uart0>,"status";
+ uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
-+ uart1_clkrate = <&uart1>,"clock-frequency:0";
+ i2s = <&i2s>,"status";
+ spi = <&spi0>,"status";
+ i2c0 = <&i2c0>,"status";
@@ -384,26 +469,22 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/ar
+ act_led_activelow = <&act_led>,"gpios:8";
+ act_led_trigger = <&act_led>,"linux,default-trigger";
+
-+ pwr_led_gpio = <&pwr_led>,"gpios:4";
-+ pwr_led_activelow = <&pwr_led>,"gpios:8";
-+ pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
-+
+ audio = <&audio>,"status";
+ watchdog = <&watchdog>,"status";
+ random = <&random>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b.dts 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,119 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-b-plus.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,128 @@
+/dts-v1/;
+
+/include/ "bcm2708.dtsi"
+
+/ {
+ compatible = "brcm,bcm2708";
-+ model = "Raspberry Pi Model B";
++ model = "Raspberry Pi Model B+";
+};
+
+&gpio {
@@ -423,8 +504,8 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boo
+ };
+
+ i2s_pins: i2s {
-+ brcm,pins = <28 29 30 31>;
-+ brcm,function = <6>; /* alt2 */
++ brcm,pins = <18 19 20 21>;
++ brcm,function = <4>; /* alt0 */
+ };
+};
+
@@ -488,7 +569,13 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boo
+ act_led: act {
+ label = "led0";
+ linux,default-trigger = "mmc0";
-+ gpios = <&gpio 16 1>;
++ gpios = <&gpio 47 0>;
++ };
++
++ pwr_led: pwr {
++ label = "led1";
++ linux,default-trigger = "input";
++ gpios = <&gpio 35 0>;
+ };
+};
+
@@ -496,7 +583,6 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boo
+ __overrides__ {
+ uart0 = <&uart0>,"status";
+ uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
-+ uart1_clkrate = <&uart1>,"clock-frequency:0";
+ i2s = <&i2s>,"status";
+ spi = <&spi0>,"status";
+ i2c0 = <&i2c0>,"status";
@@ -511,15 +597,19 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-b.dts linux-rpi/arch/arm/boo
+ act_led_activelow = <&act_led>,"gpios:8";
+ act_led_trigger = <&act_led>,"linux,default-trigger";
+
++ pwr_led_gpio = <&pwr_led>,"gpios:4";
++ pwr_led_activelow = <&pwr_led>,"gpios:8";
++ pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
++
+ audio = <&audio>,"status";
+ watchdog = <&watchdog>,"status";
+ random = <&random>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dts 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,93 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-cm.dts linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-cm.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,92 @@
+/dts-v1/;
+
+/include/ "bcm2708-rpi-cm.dtsi"
@@ -601,7 +691,6 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dts linux-rpi/arch/arm/bo
+ __overrides__ {
+ uart0 = <&uart0>,"status";
+ uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
-+ uart1_clkrate = <&uart1>,"clock-frequency:0";
+ i2s = <&i2s>,"status";
+ spi = <&spi0>,"status";
+ i2c0 = <&i2c0>,"status";
@@ -613,9 +702,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dts linux-rpi/arch/arm/bo
+ core_freq = <&clk_core>,"clock-frequency:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi 2015-08-26 10:26:04.693259532 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,30 @@
+/include/ "bcm2708.dtsi"
+
@@ -647,15 +736,15 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi linux-rpi/arch/arm/b
+ random = <&random>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708.dtsi linux-rpi/arch/arm/boot/dts/bcm2708.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2708.dtsi 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708.dtsi 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,25 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2709.dtsi linux-rpi/arch/arm/boot/dts/bcm2709.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2709.dtsi 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2709.dtsi 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,76 @@
+/include/ "bcm2708_common.dtsi"
+
+/ {
-+ compatible = "brcm,bcm2708";
-+ model = "BCM2708";
++ compatible = "brcm,bcm2709";
++ model = "BCM2709";
+
+ chosen {
+ /* No padding required - the boot loader can do that. */
@@ -663,10 +752,11 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708.dtsi linux-rpi/arch/arm/boot/dts
+ };
+
+ soc {
-+ ranges = <0x7e000000 0x20000000 0x01000000>;
++ ranges = <0x7e000000 0x3f000000 0x01000000>;
+
+ arm-pmu {
-+ compatible = "arm,arm1176-pmu";
++ compatible = "arm,cortex-a7-pmu";
++ interrupts = <3 9>;
+ };
+
+ gpiomem {
@@ -675,317 +765,61 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708.dtsi linux-rpi/arch/arm/boot/dts
+ status = "okay";
+ };
+ };
-+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2708_common.dtsi linux-rpi/arch/arm/boot/dts/bcm2708_common.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2708_common.dtsi 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2708_common.dtsi 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,302 @@
-+/include/ "skeleton.dtsi"
-+
-+/ {
-+ interrupt-parent = <&intc>;
-+
-+ aliases {
-+ audio = &audio;
-+ sound = &sound;
-+ soc = &soc;
-+ dma = &dma;
-+ intc = &intc;
-+ watchdog = &watchdog;
-+ random = &random;
-+ mailbox = &mailbox;
-+ gpio = &gpio;
-+ uart0 = &uart0;
-+ i2s = &i2s;
-+ spi0 = &spi0;
-+ i2c0 = &i2c0;
-+ uart1 = &uart1;
-+ mmc = &mmc;
-+ i2c1 = &i2c1;
-+ i2c2 = &i2c2;
-+ usb = &usb;
-+ leds = &leds;
-+ fb = &fb;
-+ vchiq = &vchiq;
-+ thermal = &thermal;
-+ clocks = &clocks;
-+ };
+
-+ /* Onboard audio */
-+ audio: audio {
-+ compatible = "brcm,bcm2835-audio";
-+ brcm,pwm-channels = <8>;
-+ status = "disabled";
-+ };
-+
-+ /* External sound card */
-+ sound: sound {
-+ };
-+
-+ soc: soc {
-+ compatible = "simple-bus";
-+ #address-cells = <1>;
-+ #size-cells = <1>;
-+
-+ dma: dma@7e007000 {
-+ compatible = "brcm,bcm2835-dma";
-+ reg = <0x7e007000 0xf00>;
-+ interrupts = <1 16>,
-+ <1 17>,
-+ <1 18>,
-+ <1 19>,
-+ <1 20>,
-+ <1 21>,
-+ <1 22>,
-+ <1 23>,
-+ <1 24>,
-+ <1 25>,
-+ <1 26>,
-+ <1 27>;
-+
-+ #dma-cells = <1>;
-+ brcm,dma-channel-mask = <0x0f35>;
-+ };
-+
-+ intc: interrupt-controller {
-+ compatible = "brcm,bcm2708-armctrl-ic";
-+ reg = <0x7e00b200 0x200>;
-+ interrupt-controller;
-+ #interrupt-cells = <2>;
-+ };
-+
-+ mailbox: mailbox@7e00b800 {
-+ compatible = "brcm,bcm2835-mbox";
-+ reg = <0x7e00b880 0x40>;
-+ interrupts = <0 1>;
-+ #mbox-cells = <0>;
-+ };
-+
-+ watchdog: watchdog@7e100000 {
-+ compatible = "brcm,bcm2835-pm-wdt";
-+ reg = <0x7e100000 0x28>;
-+ status = "disabled";
-+ };
-+
-+ random: rng@7e104000 {
-+ compatible = "brcm,bcm2835-rng";
-+ reg = <0x7e104000 0x10>;
-+ status = "disabled";
-+ };
-+
-+ gpio: gpio@7e200000 {
-+ compatible = "brcm,bcm2835-gpio";
-+ reg = <0x7e200000 0xb4>;
-+ interrupts = <2 17>, <2 18>;
-+
-+ gpio-controller;
-+ #gpio-cells = <2>;
-+
-+ interrupt-controller;
-+ #interrupt-cells = <2>;
-+ };
-+
-+ uart0: uart@7e201000 {
-+ compatible = "arm,pl011", "arm,primecell";
-+ reg = <0x7e201000 0x1000>;
-+ interrupts = <2 25>;
-+ clocks = <&clk_uart0 &clk_apb_p>;
-+ clock-names = "uartclk","apb_pclk";
-+ arm,primecell-periphid = <0x00241011>; // For an explanation, see
-+ // https://github.com/raspberrypi/linux/commit/13731d862cf5219216533a3b0de052cee4cc5038
-+ status = "disabled";
-+ };
-+
-+ i2s: i2s@7e203000 {
-+ compatible = "brcm,bcm2708-i2s";
-+ reg = <0x7e203000 0x24>,
-+ <0x7e101098 0x08>;
-+
-+ //dmas = <&dma 2>,
-+ // <&dma 3>;
-+ dma-names = "tx", "rx";
-+ status = "disabled";
-+ };
-+
-+ spi0: spi@7e204000 {
-+ compatible = "brcm,bcm2835-spi";
-+ reg = <0x7e204000 0x1000>;
-+ interrupts = <2 22>;
-+ clocks = <&clk_core>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ status = "disabled";
-+ /* the dma channels */
-+ dmas = <&dma 6>, <&dma 7>;
-+ dma-names = "tx", "rx";
-+ /* the chipselects used - <0> means native GPIO
-+ * add more gpios if necessary as <&gpio 6 1>
-+ * (but do not forget to make them output!)
-+ */
-+ cs-gpios = <0>, <0>;
-+ };
-+
-+ i2c0: i2c@7e205000 {
-+ compatible = "brcm,bcm2708-i2c";
-+ reg = <0x7e205000 0x1000>;
-+ interrupts = <2 21>;
-+ clocks = <&clk_i2c>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ status = "disabled";
-+ };
-+
-+ pwm: pwm@7e20c000 {
-+ compatible = "brcm,bcm2835-pwm";
-+ reg = <0x7e20c000 0x28>;
-+ clocks = <&clk_pwm>;
-+ #pwm-cells = <2>;
-+ status = "disabled";
-+ };
-+
-+ uart1: uart@7e215040 {
-+ compatible = "brcm,bcm2835-aux-uart", "ns16550";
-+ reg = <0x7e215040 0x40>;
-+ interrupts = <1 29>;
-+ clock-frequency = <500000000>;
-+ reg-shift = <2>;
-+ no-loopback-test;
-+ status = "disabled";
-+ };
-+
-+ mmc: mmc@7e300000 {
-+ compatible = "brcm,bcm2835-mmc";
-+ reg = <0x7e300000 0x100>;
-+ interrupts = <2 30>;
-+ clocks = <&clk_mmc>;
-+ dmas = <&dma 11>,
-+ <&dma 11>;
-+ dma-names = "tx", "rx";
-+ status = "disabled";
-+ };
-+
-+ i2c1: i2c@7e804000 {
-+ compatible = "brcm,bcm2708-i2c";
-+ reg = <0x7e804000 0x1000>;
-+ interrupts = <2 21>;
-+ clocks = <&clk_i2c>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ status = "disabled";
-+ };
-+
-+ i2c2: i2c@7e805000 {
-+ // Beware - this is shared with the HDMI module.
-+ // Careless use may break (really) your display.
-+ // Caveat emptor.
-+ compatible = "brcm,bcm2708-i2c";
-+ reg = <0x7e805000 0x1000>;
-+ interrupts = <2 21>;
-+ clocks = <&clk_i2c>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ status = "disabled";
-+ };
-+
-+ usb: usb@7e980000 {
-+ compatible = "brcm,bcm2708-usb";
-+ reg = <0x7e980000 0x10000>,
-+ <0x7e006000 0x1000>;
-+ interrupts = <2 0>,
-+ <1 9>;
-+ };
-+
-+ firmware: firmware {
-+ compatible = "raspberrypi,bcm2835-firmware";
-+ mboxes = <&mailbox>;
-+ };
-+
-+ leds: leds {
-+ compatible = "gpio-leds";
-+ };
-+
-+ fb: fb {
-+ compatible = "brcm,bcm2708-fb";
-+ firmware = <&firmware>;
-+ status = "disabled";
-+ };
-+
-+ vchiq: vchiq {
-+ compatible = "brcm,bcm2835-vchiq";
-+ reg = <0x7e00b840 0xf>;
-+ interrupts = <0 2>;
-+ cache-line-size = <32>;
-+ firmware = <&firmware>;
-+ };
-+
-+ thermal: thermal {
-+ compatible = "brcm,bcm2835-thermal";
-+ firmware = <&firmware>;
-+ };
++ timer {
++ compatible = "arm,armv7-timer";
++ clock-frequency = <19200000>;
++ interrupts = <3 0>, // PHYS_SECURE_PPI
++ <3 1>, // PHYS_NONSECURE_PPI
++ <3 3>, // VIRT_PPI
++ <3 2>; // HYP_PPI
++ always-on;
+ };
+
-+ clocks: clocks {
-+ compatible = "simple-bus";
++ cpus: cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
-+ clk_mmc: clock@0 {
-+ compatible = "fixed-clock";
-+ reg = <0>;
-+ #clock-cells = <0>;
-+ clock-output-names = "mmc";
-+ clock-frequency = <250000000>;
-+ };
-+
-+ clk_i2c: clock@1 {
-+ compatible = "fixed-clock";
-+ reg = <1>;
-+ #clock-cells = <0>;
-+ clock-output-names = "i2c";
-+ clock-frequency = <250000000>;
-+ };
-+
-+ clk_core: clock@2 {
-+ compatible = "fixed-clock";
-+ reg = <2>;
-+ #clock-cells = <0>;
-+ clock-output-names = "core";
-+ clock-frequency = <250000000>;
++ v7_cpu0: cpu@0 {
++ device_type = "cpu";
++ compatible = "arm,cortex-a7";
++ reg = <0xf00>;
++ clock-frequency = <800000000>;
+ };
+
-+ clk_uart0: clock@3 {
-+ compatible = "fixed-clock";
-+ reg = <3>;
-+ #clock-cells = <0>;
-+ clock-output-names = "uart0_pclk";
-+ clock-frequency = <3000000>;
++ v7_cpu1: cpu@1 {
++ device_type = "cpu";
++ compatible = "arm,cortex-a7";
++ reg = <0xf01>;
++ clock-frequency = <800000000>;
+ };
+
-+ clk_apb_p: clock@4 {
-+ compatible = "fixed-clock";
-+ reg = <4>;
-+ #clock-cells = <0>;
-+ clock-output-names = "apb_pclk";
-+ clock-frequency = <126000000>;
++ v7_cpu2: cpu@2 {
++ device_type = "cpu";
++ compatible = "arm,cortex-a7";
++ reg = <0xf02>;
++ clock-frequency = <800000000>;
+ };
+
-+ clk_pwm: clock@5 {
-+ compatible = "fixed-clock";
-+ reg = <3>;
-+ #clock-cells = <0>;
-+ clock-output-names = "pwm";
-+ clock-frequency = <100000000>;
++ v7_cpu3: cpu@3 {
++ device_type = "cpu";
++ compatible = "arm,cortex-a7";
++ reg = <0xf03>;
++ clock-frequency = <800000000>;
+ };
+ };
+
+ __overrides__ {
-+ cache_line_size = <&vchiq>, "cache-line-size:0";
++ arm_freq = <&v7_cpu0>, "clock-frequency:0",
++ <&v7_cpu1>, "clock-frequency:0",
++ <&v7_cpu2>, "clock-frequency:0",
++ <&v7_cpu3>, "clock-frequency:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2709-rpi-2-b.dts linux-rpi/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2709-rpi-2-b.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2709-rpi-2-b.dts 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,129 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2709-rpi-2-b.dts linux-rpi/arch/arm/boot/dts/bcm2709-rpi-2-b.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2709-rpi-2-b.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/bcm2709-rpi-2-b.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,128 @@
+/dts-v1/;
+
+/include/ "bcm2709.dtsi"
@@ -1091,7 +925,6 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2709-rpi-2-b.dts linux-rpi/arch/arm/b
+ __overrides__ {
+ uart0 = <&uart0>,"status";
+ uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
-+ uart1_clkrate = <&uart1>,"clock-frequency:0";
+ i2s = <&i2s>,"status";
+ spi = <&spi0>,"status";
+ i2c0 = <&i2c0>,"status";
@@ -1115,89 +948,170 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2709-rpi-2-b.dts linux-rpi/arch/arm/b
+ random = <&random>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2709.dtsi linux-rpi/arch/arm/boot/dts/bcm2709.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2709.dtsi 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/bcm2709.dtsi 2015-08-26 10:26:04.693259532 +0200
-@@ -0,0 +1,76 @@
-+/include/ "bcm2708_common.dtsi"
-+
-+/ {
-+ compatible = "brcm,bcm2709";
-+ model = "BCM2709";
-+
-+ chosen {
-+ /* No padding required - the boot loader can do that. */
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2835.dtsi linux-rpi/arch/arm/boot/dts/bcm2835.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2835.dtsi 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/boot/dts/bcm2835.dtsi 2015-10-07 16:40:31.000000000 +0200
+@@ -6,14 +6,15 @@
+ interrupt-parent = <&intc>;
+
+ chosen {
+- bootargs = "earlyprintk console=ttyAMA0";
+ bootargs = "";
-+ };
-+
-+ soc {
-+ ranges = <0x7e000000 0x3f000000 0x01000000>;
-+
-+ arm-pmu {
-+ compatible = "arm,cortex-a7-pmu";
-+ interrupts = <3 9>;
-+ };
-+
-+ gpiomem {
-+ compatible = "brcm,bcm2835-gpiomem";
-+ reg = <0x7e200000 0x1000>;
-+ status = "okay";
+ };
+
+- soc {
++ soc: soc {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x7e000000 0x20000000 0x02000000>;
++ dma-ranges = <0x40000000 0x00000000 0x20000000>;
+
+ timer@7e003000 {
+ compatible = "brcm,bcm2835-system-timer";
+@@ -50,16 +51,23 @@
+ #interrupt-cells = <2>;
+ };
+
+- watchdog@7e100000 {
++ watchdog: watchdog@7e100000 {
+ compatible = "brcm,bcm2835-pm-wdt";
+ reg = <0x7e100000 0x28>;
+ };
+
+- rng@7e104000 {
++ random: rng@7e104000 {
+ compatible = "brcm,bcm2835-rng";
+ reg = <0x7e104000 0x10>;
+ };
+
++ mailbox: mailbox@7e00b800 {
++ compatible = "brcm,bcm2835-mbox";
++ reg = <0x7e00b880 0x40>;
++ interrupts = <0 1>;
++ #mbox-cells = <0>;
+ };
-+ };
+
-+ timer {
-+ compatible = "arm,armv7-timer";
-+ clock-frequency = <19200000>;
-+ interrupts = <3 0>, // PHYS_SECURE_PPI
-+ <3 1>, // PHYS_NONSECURE_PPI
-+ <3 3>, // VIRT_PPI
-+ <3 2>; // HYP_PPI
-+ always-on;
+ gpio: gpio@7e200000 {
+ compatible = "brcm,bcm2835-gpio";
+ reg = <0x7e200000 0xb4>;
+@@ -83,7 +91,7 @@
+ #interrupt-cells = <2>;
+ };
+
+- uart@7e201000 {
++ uart0: uart@7e201000 {
+ compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
+ reg = <0x7e201000 0x1000>;
+ interrupts = <2 25>;
+@@ -93,8 +101,8 @@
+
+ i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = <0x7e203000 0x20>,
+- <0x7e101098 0x02>;
++ reg = <0x7e203000 0x24>,
++ <0x7e101098 0x08>;
+
+ dmas = <&dma 2>,
+ <&dma 3>;
+@@ -102,7 +110,7 @@
+ status = "disabled";
+ };
+
+- spi: spi@7e204000 {
++ spi0: spi@7e204000 {
+ compatible = "brcm,bcm2835-spi";
+ reg = <0x7e204000 0x1000>;
+ interrupts = <2 22>;
+@@ -122,11 +130,14 @@
+ status = "disabled";
+ };
+
+- sdhci: sdhci@7e300000 {
+- compatible = "brcm,bcm2835-sdhci";
++ mmc: mmc@7e300000 {
++ compatible = "brcm,bcm2835-mmc";
+ reg = <0x7e300000 0x100>;
+ interrupts = <2 30>;
+ clocks = <&clk_mmc>;
++ dmas = <&dma 11>,
++ <&dma 11>;
++ dma-names = "tx", "rx";
+ status = "disabled";
+ };
+
+@@ -140,10 +151,12 @@
+ status = "disabled";
+ };
+
+- usb@7e980000 {
+- compatible = "brcm,bcm2835-usb";
+- reg = <0x7e980000 0x10000>;
+- interrupts = <1 9>;
++ usb: usb@7e980000 {
++ compatible = "brcm,bcm2708-usb";
++ reg = <0x7e980000 0x10000>,
++ <0x7e006000 0x1000>;
++ interrupts = <2 0>,
++ <1 9>;
+ };
+
+ arm-pmu {
+@@ -161,7 +174,7 @@
+ reg = <0>;
+ #clock-cells = <0>;
+ clock-output-names = "mmc";
+- clock-frequency = <100000000>;
++ clock-frequency = <250000000>;
+ };
+
+ clk_i2c: clock@1 {
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi-b.dts linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi-b.dts 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -5,19 +5,28 @@
+ compatible = "raspberrypi,model-b", "brcm,bcm2835";
+ model = "Raspberry Pi Model B";
+
+- leds {
+- act {
+- gpios = <&gpio 16 1>;
+- };
+- };
+ };
+
+ &gpio {
+- pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
+-
+- /* I2S interface */
+- i2s_alt2: i2s_alt2 {
++ i2s_pins: i2s {
+ brcm,pins = <28 29 30 31>;
+- brcm,function = <6>; /* alt2 */
++ brcm,function = <4>; /* alt0 */
+ };
++};
+
-+ cpus: cpus {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ v7_cpu0: cpu@0 {
-+ device_type = "cpu";
-+ compatible = "arm,cortex-a7";
-+ reg = <0xf00>;
-+ clock-frequency = <800000000>;
-+ };
-+
-+ v7_cpu1: cpu@1 {
-+ device_type = "cpu";
-+ compatible = "arm,cortex-a7";
-+ reg = <0xf01>;
-+ clock-frequency = <800000000>;
-+ };
-+
-+ v7_cpu2: cpu@2 {
-+ device_type = "cpu";
-+ compatible = "arm,cortex-a7";
-+ reg = <0xf02>;
-+ clock-frequency = <800000000>;
-+ };
++&i2s {
++ #sound-dai-cells = <0>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&i2s_pins>;
++};
+
-+ v7_cpu3: cpu@3 {
-+ device_type = "cpu";
-+ compatible = "arm,cortex-a7";
-+ reg = <0xf03>;
-+ clock-frequency = <800000000>;
-+ };
-+ };
++&act_led {
++ gpios = <&gpio 16 1>;
++};
+
++/ {
+ __overrides__ {
-+ arm_freq = <&v7_cpu0>, "clock-frequency:0",
-+ <&v7_cpu1>, "clock-frequency:0",
-+ <&v7_cpu2>, "clock-frequency:0",
-+ <&v7_cpu3>, "clock-frequency:0";
-+ };
-+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts 2015-08-26 10:26:04.693259532 +0200
++ act_led_gpio = <&act_led>,"gpios:4";
++ act_led_activelow = <&act_led>,"gpios:8";
+ };
+ };
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts
+--- linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts 2015-10-07 16:40:31.000000000 +0200
@@ -4,27 +4,40 @@
/ {
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
@@ -1256,51 +1170,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi-b-plus.dts linux-rpi/arch/ar
+ pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi-b.dts linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b.dts
---- linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi-b.dts 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi-b.dts 2015-08-26 10:26:04.693259532 +0200
-@@ -5,19 +5,28 @@
- compatible = "raspberrypi,model-b", "brcm,bcm2835";
- model = "Raspberry Pi Model B";
-
-- leds {
-- act {
-- gpios = <&gpio 16 1>;
-- };
-- };
- };
-
- &gpio {
-- pinctrl-0 = <&gpioout &alt0 &i2s_alt2 &alt3>;
--
-- /* I2S interface */
-- i2s_alt2: i2s_alt2 {
-+ i2s_pins: i2s {
- brcm,pins = <28 29 30 31>;
-- brcm,function = <6>; /* alt2 */
-+ brcm,function = <4>; /* alt0 */
-+ };
-+};
-+
-+&i2s {
-+ #sound-dai-cells = <0>;
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&i2s_pins>;
-+};
-+
-+&act_led {
-+ gpios = <&gpio 16 1>;
-+};
-+
-+/ {
-+ __overrides__ {
-+ act_led_gpio = <&act_led>,"gpios:4";
-+ act_led_activelow = <&act_led>,"gpios:8";
- };
- };
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi.dtsi linux-rpi/arch/arm/boot/dts/bcm2835-rpi.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi.dtsi 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi.dtsi 2015-08-26 10:26:04.693259532 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi.dtsi linux-rpi/arch/arm/boot/dts/bcm2835-rpi.dtsi
+--- linux-4.1.10/arch/arm/boot/dts/bcm2835-rpi.dtsi 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/boot/dts/bcm2835-rpi.dtsi 2015-10-07 16:40:31.000000000 +0200
@@ -1,51 +1,133 @@
/include/ "bcm2835.dtsi"
@@ -1453,133 +1325,18 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835-rpi.dtsi linux-rpi/arch/arm/boot
+ audio = <&audio>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/bcm2835.dtsi linux-rpi/arch/arm/boot/dts/bcm2835.dtsi
---- linux-4.1.6/arch/arm/boot/dts/bcm2835.dtsi 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/boot/dts/bcm2835.dtsi 2015-08-26 10:26:04.693259532 +0200
-@@ -6,14 +6,15 @@
- interrupt-parent = <&intc>;
-
- chosen {
-- bootargs = "earlyprintk console=ttyAMA0";
-+ bootargs = "";
- };
-
-- soc {
-+ soc: soc {
- compatible = "simple-bus";
- #address-cells = <1>;
- #size-cells = <1>;
- ranges = <0x7e000000 0x20000000 0x02000000>;
-+ dma-ranges = <0x40000000 0x00000000 0x20000000>;
-
- timer@7e003000 {
- compatible = "brcm,bcm2835-system-timer";
-@@ -50,16 +51,23 @@
- #interrupt-cells = <2>;
- };
-
-- watchdog@7e100000 {
-+ watchdog: watchdog@7e100000 {
- compatible = "brcm,bcm2835-pm-wdt";
- reg = <0x7e100000 0x28>;
- };
-
-- rng@7e104000 {
-+ random: rng@7e104000 {
- compatible = "brcm,bcm2835-rng";
- reg = <0x7e104000 0x10>;
- };
-
-+ mailbox: mailbox@7e00b800 {
-+ compatible = "brcm,bcm2835-mbox";
-+ reg = <0x7e00b880 0x40>;
-+ interrupts = <0 1>;
-+ #mbox-cells = <0>;
-+ };
-+
- gpio: gpio@7e200000 {
- compatible = "brcm,bcm2835-gpio";
- reg = <0x7e200000 0xb4>;
-@@ -83,7 +91,7 @@
- #interrupt-cells = <2>;
- };
-
-- uart@7e201000 {
-+ uart0: uart@7e201000 {
- compatible = "brcm,bcm2835-pl011", "arm,pl011", "arm,primecell";
- reg = <0x7e201000 0x1000>;
- interrupts = <2 25>;
-@@ -93,8 +101,8 @@
-
- i2s: i2s@7e203000 {
- compatible = "brcm,bcm2835-i2s";
-- reg = <0x7e203000 0x20>,
-- <0x7e101098 0x02>;
-+ reg = <0x7e203000 0x24>,
-+ <0x7e101098 0x08>;
-
- dmas = <&dma 2>,
- <&dma 3>;
-@@ -102,7 +110,7 @@
- status = "disabled";
- };
-
-- spi: spi@7e204000 {
-+ spi0: spi@7e204000 {
- compatible = "brcm,bcm2835-spi";
- reg = <0x7e204000 0x1000>;
- interrupts = <2 22>;
-@@ -122,11 +130,14 @@
- status = "disabled";
- };
-
-- sdhci: sdhci@7e300000 {
-- compatible = "brcm,bcm2835-sdhci";
-+ mmc: mmc@7e300000 {
-+ compatible = "brcm,bcm2835-mmc";
- reg = <0x7e300000 0x100>;
- interrupts = <2 30>;
- clocks = <&clk_mmc>;
-+ dmas = <&dma 11>,
-+ <&dma 11>;
-+ dma-names = "tx", "rx";
- status = "disabled";
- };
-
-@@ -140,10 +151,12 @@
- status = "disabled";
- };
-
-- usb@7e980000 {
-- compatible = "brcm,bcm2835-usb";
-- reg = <0x7e980000 0x10000>;
-- interrupts = <1 9>;
-+ usb: usb@7e980000 {
-+ compatible = "brcm,bcm2708-usb";
-+ reg = <0x7e980000 0x10000>,
-+ <0x7e006000 0x1000>;
-+ interrupts = <2 0>,
-+ <1 9>;
- };
-
- arm-pmu {
-@@ -161,7 +174,7 @@
- reg = <0>;
- #clock-cells = <0>;
- clock-output-names = "mmc";
-- clock-frequency = <100000000>;
-+ clock-frequency = <250000000>;
- };
+diff -Nur linux-4.1.10/arch/arm/boot/dts/Makefile linux-rpi/arch/arm/boot/dts/Makefile
+--- linux-4.1.10/arch/arm/boot/dts/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/boot/dts/Makefile 2015-10-07 16:40:31.000000000 +0200
+@@ -1,5 +1,24 @@
+ ifeq ($(CONFIG_OF),y)
- clk_i2c: clock@1 {
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/Makefile linux-rpi/arch/arm/boot/dts/overlays/Makefile
---- linux-4.1.6/arch/arm/boot/dts/overlays/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/Makefile 2015-08-26 10:26:04.721259926 +0200
-@@ -0,0 +1,66 @@
-+ifeq ($(CONFIG_OF),y)
-+
-+# Overlays for the Raspberry Pi platform
++dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b.dtb
++dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-b-plus.dtb
++dtb-$(CONFIG_BCM2708_DT) += bcm2708-rpi-cm.dtb
++dtb-$(CONFIG_BCM2709_DT) += bcm2709-rpi-2-b.dtb
+
++# Raspberry Pi
+ifeq ($(CONFIG_BCM2708_DT),y)
+ RPI_DT_OVERLAYS=y
+endif
@@ -1589,683 +1346,34 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/Makefile linux-rpi/arch/arm/boo
+ifeq ($(CONFIG_ARCH_BCM2835),y)
+ RPI_DT_OVERLAYS=y
+endif
++ifeq ($(RPI_DT_OVERLAYS),y)
++ dts-dirs += overlays
++endif
+
-+dtb-$(RPI_DT_OVERLAYS) += ads7846-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += bmp085_i2c-sensor-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += dht11-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += enc28j60-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += gpio-poweroff-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hifiberry-amp-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hifiberry-dac-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hifiberry-dacplus-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hifiberry-digi-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hy28a-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += hy28b-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += i2c-rtc-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += i2s-mmap-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += iqaudio-dac-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += iqaudio-dacplus-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += lirc-rpi-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += mcp2515-can0-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += mcp2515-can1-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += mmc-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += mz61581-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += piscreen-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += pitft28-resistive-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += pps-gpio-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += rpi-dac-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += rpi-display-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += rpi-proto-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += rpi-sense-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += sdhost-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += spi-bcm2708-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += spi-bcm2835-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += spi-dma-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += tinylcd35-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += uart1-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += vga666-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += w1-gpio-overlay.dtb
-+dtb-$(RPI_DT_OVERLAYS) += w1-gpio-pullup-overlay.dtb
+ dtb-$(CONFIG_ARCH_ALPINE) += \
+ alpine-db.dtb
+ dtb-$(CONFIG_MACH_ASM9260) += \
+@@ -660,7 +679,17 @@
+ mt6592-evb.dtb \
+ mt8127-moose.dtb \
+ mt8135-evbp1.dtb
+
+targets += dtbs dtbs_install
+targets += $(dtb-y)
+
-+endif
-+
-+always := $(dtb-y)
-+clean-files := *.dtb
+ endif
+
+ always := $(dtb-y)
++subdir-y := $(dts-dirs)
+ clean-files := *.dtb
+
+# Enable fixups to support overlays on BCM2708 platforms
+ifeq ($(RPI_DT_OVERLAYS),y)
+ DTC_FLAGS ?= -@
+endif
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/README linux-rpi/arch/arm/boot/dts/overlays/README
---- linux-4.1.6/arch/arm/boot/dts/overlays/README 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/README 2015-08-26 10:26:04.725259982 +0200
-@@ -0,0 +1,617 @@
-+Introduction
-+============
-+
-+This directory contains Device Tree overlays. Device Tree makes it possible
-+to support many hardware configurations with a single kernel and without the
-+need to explicitly load or blacklist kernel modules. Note that this isn't a
-+"pure" Device Tree configuration (c.f. MACH_BCM2835) - some on-board devices
-+are still configured by the board support code, but the intention is to
-+eventually reach that goal.
-+
-+On Raspberry Pi, Device Tree usage is controlled from /boot/config.txt. By
-+default, the Raspberry Pi kernel boots with device tree enabled. You can
-+completely disable DT usage (for now) by adding:
-+
-+ device_tree=
-+
-+to your config.txt, which should cause your Pi to revert to the old way of
-+doing things after a reboot.
-+
-+In /boot you will find a .dtb for each base platform. This describes the
-+hardware that is part of the Raspberry Pi board. The loader (start.elf and its
-+siblings) selects the .dtb file appropriate for the platform by name, and reads
-+it into memory. At this point, all of the optional interfaces (i2c, i2s, spi)
-+are disabled, but they can be enabled using Device Tree parameters:
-+
-+ dtparam=i2c=on,i2s=on,spi=on
-+
-+However, this shouldn't be necessary in many use cases because loading an
-+overlay that requires one of those interfaces will cause it to be enabled
-+automatically, and it is advisable to only enable interfaces if they are
-+needed.
-+
-+Configuring additional, optional hardware is done using Device Tree overlays
-+(see below).
-+
-+raspi-config
-+============
-+
-+The Advanced Options section of the raspi-config utility can enable and disable
-+Device Tree use, as well as toggling the I2C and SPI interfaces. Note that it
-+is possible to both enable an interface and blacklist the driver, if for some
-+reason you should want to defer the loading.
-+
-+Modules
-+=======
-+
-+As well as describing the hardware, Device Tree also gives enough information
-+to allow suitable driver modules to be located and loaded, with the corollary
-+that unneeded modules are not loaded. As a result it should be possible to
-+remove lines from /etc/modules, and /etc/modprobe.d/raspi-blacklist.conf can
-+have its contents deleted (or commented out).
-+
-+Using Overlays
-+==============
-+
-+Overlays are loaded using the "dtoverlay" directive. As an example, consider the
-+popular lirc-rpi module, the Linux Infrared Remote Control driver. In the
-+pre-DT world this would be loaded from /etc/modules, with an explicit
-+"modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled,
-+this becomes a line in config.txt:
-+
-+ dtoverlay=lirc-rpi
-+
-+This causes the file /boot/overlays/lirc-rpi-overlay.dtb to be loaded. By
-+default it will use GPIOs 17 (out) and 18 (in), but this can be modified using
-+DT parameters:
-+
-+ dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=13
-+
-+Parameters always have default values, although in some cases (e.g. "w1-gpio")
-+it is necessary to provided multiple overlays in order to get the desired
-+behaviour. See the list of overlays below for a description of the parameters and their defaults.
-+
-+The Overlay and Parameter Reference
-+===================================
-+
-+N.B. When editing this file, please preserve the indentation levels to make it simple to parse
-+programmatically. NO HARD TABS.
-+
-+
-+Name: <The base DTB>
-+Info: Configures the base Raspberry Pi hardware
-+Load: <loaded automatically>
-+Params:
-+ audio Set to "on" to enable the onboard ALSA audio
-+ interface (default "off")
-+
-+ i2c_arm Set to "on" to enable the ARM's i2c interface
-+ (default "off")
-+
-+ i2c_vc Set to "on" to enable the i2c interface
-+ usually reserved for the VideoCore processor
-+ (default "off")
-+
-+ i2c An alias for i2c_arm
-+
-+ i2c_arm_baudrate Set the baudrate of the ARM's i2c interface
-+ (default "100000")
-+
-+ i2c_vc_baudrate Set the baudrate of the VideoCore i2c interface
-+ (default "100000")
-+
-+ i2c_baudrate An alias for i2c_arm_baudrate
-+
-+ i2s Set to "on" to enable the i2s interface
-+ (default "off")
-+
-+ spi Set to "on" to enable the spi interfaces
-+ (default "off")
-+
-+ random Set to "on" to enable the hardware random
-+ number generator (default "off")
-+
-+ uart0 Set to "off" to disable uart0 (default "on")
-+
-+ watchdog Set to "on" to enable the hardware watchdog
-+ (default "off")
-+
-+ act_led_trigger Choose which activity the LED tracks.
-+ Use "heartbeat" for a nice load indicator.
-+ (default "mmc")
-+
-+ act_led_activelow Set to "on" to invert the sense of the LED
-+ (default "off")
-+
-+ act_led_gpio Set which GPIO to use for the activity LED
-+ (in case you want to connect it to an external
-+ device)
-+ (default "16" on a non-Plus board, "47" on a
-+ Plus or Pi 2)
-+
-+ pwr_led_trigger
-+ pwr_led_activelow
-+ pwr_led_gpio
-+ As for act_led_*, but using the PWR LED.
-+ Not available on Model A/B boards.
-+
-+ N.B. It is recommended to only enable those interfaces that are needed.
-+ Leaving all interfaces enabled can lead to unwanted behaviour (i2c_vc
-+ interfering with Pi Camera, I2S and SPI hogging GPIO pins, etc.)
-+ Note also that i2c, i2c_arm and i2c_vc are aliases for the physical
-+ interfaces i2c0 and i2c1. Use of the numeric variants is still possible
-+ but deprecated because the ARM/VC assignments differ between board
-+ revisions. The same board-specific mapping applies to i2c_baudrate,
-+ and the other i2c baudrate parameters.
-+
-+
-+Name: ads7846
-+Info: ADS7846 Touch controller
-+Load: dtoverlay=ads7846,<param>=<val>
-+Params: cs SPI bus Chip Select (default 1)
-+ speed SPI bus speed (default 2Mhz, max 3.25MHz)
-+ penirq GPIO used for PENIRQ. REQUIRED
-+ penirq_pull Set GPIO pull (default 0=none, 2=pullup)
-+ swapxy Swap x and y axis
-+ xmin Minimum value on the X axis (default 0)
-+ ymin Minimum value on the Y axis (default 0)
-+ xmax Maximum value on the X axis (default 4095)
-+ ymax Maximum value on the Y axis (default 4095)
-+ pmin Minimum reported pressure value (default 0)
-+ pmax Maximum reported pressure value (default 65535)
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+ (default 400)
-+
-+ penirq is required and usually xohms (60-100) has to be set as well.
-+ Apart from that, pmax (255) and swapxy are also common.
-+ The rest of the calibration can be done with xinput-calibrator.
-+ See: github.com/notro/fbtft/wiki/FBTFT-on-Raspian
-+ Device Tree binding document:
-+ www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
-+
-+
-+Name: bmp085_i2c-sensor
-+Info: Configures the BMP085/BMP180 digital barometric pressure and temperature
-+ sensors from Bosch Sensortec
-+Load: dtoverlay=bmp085_i2c-sensor
-+Params: <None>
-+
-+
-+Name: dht11
-+Info: Overlay for the DHT11/DHT21/DHT22 humidity/temperature sensors
-+ Also sometimes found with the part number(s) AM230x.
-+Load: dtoverlay=dht11,<param>=<val>
-+Params: gpiopin GPIO connected to the sensor's DATA output.
-+ (default 4)
-+
-+
-+[ The ds1307-rtc overlay has been deleted. See i2c-rtc. ]
-+
-+
-+Name: enc28j60
-+Info: Overlay for the Microchip ENC28J60 Ethernet Controller (SPI)
-+Load: dtoverlay=enc28j60,<param>=<val>
-+Params: int_pin GPIO used for INT (default 25)
-+
-+ speed SPI bus speed (default 12000000)
-+
-+
-+Name: gpio-poweroff
-+Info: Drives a GPIO high or low on reboot
-+Load: gpio-poweroff,<param>=<val>
-+Params: gpiopin GPIO for signalling (default 26)
-+
-+ active_low Set if the power control device requires a
-+ high->low transition to trigger a power-down.
-+ Note that this will require the support of a
-+ custom dt-blob.bin to prevent a power-down
-+ during the boot process, and that a reboot
-+ will also cause the pin to go low.
-+
-+
-+Name: hifiberry-amp
-+Info: Configures the HifiBerry Amp and Amp+ audio cards
-+Load: dtoverlay=hifiberry-amp
-+Params: <None>
-+
-+
-+Name: hifiberry-dac
-+Info: Configures the HifiBerry DAC audio card
-+Load: dtoverlay=hifiberry-dac
-+Params: <None>
-+
-+
-+Name: hifiberry-dacplus
-+Info: Configures the HifiBerry DAC+ audio card
-+Load: dtoverlay=hifiberry-dacplus
-+Params: <None>
-+
-+
-+Name: hifiberry-digi
-+Info: Configures the HifiBerry Digi audio card
-+Load: dtoverlay=hifiberry-digi
-+Params: <None>
-+
-+
-+Name: hy28a
-+Info: HY28A - 2.8" TFT LCD Display Module by HAOYU Electronics
-+ Default values match Texy's display shield
-+Load: dtoverlay=hy28a,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+
-+ resetgpio GPIO used to reset controller
-+
-+ ledgpio GPIO used to control backlight
-+
-+
-+Name: hy28b
-+Info: HY28B - 2.8" TFT LCD Display Module by HAOYU Electronics
-+ Default values match Texy's display shield
-+Load: dtoverlay=hy28b,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+
-+ resetgpio GPIO used to reset controller
-+
-+ ledgpio GPIO used to control backlight
-+
-+
-+Name: i2c-rtc
-+Info: Adds support for a number of I2C Real Time Clock devices
-+Load: dtoverlay=i2c-rtc,<param>
-+Params: ds1307 Select the DS1307 device
-+
-+ ds3231 Select the DS3231 device
-+
-+ mcp7941x Select the MCP7941x device
-+
-+ pcf2127 Select the PCF2127 device
-+
-+ pcf8523 Select the PCF8523 device
-+
-+ pcf8563 Select the PCF8563 device
-+
-+
-+Name: i2s-mmap
-+Info: Enables mmap support in the bcm2708-i2s driver
-+Load: dtoverlay=i2s-mmap
-+Params: <None>
-+
-+
-+Name: iqaudio-dac
-+Info: Configures the IQaudio DAC audio card
-+Load: dtoverlay=iqaudio-dac
-+Params: <None>
-+
-+
-+Name: iqaudio-dacplus
-+Info: Configures the IQaudio DAC+ audio card
-+Load: dtoverlay=iqaudio-dacplus
-+Params: <None>
-+
-+
-+Name: lirc-rpi
-+Info: Configures lirc-rpi (Linux Infrared Remote Control for Raspberry Pi)
-+ Consult the module documentation for more details.
-+Load: dtoverlay=lirc-rpi,<param>=<val>,...
-+Params: gpio_out_pin GPIO for output (default "17")
-+
-+ gpio_in_pin GPIO for input (default "18")
-+
-+ gpio_in_pull Pull up/down/off on the input pin
-+ (default "down")
-+
-+ sense Override the IR receive auto-detection logic:
-+ "0" = force active-high
-+ "1" = force active-low
-+ "-1" = use auto-detection
-+ (default "-1")
-+
-+ softcarrier Turn the software carrier "on" or "off"
-+ (default "on")
-+
-+ invert "on" = invert the output pin (default "off")
-+
-+ debug "on" = enable additional debug messages
-+ (default "off")
-+
-+
-+Name: mcp2515-can0
-+Info: Configures the MCP2515 CAN controller on spi0.0
-+Load: dtoverlay=mcp2515-can0,<param>=<val>
-+Params: oscillator Clock frequency for the CAN controller (Hz)
-+
-+ spimaxfrequency Maximum SPI frequence (Hz)
-+
-+ interrupt GPIO for interrupt signal
-+
-+
-+Name: mcp2515-can1
-+Info: Configures the MCP2515 CAN controller on spi0.1
-+Load: dtoverlay=mcp2515-can1,<param>=<val>
-+Params: oscillator Clock frequency for the CAN controller (Hz)
-+
-+ spimaxfrequency Maximum SPI frequence (Hz)
-+
-+ interrupt GPIO for interrupt signal
-+
-+
-+Name: mmc
-+Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
-+Load: dtoverlay=mmc,<param>=<val>
-+Params: overclock_50 Clock (in MHz) to use when the MMC framework
-+ requests 50MHz
-+ force_pio Disable DMA support
-+
-+
-+Name: mz61581
-+Info: MZ61581 display by Tontec
-+Load: dtoverlay=mz61581,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+
-+
-+[ The pcf2127-rtc overlay has been deleted. See i2c-rtc. ]
-+
-+
-+[ The pcf8523-rtc overlay has been deleted. See i2c-rtc. ]
-+
-+
-+[ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ]
-+
-+
-+Name: piscreen
-+Info: PiScreen display by OzzMaker.com
-+Load: dtoverlay=piscreen,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+
-+
-+Name: pitft28-resistive
-+Info: Adafruit PiTFT 2.8" resistive touch screen
-+Load: dtoverlay=pitft28-resistive,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+
-+Name: pps-gpio
-+Info: Configures the pps-gpio (pulse-per-second time signal via GPIO).
-+Load: dtoverlay=pps-gpio,<param>=<val>
-+Params: gpiopin Input GPIO (default "18")
-+
-+
-+Name: pwm
-+Info: Configures a single PWM channel
-+ Legal pin,function combinations for each channel:
-+ PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
-+ PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
-+ N.B.:
-+ 1) Pin 18 is the only one available on all platforms, and
-+ it is the one used by the I2S audio interface.
-+ Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
-+ 2) The onboard analogue audio output uses both PWM channels.
-+ 3) So be careful mixing audio and PWM.
-+ 4) Currently the clock must have been enabled and configured
-+ by other means.
-+Load: dtoverlay=pwm-2chan,<param>=<val>
-+Load: dtoverlay=pwm,<param>=<val>
-+Params: pin Output pin (default 18) - see table
-+ func Pin function (default 2 = Alt5) - see above
-+ clock PWM clock frequency (informational)
-+
-+
-+Name: pwm-2chan
-+Info: Configures both PWM channels
-+ Legal pin,function combinations for each channel:
-+ PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
-+ PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
-+ N.B.:
-+ 1) Pin 18 is the only one available on all platforms, and
-+ it is the one used by the I2S audio interface.
-+ Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
-+ 2) The onboard analogue audio output uses both PWM channels.
-+ 3) So be careful mixing audio and PWM.
-+ 4) Currently the clock must have been enabled and configured
-+ by other means.
-+Load: dtoverlay=pwm-2chan,<param>=<val>
-+Params: pin Output pin (default 18) - see table
-+ pin2 Output pin for other channel (default 19)
-+ func Pin function (default 2 = Alt5) - see above
-+ func2 Function for pin2 (default 2 = Alt5)
-+ clock PWM clock frequency (informational)
-+
-+
-+Name: rpi-dac
-+Info: Configures the RPi DAC audio card
-+Load: dtoverlay=rpi-dac
-+Params: <None>
-+
-+
-+Name: rpi-display
-+Info: RPi-Display - 2.8" Touch Display by Watterott
-+Load: dtoverlay=rpi-display,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ xohms Touchpanel sensitivity (X-plate resistance)
-+
-+
-+Name: rpi-ft5406
-+Info: Official Raspberry Pi display touchscreen
-+Load: dtoverlay=rpi-ft5406
-+Params: <None>
-+
-+
-+Name: rpi-proto
-+Info: Configures the RPi Proto audio card
-+Load: dtoverlay=rpi-proto
-+Params: <None>
-+
-+
-+Name: rpi-sense
-+Info: Raspberry Pi Sense HAT
-+Load: dtoverlay=rpi-sense
-+Params: <None>
-+
-+
-+Name: sdhost
-+Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock
-+Load: dtoverlay=sdhost,<param>=<val>
-+Params: overclock_50 Clock (in MHz) to use when the MMC framework
-+ requests 50MHz
-+
-+ force_pio Disable DMA support (default off)
-+
-+ pio_limit Number of blocks above which to use DMA
-+ (default 1)
-+
-+ debug Enable debug output (default off)
-+
-+
-+Name: spi-bcm2708
-+Info: Selects the bcm2708-spi SPI driver
-+Load: dtoverlay=spi-bcm2708
-+Params: <None>
-+
-+
-+Name: spi-bcm2835
-+Info: Selects the bcm2835-spi SPI driver
-+Load: dtoverlay=spi-bcm2835
-+Params: <None>
-+
-+
-+Name: spi-dma
-+Info: enables dma modes for spi-bcm2835
-+Load: dtoverlay=spi-dma
-+Params: <None>
-+
-+
-+Name: tinylcd35
-+Info: 3.5" Color TFT Display by www.tinylcd.com
-+ Options: Touch, RTC, keypad
-+Load: dtoverlay=tinylcd35,<param>=<val>
-+Params: speed Display SPI bus speed
-+
-+ rotate Display rotation {0,90,180,270}
-+
-+ fps Delay between frame updates
-+
-+ debug Debug output level {0-7}
-+
-+ touch Enable touch panel
-+
-+ touchgpio Touch controller IRQ GPIO
-+
-+ xohms Touchpanel: Resistance of X-plate in ohms
-+
-+ rtc-pcf PCF8563 Real Time Clock
-+
-+ rtc-ds DS1307 Real Time Clock
-+
-+ keypad Enable keypad
-+
-+ Examples:
-+ Display with touchpanel, PCF8563 RTC and keypad:
-+ dtoverlay=tinylcd35,touch,rtc-pcf,keypad
-+ Old touch display:
-+ dtoverlay=tinylcd35,touch,touchgpio=3
-+
-+
-+Name: uart1
-+Info: Enable uart1 in place of uart0
-+Load: dtoverlay=uart1,<param>=<val>
-+Params: txd1_pin GPIO pin for TXD1 (14, 32 or 40 - default 14)
-+
-+ rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15)
-+
-+
-+Name: vga666
-+Info: Overlay for the Fen Logic VGA666 board
-+ This uses GPIOs 2-21 (so no I2C), and activates the output 2-3 seconds
-+ after the kernel has started.
-+Load: dtoverlay=vga666
-+Params: <None>
-+
-+
-+Name: w1-gpio
-+Info: Configures the w1-gpio Onewire interface module.
-+ Use this overlay if you *don't* need a GPIO to drive an external pullup.
-+Load: dtoverlay=w1-gpio,<param>=<val>
-+Params: gpiopin GPIO for I/O (default "4")
-+
-+ pullup Non-zero, "on", or "y" to enable the parasitic
-+ power (2-wire, power-on-data) feature
-+
-+
-+Name: w1-gpio-pullup
-+Info: Configures the w1-gpio Onewire interface module.
-+ Use this overlay if you *do* need a GPIO to drive an external pullup.
-+Load: dtoverlay=w1-gpio-pullup,<param>=<val>,...
-+Params: gpiopin GPIO for I/O (default "4")
-+
-+ pullup Non-zero, "on", or "y" to enable the parasitic
-+ power (2-wire, power-on-data) feature
-+
-+ extpullup GPIO for external pullup (default "5")
-+
-+
-+Troubleshooting
-+===============
-+
-+If you are experiencing problems that you think are DT-related, enable DT
-+diagnostic output by adding this to /boot/config.txt:
-+
-+ dtdebug=on
-+
-+and rebooting. Then run:
-+
-+ sudo vcdbg log msg
-+
-+and look for relevant messages.
-+
-+Further reading
-+===============
-+
-+This is only meant to be a quick introduction to the subject of Device Tree on
-+Raspberry Pi. There is a more complete explanation here:
-+
-+http://www.raspberrypi.org/documentation/configuration/device-tree.md
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/ads7846-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/ads7846-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/ads7846-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/ads7846-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/ads7846-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/ads7846-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/ads7846-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/ads7846-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,83 @@
+/*
+ * Generic Device Tree overlay for the ADS7846 touch controller
@@ -2350,9 +1458,67 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/ads7846-overlay.dts linux-rpi/a
+ xohms = <&ads7846>,"ti,x-plate-ohms;0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/at86rf233-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/at86rf233-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/at86rf233-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/at86rf233-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,54 @@
++/dts-v1/;
++/plugin/;
++
++/* Overlay for Atmel AT86RF233 IEEE 802.15.4 WPAN transceiver on spi0.0 */
++
++/ {
++ compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";
++
++ fragment@0 {
++ target = <&spi0>;
++ __overlay__ {
++ #address-cells = <1>;
++ #size-cells = <0>;
++
++ status = "okay";
++
++ spidev@0{
++ status = "disabled";
++ };
++
++ lowpan0: at86rf233@0 {
++ compatible = "atmel,at86rf233";
++ reg = <0>;
++ interrupt-parent = <&gpio>;
++ interrupts = <23 4>; /* active high */
++ reset-gpio = <&gpio 24 1>;
++ sleep-gpio = <&gpio 25 1>;
++ spi-max-frequency = <7500000>;
++ xtal-trim = /bits/ 8 <0xf>;
++ };
++ };
++ };
++
++ fragment@1 {
++ target = <&gpio>;
++ __overlay__ {
++ lowpan0_pins: lowpan0_pins {
++ brcm,pins = <23 24 25>;
++ brcm,function = <0 1 1>; /* in out out */
++ };
++ };
++ };
++
++ __overrides__ {
++ interrupt = <&lowpan0>, "interrupts:0",
++ <&lowpan0_pins>, "brcm,pins:0";
++ reset = <&lowpan0>, "reset-gpio:4",
++ <&lowpan0_pins>, "brcm,pins:4";
++ sleep = <&lowpan0>, "sleep-gpio:4",
++ <&lowpan0_pins>, "brcm,pins:8";
++ speed = <&lowpan0>, "spi-max-frequency:0";
++ trim = <&lowpan0>, "xtal-trim.0";
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,23 @@
+// Definitions for BMP085/BMP180 digital barometric pressure and temperature sensors from Bosch Sensortec
+/dts-v1/;
@@ -2377,9 +1543,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/bmp085_i2c-sensor-overlay.dts l
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/dht11-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/dht11-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/dht11-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/dht11-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/dht11-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/dht11-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/dht11-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/dht11-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+/*
+ * Overlay for the DHT11/21/22 humidity/temperature sensor modules.
@@ -2420,9 +1586,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/dht11-overlay.dts linux-rpi/arc
+ <&dht11>,"gpios:4";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/enc28j60-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/enc28j60-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/enc28j60-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/enc28j60-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/enc28j60-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/enc28j60-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/enc28j60-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/enc28j60-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,50 @@
+// Overlay for the Microchip ENC28J60 Ethernet Controller
+/dts-v1/;
@@ -2474,9 +1640,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/enc28j60-overlay.dts linux-rpi/
+ speed = <&eth1>, "spi-max-frequency:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,34 @@
+// Definitions for gpio-poweroff module
+/dts-v1/;
@@ -2512,9 +1678,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/gpio-poweroff-overlay.dts linux
+ active_low = <&power_ctrl>,"gpios:8";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for HiFiBerry Amp/Amp+
+/dts-v1/;
@@ -2555,9 +1721,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-amp-overlay.dts linux
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,34 @@
+// Definitions for HiFiBerry DAC
+/dts-v1/;
@@ -2593,10 +1759,10 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dac-overlay.dts linux
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts 2015-08-26 10:26:04.725259982 +0200
-@@ -0,0 +1,39 @@
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,50 @@
+// Definitions for HiFiBerry DAC+
+/dts-v1/;
+/plugin/;
@@ -2605,6 +1771,16 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts l
+ compatible = "brcm,bcm2708";
+
+ fragment@0 {
++ target-path = "/clocks";
++ __overlay__ {
++ dacpro_osc: dacpro_osc {
++ compatible = "hifiberry,dacpro-clk";
++ #clock-cells = <0>;
++ };
++ };
++ };
++
++ fragment@1 {
+ target = <&sound>;
+ __overlay__ {
+ compatible = "hifiberry,hifiberry-dacplus";
@@ -2613,14 +1789,14 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts l
+ };
+ };
+
-+ fragment@1 {
++ fragment@2 {
+ target = <&i2s>;
+ __overlay__ {
+ status = "okay";
+ };
+ };
+
-+ fragment@2 {
++ fragment@3 {
+ target = <&i2c1>;
+ __overlay__ {
+ #address-cells = <1>;
@@ -2631,14 +1807,15 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-dacplus-overlay.dts l
+ #sound-dai-cells = <0>;
+ compatible = "ti,pcm5122";
+ reg = <0x4d>;
++ clocks = <&dacpro_osc>;
+ status = "okay";
+ };
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for HiFiBerry Digi
+/dts-v1/;
@@ -2679,9 +1856,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hifiberry-digi-overlay.dts linu
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hy28a-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hy28a-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hy28a-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hy28a-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hy28a-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hy28a-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hy28a-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hy28a-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,87 @@
+/*
+ * Device Tree overlay for HY28A display
@@ -2770,9 +1947,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hy28a-overlay.dts linux-rpi/arc
+ <&hy28a_pins>, "brcm,pins:2";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hy28b-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hy28b-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/hy28b-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/hy28b-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/hy28b-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/hy28b-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/hy28b-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/hy28b-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,142 @@
+/*
+ * Device Tree overlay for HY28b display shield by Texy
@@ -2916,9 +2093,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/hy28b-overlay.dts linux-rpi/arc
+ <&hy28b_pins>, "brcm,pins:2";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,55 @@
+// Definitions for several I2C based Real Time Clocks
+/dts-v1/;
@@ -2975,9 +2152,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/i2c-rtc-overlay.dts linux-rpi/a
+ pcf8563 = <&pcf8563>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,13 @@
+/dts-v1/;
+/plugin/;
@@ -2992,9 +2169,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/i2s-mmap-overlay.dts linux-rpi/
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for IQaudIO DAC
+/dts-v1/;
@@ -3035,9 +2212,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dac-overlay.dts linux-r
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for IQaudIO DAC+
+/dts-v1/;
@@ -3078,9 +2255,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/iqaudio-dacplus-overlay.dts lin
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,57 @@
+// Definitions for lirc-rpi module
+/dts-v1/;
@@ -3139,9 +2316,85 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/lirc-rpi-overlay.dts linux-rpi/
+ debug = <&lirc_rpi>,"rpi,debug:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/Makefile linux-rpi/arch/arm/boot/dts/overlays/Makefile
+--- linux-4.1.10/arch/arm/boot/dts/overlays/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/Makefile 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,72 @@
++ifeq ($(CONFIG_OF),y)
++
++# Overlays for the Raspberry Pi platform
++
++ifeq ($(CONFIG_BCM2708_DT),y)
++ RPI_DT_OVERLAYS=y
++endif
++ifeq ($(CONFIG_BCM2709_DT),y)
++ RPI_DT_OVERLAYS=y
++endif
++ifeq ($(CONFIG_ARCH_BCM2835),y)
++ RPI_DT_OVERLAYS=y
++endif
++
++dtb-$(RPI_DT_OVERLAYS) += ads7846-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += at86rf233-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += bmp085_i2c-sensor-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += dht11-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += enc28j60-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += gpio-poweroff-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hifiberry-amp-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hifiberry-dac-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hifiberry-dacplus-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hifiberry-digi-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hy28a-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += hy28b-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += i2c-rtc-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += i2s-mmap-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += iqaudio-dac-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += iqaudio-dacplus-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += lirc-rpi-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += mcp2515-can0-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += mcp2515-can1-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += mmc-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += mz61581-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += piscreen-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += pitft28-resistive-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += pps-gpio-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += raspidac3-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += rpi-dac-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += rpi-display-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += rpi-proto-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += rpi-sense-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += sdhost-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += sdio-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += smi-dev-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += smi-nand-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += smi-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += spi-bcm2708-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += spi-bcm2835-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += spi-dma-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += tinylcd35-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += uart1-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += vga666-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += w1-gpio-overlay.dtb
++dtb-$(RPI_DT_OVERLAYS) += w1-gpio-pullup-overlay.dtb
++
++targets += dtbs dtbs_install
++targets += $(dtb-y)
++
++endif
++
++always := $(dtb-y)
++clean-files := *.dtb
++
++# Enable fixups to support overlays on BCM2708 platforms
++ifeq ($(RPI_DT_OVERLAYS),y)
++ DTC_FLAGS ?= -@
++endif
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,69 @@
+/*
+ * Device tree overlay for mcp251x/can0 on spi0.0
@@ -3212,9 +2465,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can0-overlay.dts linux-
+ interrupt = <&can0_pins>,"brcm,pins:0",<&can0>,"interrupts:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,69 @@
+/*
+ * Device tree overlay for mcp251x/can1 on spi0.1 edited by petit_miner
@@ -3285,9 +2538,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mcp2515-can1-overlay.dts linux-
+ interrupt = <&can1_pins>,"brcm,pins:0",<&can1>,"interrupts:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mmc-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mmc-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/mmc-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/mmc-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/mmc-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mmc-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/mmc-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/mmc-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,19 @@
+/dts-v1/;
+/plugin/;
@@ -3308,9 +2561,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mmc-overlay.dts linux-rpi/arch/
+ force_pio = <&mmc>,"brcm,force-pio?";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mz61581-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mz61581-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/mz61581-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/mz61581-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/mz61581-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/mz61581-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/mz61581-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/mz61581-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,111 @@
+/*
+ * Device Tree overlay for MZ61581-PI-EXT 2014.12.28 by Tontec
@@ -3326,8 +2579,6 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mz61581-overlay.dts linux-rpi/a
+ fragment@0 {
+ target = <&spi0>;
+ __overlay__ {
-+ /* does not work with spi-bcm2835 using software chip selects */
-+ compatible = "brcm,bcm2708-spi";
+ status = "okay";
+
+ spidev@0{
@@ -3373,6 +2624,7 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mz61581-overlay.dts linux-rpi/a
+ bgr;
+ fps = <30>;
+ buswidth = <8>;
++ txbuflen = <32768>;
+
+ reset-gpios = <&gpio 15 0>;
+ dc-gpios = <&gpio 25 0>;
@@ -3419,13 +2671,14 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/mz61581-overlay.dts linux-rpi/a
+ speed = <&mz61581>, "spi-max-frequency:0";
+ rotate = <&mz61581>, "rotate:0";
+ fps = <&mz61581>, "fps:0";
++ txbuflen = <&mz61581>, "txbuflen:0";
+ debug = <&mz61581>, "debug:0";
+ xohms = <&mz61581_ts>,"ti,x-plate-ohms;0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/piscreen-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/piscreen-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/piscreen-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/piscreen-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/piscreen-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/piscreen-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/piscreen-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/piscreen-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,96 @@
+/*
+ * Device Tree overlay for PiScreen 3.5" display shield by Ozzmaker
@@ -3523,9 +2776,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/piscreen-overlay.dts linux-rpi/
+ xohms = <&piscreen_ts>,"ti,x-plate-ohms;0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,115 @@
+/*
+ * Device Tree overlay for Adafruit PiTFT 2.8" resistive touch screen
@@ -3642,9 +2895,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pitft28-resistive-overlay.dts l
+ debug = <&pitft>,"debug:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,34 @@
+/dts-v1/;
+/plugin/;
@@ -3680,9 +2933,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pps-gpio-overlay.dts linux-rpi/
+ <&pps_pins>,"brcm,pins:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,46 @@
+/dts-v1/;
+/plugin/;
@@ -3730,9 +2983,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pwm-2chan-overlay.dts linux-rpi
+ clock = <&clk_pwm>,"clock-frequency:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pwm-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pwm-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/pwm-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/pwm-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/pwm-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/pwm-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/pwm-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/pwm-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,42 @@
+/dts-v1/;
+/plugin/;
@@ -3776,9 +3029,733 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/pwm-overlay.dts linux-rpi/arch/
+ clock = <&clk_pwm>,"clock-frequency:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/raspidac3-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/raspidac3-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/raspidac3-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/raspidac3-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,45 @@
++// Definitions for RaspiDACv3
++/dts-v1/;
++/plugin/;
++
++/ {
++ compatible = "brcm,bcm2708";
++
++ fragment@0 {
++ target = <&sound>;
++ __overlay__ {
++ compatible = "jg,raspidacv3";
++ i2s-controller = <&i2s>;
++ status = "okay";
++ };
++ };
++
++ fragment@1 {
++ target = <&i2s>;
++ __overlay__ {
++ status = "okay";
++ };
++ };
++
++ fragment@2 {
++ target = <&i2c1>;
++ __overlay__ {
++ #address-cells = <1>;
++ #size-cells = <0>;
++ status = "okay";
++
++ pcm5122@4c {
++ #sound-dai-cells = <0>;
++ compatible = "ti,pcm5122";
++ reg = <0x4c>;
++ status = "okay";
++ };
++
++ tpa6130a2: tpa6130a2@60 {
++ compatible = "ti,tpa6130a2";
++ reg = <0x60>;
++ status = "okay";
++ };
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/README linux-rpi/arch/arm/boot/dts/overlays/README
+--- linux-4.1.10/arch/arm/boot/dts/overlays/README 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/README 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,671 @@
++Introduction
++============
++
++This directory contains Device Tree overlays. Device Tree makes it possible
++to support many hardware configurations with a single kernel and without the
++need to explicitly load or blacklist kernel modules. Note that this isn't a
++"pure" Device Tree configuration (c.f. MACH_BCM2835) - some on-board devices
++are still configured by the board support code, but the intention is to
++eventually reach that goal.
++
++On Raspberry Pi, Device Tree usage is controlled from /boot/config.txt. By
++default, the Raspberry Pi kernel boots with device tree enabled. You can
++completely disable DT usage (for now) by adding:
++
++ device_tree=
++
++to your config.txt, which should cause your Pi to revert to the old way of
++doing things after a reboot.
++
++In /boot you will find a .dtb for each base platform. This describes the
++hardware that is part of the Raspberry Pi board. The loader (start.elf and its
++siblings) selects the .dtb file appropriate for the platform by name, and reads
++it into memory. At this point, all of the optional interfaces (i2c, i2s, spi)
++are disabled, but they can be enabled using Device Tree parameters:
++
++ dtparam=i2c=on,i2s=on,spi=on
++
++However, this shouldn't be necessary in many use cases because loading an
++overlay that requires one of those interfaces will cause it to be enabled
++automatically, and it is advisable to only enable interfaces if they are
++needed.
++
++Configuring additional, optional hardware is done using Device Tree overlays
++(see below).
++
++raspi-config
++============
++
++The Advanced Options section of the raspi-config utility can enable and disable
++Device Tree use, as well as toggling the I2C and SPI interfaces. Note that it
++is possible to both enable an interface and blacklist the driver, if for some
++reason you should want to defer the loading.
++
++Modules
++=======
++
++As well as describing the hardware, Device Tree also gives enough information
++to allow suitable driver modules to be located and loaded, with the corollary
++that unneeded modules are not loaded. As a result it should be possible to
++remove lines from /etc/modules, and /etc/modprobe.d/raspi-blacklist.conf can
++have its contents deleted (or commented out).
++
++Using Overlays
++==============
++
++Overlays are loaded using the "dtoverlay" directive. As an example, consider the
++popular lirc-rpi module, the Linux Infrared Remote Control driver. In the
++pre-DT world this would be loaded from /etc/modules, with an explicit
++"modprobe lirc-rpi" command, or programmatically by lircd. With DT enabled,
++this becomes a line in config.txt:
++
++ dtoverlay=lirc-rpi
++
++This causes the file /boot/overlays/lirc-rpi-overlay.dtb to be loaded. By
++default it will use GPIOs 17 (out) and 18 (in), but this can be modified using
++DT parameters:
++
++ dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=13
++
++Parameters always have default values, although in some cases (e.g. "w1-gpio")
++it is necessary to provided multiple overlays in order to get the desired
++behaviour. See the list of overlays below for a description of the parameters
++and their defaults.
++
++The Overlay and Parameter Reference
++===================================
++
++N.B. When editing this file, please preserve the indentation levels to make it
++simple to parse programmatically. NO HARD TABS.
++
++
++Name: <The base DTB>
++Info: Configures the base Raspberry Pi hardware
++Load: <loaded automatically>
++Params:
++ audio Set to "on" to enable the onboard ALSA audio
++ interface (default "off")
++
++ i2c_arm Set to "on" to enable the ARM's i2c interface
++ (default "off")
++
++ i2c_vc Set to "on" to enable the i2c interface
++ usually reserved for the VideoCore processor
++ (default "off")
++
++ i2c An alias for i2c_arm
++
++ i2c_arm_baudrate Set the baudrate of the ARM's i2c interface
++ (default "100000")
++
++ i2c_vc_baudrate Set the baudrate of the VideoCore i2c interface
++ (default "100000")
++
++ i2c_baudrate An alias for i2c_arm_baudrate
++
++ i2s Set to "on" to enable the i2s interface
++ (default "off")
++
++ spi Set to "on" to enable the spi interfaces
++ (default "off")
++
++ random Set to "on" to enable the hardware random
++ number generator (default "off")
++
++ uart0 Set to "off" to disable uart0 (default "on")
++
++ watchdog Set to "on" to enable the hardware watchdog
++ (default "off")
++
++ act_led_trigger Choose which activity the LED tracks.
++ Use "heartbeat" for a nice load indicator.
++ (default "mmc")
++
++ act_led_activelow Set to "on" to invert the sense of the LED
++ (default "off")
++
++ act_led_gpio Set which GPIO to use for the activity LED
++ (in case you want to connect it to an external
++ device)
++ (default "16" on a non-Plus board, "47" on a
++ Plus or Pi 2)
++
++ pwr_led_trigger
++ pwr_led_activelow
++ pwr_led_gpio
++ As for act_led_*, but using the PWR LED.
++ Not available on Model A/B boards.
++
++ N.B. It is recommended to only enable those interfaces that are needed.
++ Leaving all interfaces enabled can lead to unwanted behaviour (i2c_vc
++ interfering with Pi Camera, I2S and SPI hogging GPIO pins, etc.)
++ Note also that i2c, i2c_arm and i2c_vc are aliases for the physical
++ interfaces i2c0 and i2c1. Use of the numeric variants is still possible
++ but deprecated because the ARM/VC assignments differ between board
++ revisions. The same board-specific mapping applies to i2c_baudrate,
++ and the other i2c baudrate parameters.
++
++
++Name: ads7846
++Info: ADS7846 Touch controller
++Load: dtoverlay=ads7846,<param>=<val>
++Params: cs SPI bus Chip Select (default 1)
++ speed SPI bus speed (default 2MHz, max 3.25MHz)
++ penirq GPIO used for PENIRQ. REQUIRED
++ penirq_pull Set GPIO pull (default 0=none, 2=pullup)
++ swapxy Swap x and y axis
++ xmin Minimum value on the X axis (default 0)
++ ymin Minimum value on the Y axis (default 0)
++ xmax Maximum value on the X axis (default 4095)
++ ymax Maximum value on the Y axis (default 4095)
++ pmin Minimum reported pressure value (default 0)
++ pmax Maximum reported pressure value (default 65535)
++ xohms Touchpanel sensitivity (X-plate resistance)
++ (default 400)
++
++ penirq is required and usually xohms (60-100) has to be set as well.
++ Apart from that, pmax (255) and swapxy are also common.
++ The rest of the calibration can be done with xinput-calibrator.
++ See: github.com/notro/fbtft/wiki/FBTFT-on-Raspian
++ Device Tree binding document:
++ www.kernel.org/doc/Documentation/devicetree/bindings/input/ads7846.txt
++
++
++Name: at86rf233
++Info: Configures the Atmel AT86RF233 802.15.4 low-power WPAN transceiver,
++ connected to spi0.0
++Load: dtoverlay=at86rf233,<param>=<val>
++Params: interrupt GPIO used for INT (default 23)
++ reset GPIO used for Reset (default 24)
++ sleep GPIO used for Sleep (default 25)
++ speed SPI bus speed in Hz (default 750000)
++ trim Fine tuning of the internal capacitance
++ arrays (0=+0pF, 15=+4.5pF, default 15)
++
++
++Name: bmp085_i2c-sensor
++Info: Configures the BMP085/BMP180 digital barometric pressure and temperature
++ sensors from Bosch Sensortec
++Load: dtoverlay=bmp085_i2c-sensor
++Params: <None>
++
++
++Name: dht11
++Info: Overlay for the DHT11/DHT21/DHT22 humidity/temperature sensors
++ Also sometimes found with the part number(s) AM230x.
++Load: dtoverlay=dht11,<param>=<val>
++Params: gpiopin GPIO connected to the sensor's DATA output.
++ (default 4)
++
++
++[ The ds1307-rtc overlay has been deleted. See i2c-rtc. ]
++
++
++Name: enc28j60
++Info: Overlay for the Microchip ENC28J60 Ethernet Controller (SPI)
++Load: dtoverlay=enc28j60,<param>=<val>
++Params: int_pin GPIO used for INT (default 25)
++
++ speed SPI bus speed (default 12000000)
++
++
++Name: gpio-poweroff
++Info: Drives a GPIO high or low on reboot
++Load: gpio-poweroff,<param>=<val>
++Params: gpiopin GPIO for signalling (default 26)
++
++ active_low Set if the power control device requires a
++ high->low transition to trigger a power-down.
++ Note that this will require the support of a
++ custom dt-blob.bin to prevent a power-down
++ during the boot process, and that a reboot
++ will also cause the pin to go low.
++
++
++Name: hifiberry-amp
++Info: Configures the HifiBerry Amp and Amp+ audio cards
++Load: dtoverlay=hifiberry-amp
++Params: <None>
++
++
++Name: hifiberry-dac
++Info: Configures the HifiBerry DAC audio card
++Load: dtoverlay=hifiberry-dac
++Params: <None>
++
++
++Name: hifiberry-dacplus
++Info: Configures the HifiBerry DAC+ audio card
++Load: dtoverlay=hifiberry-dacplus
++Params: <None>
++
++
++Name: hifiberry-digi
++Info: Configures the HifiBerry Digi audio card
++Load: dtoverlay=hifiberry-digi
++Params: <None>
++
++
++Name: hy28a
++Info: HY28A - 2.8" TFT LCD Display Module by HAOYU Electronics
++ Default values match Texy's display shield
++Load: dtoverlay=hy28a,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++ xohms Touchpanel sensitivity (X-plate resistance)
++
++ resetgpio GPIO used to reset controller
++
++ ledgpio GPIO used to control backlight
++
++
++Name: hy28b
++Info: HY28B - 2.8" TFT LCD Display Module by HAOYU Electronics
++ Default values match Texy's display shield
++Load: dtoverlay=hy28b,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++ xohms Touchpanel sensitivity (X-plate resistance)
++
++ resetgpio GPIO used to reset controller
++
++ ledgpio GPIO used to control backlight
++
++
++Name: i2c-rtc
++Info: Adds support for a number of I2C Real Time Clock devices
++Load: dtoverlay=i2c-rtc,<param>
++Params: ds1307 Select the DS1307 device
++
++ ds3231 Select the DS3231 device
++
++ mcp7941x Select the MCP7941x device
++
++ pcf2127 Select the PCF2127 device
++
++ pcf8523 Select the PCF8523 device
++
++ pcf8563 Select the PCF8563 device
++
++
++Name: i2s-mmap
++Info: Enables mmap support in the bcm2708-i2s driver
++Load: dtoverlay=i2s-mmap
++Params: <None>
++
++
++Name: iqaudio-dac
++Info: Configures the IQaudio DAC audio card
++Load: dtoverlay=iqaudio-dac
++Params: <None>
++
++
++Name: iqaudio-dacplus
++Info: Configures the IQaudio DAC+ audio card
++Load: dtoverlay=iqaudio-dacplus
++Params: <None>
++
++
++Name: lirc-rpi
++Info: Configures lirc-rpi (Linux Infrared Remote Control for Raspberry Pi)
++ Consult the module documentation for more details.
++Load: dtoverlay=lirc-rpi,<param>=<val>,...
++Params: gpio_out_pin GPIO for output (default "17")
++
++ gpio_in_pin GPIO for input (default "18")
++
++ gpio_in_pull Pull up/down/off on the input pin
++ (default "down")
++
++ sense Override the IR receive auto-detection logic:
++ "0" = force active-high
++ "1" = force active-low
++ "-1" = use auto-detection
++ (default "-1")
++
++ softcarrier Turn the software carrier "on" or "off"
++ (default "on")
++
++ invert "on" = invert the output pin (default "off")
++
++ debug "on" = enable additional debug messages
++ (default "off")
++
++
++Name: mcp2515-can0
++Info: Configures the MCP2515 CAN controller on spi0.0
++Load: dtoverlay=mcp2515-can0,<param>=<val>
++Params: oscillator Clock frequency for the CAN controller (Hz)
++
++ spimaxfrequency Maximum SPI frequence (Hz)
++
++ interrupt GPIO for interrupt signal
++
++
++Name: mcp2515-can1
++Info: Configures the MCP2515 CAN controller on spi0.1
++Load: dtoverlay=mcp2515-can1,<param>=<val>
++Params: oscillator Clock frequency for the CAN controller (Hz)
++
++ spimaxfrequency Maximum SPI frequence (Hz)
++
++ interrupt GPIO for interrupt signal
++
++
++Name: mmc
++Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
++Load: dtoverlay=mmc,<param>=<val>
++Params: overclock_50 Clock (in MHz) to use when the MMC framework
++ requests 50MHz
++ force_pio Disable DMA support
++
++
++Name: mz61581
++Info: MZ61581 display by Tontec
++Load: dtoverlay=mz61581,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ txbuflen Transmit buffer length (default 32768)
++
++ debug Debug output level {0-7}
++
++ xohms Touchpanel sensitivity (X-plate resistance)
++
++
++[ The pcf2127-rtc overlay has been deleted. See i2c-rtc. ]
++
++
++[ The pcf8523-rtc overlay has been deleted. See i2c-rtc. ]
++
++
++[ The pcf8563-rtc overlay has been deleted. See i2c-rtc. ]
++
++
++Name: piscreen
++Info: PiScreen display by OzzMaker.com
++Load: dtoverlay=piscreen,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++ xohms Touchpanel sensitivity (X-plate resistance)
++
++
++Name: pitft28-resistive
++Info: Adafruit PiTFT 2.8" resistive touch screen
++Load: dtoverlay=pitft28-resistive,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++
++Name: pps-gpio
++Info: Configures the pps-gpio (pulse-per-second time signal via GPIO).
++Load: dtoverlay=pps-gpio,<param>=<val>
++Params: gpiopin Input GPIO (default "18")
++
++
++Name: pwm
++Info: Configures a single PWM channel
++ Legal pin,function combinations for each channel:
++ PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
++ PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
++ N.B.:
++ 1) Pin 18 is the only one available on all platforms, and
++ it is the one used by the I2S audio interface.
++ Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
++ 2) The onboard analogue audio output uses both PWM channels.
++ 3) So be careful mixing audio and PWM.
++ 4) Currently the clock must have been enabled and configured
++ by other means.
++Load: dtoverlay=pwm-2chan,<param>=<val>
++Load: dtoverlay=pwm,<param>=<val>
++Params: pin Output pin (default 18) - see table
++ func Pin function (default 2 = Alt5) - see above
++ clock PWM clock frequency (informational)
++
++
++Name: pwm-2chan
++Info: Configures both PWM channels
++ Legal pin,function combinations for each channel:
++ PWM0: 12,4(Alt0) 18,2(Alt5) 40,4(Alt0) 52,5(Alt1)
++ PWM1: 13,4(Alt0) 19,2(Alt5) 41,4(Alt0) 45,4(Alt0) 53,5(Alt1)
++ N.B.:
++ 1) Pin 18 is the only one available on all platforms, and
++ it is the one used by the I2S audio interface.
++ Pins 12 and 13 might be better choices on an A+, B+ or Pi2.
++ 2) The onboard analogue audio output uses both PWM channels.
++ 3) So be careful mixing audio and PWM.
++ 4) Currently the clock must have been enabled and configured
++ by other means.
++Load: dtoverlay=pwm-2chan,<param>=<val>
++Params: pin Output pin (default 18) - see table
++ pin2 Output pin for other channel (default 19)
++ func Pin function (default 2 = Alt5) - see above
++ func2 Function for pin2 (default 2 = Alt5)
++ clock PWM clock frequency (informational)
++
++
++Name: raspidac3
++Info: Configures the RaspiDAV Rev.3x audio card
++Load: dtoverlay=raspidac3
++Params: <None>
++
++
++Name: rpi-dac
++Info: Configures the RPi DAC audio card
++Load: dtoverlay=rpi-dac
++Params: <None>
++
++
++Name: rpi-display
++Info: RPi-Display - 2.8" Touch Display by Watterott
++Load: dtoverlay=rpi-display,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++ xohms Touchpanel sensitivity (X-plate resistance)
++
++
++Name: rpi-ft5406
++Info: Official Raspberry Pi display touchscreen
++Load: dtoverlay=rpi-ft5406
++Params: <None>
++
++
++Name: rpi-proto
++Info: Configures the RPi Proto audio card
++Load: dtoverlay=rpi-proto
++Params: <None>
++
++
++Name: rpi-sense
++Info: Raspberry Pi Sense HAT
++Load: dtoverlay=rpi-sense
++Params: <None>
++
++
++Name: sdhost
++Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock
++Load: dtoverlay=sdhost,<param>=<val>
++Params: overclock_50 Clock (in MHz) to use when the MMC framework
++ requests 50MHz
++
++ force_pio Disable DMA support (default off)
++
++ pio_limit Number of blocks above which to use DMA
++ (default 1)
++
++ debug Enable debug output (default off)
++
++
++Name: sdio
++Info: Selects the bcm2835-sdhost SD/MMC driver, optionally with overclock,
++ and enables SDIO via GPIOs 22-27.
++Load: dtoverlay=sdio,<param>=<val>
++Params: overclock_50 Clock (in MHz) to use when the MMC framework
++ requests 50MHz
++
++ force_pio Disable DMA support (default off)
++
++ pio_limit Number of blocks above which to use DMA
++ (default 1)
++
++ debug Enable debug output (default off)
++
++
++Name: smi
++Info: Enables the Secondary Memory Interface peripheral. Uses GPIOs 2-25!
++Load: dtoverlay=smi
++Params: <None>
++
++
++Name: smi-dev
++Info: Enables the userspace interface for the SMI driver
++Load: dtoverlay=smi-dev
++Params: <None>
++
++
++Name: smi-nand
++Info: Enables access to NAND flash via the SMI interface
++Load: dtoverlay=smi-nand
++Params: <None>
++
++
++Name: spi-bcm2708
++Info: Selects the bcm2708-spi SPI driver
++Load: dtoverlay=spi-bcm2708
++Params: <None>
++
++
++Name: spi-bcm2835
++Info: Selects the bcm2835-spi SPI driver
++Load: dtoverlay=spi-bcm2835
++Params: <None>
++
++
++Name: spi-dma
++Info: enables dma modes for spi-bcm2835
++Load: dtoverlay=spi-dma
++Params: <None>
++
++
++Name: tinylcd35
++Info: 3.5" Color TFT Display by www.tinylcd.com
++ Options: Touch, RTC, keypad
++Load: dtoverlay=tinylcd35,<param>=<val>
++Params: speed Display SPI bus speed
++
++ rotate Display rotation {0,90,180,270}
++
++ fps Delay between frame updates
++
++ debug Debug output level {0-7}
++
++ touch Enable touch panel
++
++ touchgpio Touch controller IRQ GPIO
++
++ xohms Touchpanel: Resistance of X-plate in ohms
++
++ rtc-pcf PCF8563 Real Time Clock
++
++ rtc-ds DS1307 Real Time Clock
++
++ keypad Enable keypad
++
++ Examples:
++ Display with touchpanel, PCF8563 RTC and keypad:
++ dtoverlay=tinylcd35,touch,rtc-pcf,keypad
++ Old touch display:
++ dtoverlay=tinylcd35,touch,touchgpio=3
++
++
++Name: uart1
++Info: Enable uart1 in place of uart0
++Load: dtoverlay=uart1,<param>=<val>
++Params: txd1_pin GPIO pin for TXD1 (14, 32 or 40 - default 14)
++
++ rxd1_pin GPIO pin for RXD1 (15, 33 or 41 - default 15)
++
++
++Name: vga666
++Info: Overlay for the Fen Logic VGA666 board
++ This uses GPIOs 2-21 (so no I2C), and activates the output 2-3 seconds
++ after the kernel has started.
++Load: dtoverlay=vga666
++Params: <None>
++
++
++Name: w1-gpio
++Info: Configures the w1-gpio Onewire interface module.
++ Use this overlay if you *don't* need a GPIO to drive an external pullup.
++Load: dtoverlay=w1-gpio,<param>=<val>
++Params: gpiopin GPIO for I/O (default "4")
++
++ pullup Non-zero, "on", or "y" to enable the parasitic
++ power (2-wire, power-on-data) feature
++
++
++Name: w1-gpio-pullup
++Info: Configures the w1-gpio Onewire interface module.
++ Use this overlay if you *do* need a GPIO to drive an external pullup.
++Load: dtoverlay=w1-gpio-pullup,<param>=<val>,...
++Params: gpiopin GPIO for I/O (default "4")
++
++ pullup Non-zero, "on", or "y" to enable the parasitic
++ power (2-wire, power-on-data) feature
++
++ extpullup GPIO for external pullup (default "5")
++
++
++Troubleshooting
++===============
++
++If you are experiencing problems that you think are DT-related, enable DT
++diagnostic output by adding this to /boot/config.txt:
++
++ dtdebug=on
++
++and rebooting. Then run:
++
++ sudo vcdbg log msg
++
++and look for relevant messages.
++
++Further reading
++===============
++
++This is only meant to be a quick introduction to the subject of Device Tree on
++Raspberry Pi. There is a more complete explanation here:
++
++http://www.raspberrypi.org/documentation/configuration/device-tree.md
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,34 @@
+// Definitions for RPi DAC
+/dts-v1/;
@@ -3814,9 +3791,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-dac-overlay.dts linux-rpi/a
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-display-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-display-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/rpi-display-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/rpi-display-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/rpi-display-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-display-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/rpi-display-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/rpi-display-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,82 @@
+/*
+ * Device Tree overlay for rpi-display by Watterott
@@ -3900,9 +3877,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-display-overlay.dts linux-r
+ xohms = <&rpidisplay_ts>,"ti,x-plate-ohms;0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,17 @@
+/dts-v1/;
+/plugin/;
@@ -3921,9 +3898,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-ft5406-overlay.dts linux-rp
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for Rpi-Proto
+/dts-v1/;
@@ -3964,9 +3941,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-proto-overlay.dts linux-rpi
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,47 @@
+// rpi-sense HAT
+/dts-v1/;
@@ -4015,9 +3992,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/rpi-sense-overlay.dts linux-rpi
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/sdhost-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/sdhost-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/sdhost-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/sdhost-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/sdhost-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/sdhost-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/sdhost-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/sdhost-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,56 @@
+/dts-v1/;
+/plugin/;
@@ -4075,9 +4052,178 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/sdhost-overlay.dts linux-rpi/ar
+ debug = <&sdhost>,"brcm,debug?";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/sdio-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/sdio-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/sdio-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/sdio-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,29 @@
++/* Enable SDIO from MMC interface via GPIOs 22-27. Includes sdhost overlay. */
++
++/include/ "sdhost-overlay.dts"
++
++/{
++ compatible = "brcm,bcm2708";
++
++ fragment@3 {
++ target = <&mmc>;
++ __overlay__ {
++ compatible = "brcm,bcm2835-mmc";
++ pinctrl-names = "default";
++ pinctrl-0 = <&sdio_pins>;
++ non-removable;
++ status = "okay";
++ };
++ };
++
++ fragment@4 {
++ target = <&gpio>;
++ __overlay__ {
++ sdio_pins: sdio_pins {
++ brcm,pins = <22 23 24 25 26 27>;
++ brcm,function = <7 7 7 7 7 7>; /* ALT3 = SD1 */
++ brcm,pull = <0 2 2 2 2 2>;
++ };
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/smi-dev-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/smi-dev-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/smi-dev-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/smi-dev-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,18 @@
++// Description: Overlay to enable character device interface for SMI.
++// Author: Luke Wren <luke@raspberrypi.org>
++
++/dts-v1/;
++/plugin/;
++
++/{
++ fragment@0 {
++ target = <&soc>;
++ __overlay__ {
++ smi_dev {
++ compatible = "brcm,bcm2835-smi-dev";
++ smi_handle = <&smi>;
++ status = "okay";
++ };
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/smi-nand-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/smi-nand-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/smi-nand-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/smi-nand-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,69 @@
++// Description: Overlay to enable NAND flash through
++// the secondary memory interface
++// Author: Luke Wren
++
++/dts-v1/;
++/plugin/;
++
++/{
++ compatible = "brcm,bcm2708";
++
++ fragment@0 {
++ target = <&smi>;
++ __overlay__ {
++ pinctrl-names = "default";
++ pinctrl-0 = <&smi_pins>;
++ status = "okay";
++ };
++ };
++
++ fragment@1 {
++ target = <&soc>;
++ __overlay__ {
++ #address-cells = <1>;
++ #size-cells = <1>;
++
++ nand: flash@0 {
++ compatible = "brcm,bcm2835-smi-nand";
++ smi_handle = <&smi>;
++ #address-cells = <1>;
++ #size-cells = <1>;
++ status = "okay";
++
++ partition@0 {
++ label = "stage2";
++ // 128k
++ reg = <0 0x20000>;
++ read-only;
++ };
++ partition@1 {
++ label = "firmware";
++ // 16M
++ reg = <0x20000 0x1000000>;
++ read-only;
++ };
++ partition@2 {
++ label = "root";
++ // 2G (will need to use 64 bit for >=4G)
++ reg = <0x1020000 0x80000000>;
++ };
++ };
++ };
++ };
++
++ fragment@2 {
++ target = <&gpio>;
++ __overlay__ {
++ smi_pins: smi_pins {
++ brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
++ 12 13 14 15>;
++ /* Alt 1: SMI */
++ brcm,function = <5 5 5 5 5 5 5 5 5 5 5
++ 5 5 5 5 5>;
++ /* /CS, /WE and /OE are pulled high, as they are
++ generally active low signals */
++ brcm,pull = <2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
++ };
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/smi-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/smi-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/smi-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/smi-overlay.dts 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,37 @@
++// Description: Overlay to enable the secondary memory interface peripheral
++// Author: Luke Wren
++
++/dts-v1/;
++/plugin/;
++
++/{
++ compatible = "brcm,bcm2708";
++
++ fragment@0 {
++ target = <&smi>;
++ __overlay__ {
++ pinctrl-names = "default";
++ pinctrl-0 = <&smi_pins>;
++ status = "okay";
++ };
++ };
++
++ fragment@1 {
++ target = <&gpio>;
++ __overlay__ {
++ smi_pins: smi_pins {
++ /* Don't configure the top two address bits, as
++ these are already used as ID_SD and ID_SC */
++ brcm,pins = <2 3 4 5 6 7 8 9 10 11 12 13 14 15
++ 16 17 18 19 20 21 22 23 24 25>;
++ /* Alt 0: SMI */
++ brcm,function = <5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
++ 5 5 5 5 5 5 5 5 5>;
++ /* /CS, /WE and /OE are pulled high, as they are
++ generally active low signals */
++ brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0
++ 0 0 0 0 0 0 0>;
++ };
++ };
++ };
++};
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,18 @@
+/*
+ * Device tree overlay for spi-bcm2835
@@ -4097,9 +4243,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2708-overlay.dts linux-r
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,18 @@
+/*
+ * Device tree overlay for spi-bcm2835
@@ -4119,9 +4265,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-bcm2835-overlay.dts linux-r
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-dma-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-dma-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/spi-dma-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/spi-dma-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/spi-dma-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/spi-dma-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/spi-dma-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/spi-dma-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * Device tree overlay for spi-bcm2835 to allow dma
@@ -4143,9 +4289,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/spi-dma-overlay.dts linux-rpi/a
+ };
+ };
+ };
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,216 @@
+/*
+ * tinylcd35-overlay.dts
@@ -4363,9 +4509,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/tinylcd35-overlay.dts linux-rpi
+ keypad = <&keypad>,"status";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/uart1-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/uart1-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/uart1-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/uart1-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/uart1-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/uart1-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/uart1-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/uart1-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,38 @@
+/dts-v1/;
+/plugin/;
@@ -4405,9 +4551,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/uart1-overlay.dts linux-rpi/arc
+ rxd1_pin = <&uart1_pins>,"brcm,pins:4";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/vga666-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/vga666-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/vga666-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/vga666-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/vga666-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/vga666-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/vga666-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/vga666-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,30 @@
+/dts-v1/;
+/plugin/;
@@ -4439,9 +4585,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/vga666-overlay.dts linux-rpi/ar
+ };
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,39 @@
+// Definitions for w1-gpio module (without external pullup)
+/dts-v1/;
@@ -4482,9 +4628,9 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-overlay.dts linux-rpi/a
+ pullup = <&w1>,"rpi,parasitic-power:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
---- linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts 2015-08-26 10:26:04.725259982 +0200
+diff -Nur linux-4.1.10/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts
+--- linux-4.1.10/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts 2015-10-07 16:40:31.000000000 +0200
@@ -0,0 +1,41 @@
+// Definitions for w1-gpio module (with external pullup)
+/dts-v1/;
@@ -4527,10 +4673,10 @@ diff -Nur linux-4.1.6/arch/arm/boot/dts/overlays/w1-gpio-pullup-overlay.dts linu
+ pullup = <&w1>,"rpi,parasitic-power:0";
+ };
+};
-diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/configs/bcm2709_defconfig
---- linux-4.1.6/arch/arm/configs/bcm2709_defconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/configs/bcm2709_defconfig 2015-08-26 10:26:04.745260265 +0200
-@@ -0,0 +1,1233 @@
+diff -Nur linux-4.1.10/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/configs/bcm2709_defconfig
+--- linux-4.1.10/arch/arm/configs/bcm2709_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/configs/bcm2709_defconfig 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,1254 @@
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
+CONFIG_PHYS_OFFSET=0
+CONFIG_LOCALVERSION="-v7"
@@ -4816,6 +4962,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_ATALK=m
+CONFIG_6LOWPAN=m
++CONFIG_IEEE802154=m
++CONFIG_IEEE802154_6LOWPAN=m
++CONFIG_MAC802154=m
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
@@ -4925,6 +5074,10 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=5
++CONFIG_MTD=m
++CONFIG_MTD_BLOCK=m
++CONFIG_MTD_NAND=m
++CONFIG_MTD_UBI=m
+CONFIG_ZRAM=m
+CONFIG_ZRAM_LZ4_COMPRESS=y
+CONFIG_BLK_DEV_LOOP=y
@@ -5058,6 +5211,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_WIMAX_I2400M_USB=m
++CONFIG_IEEE802154_AT86RF230=m
++CONFIG_IEEE802154_MRF24J40=m
++CONFIG_IEEE802154_CC2520=m
+CONFIG_INPUT_POLLDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_JOYDEV=m
@@ -5365,10 +5521,13 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_SND_BCM2708_SOC_RPI_DAC=m
+CONFIG_SND_BCM2708_SOC_RPI_PROTO=m
+CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m
++CONFIG_SND_BCM2708_SOC_RASPIDAC3=m
++CONFIG_SND_SOC_ADAU1701=m
+CONFIG_SND_SOC_WM8804_I2C=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SOUND_PRIME=m
+CONFIG_HIDRAW=y
++CONFIG_UHID=m
+CONFIG_HID_A4TECH=m
+CONFIG_HID_ACRUX=m
+CONFIG_HID_APPLE=m
@@ -5673,6 +5832,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_ECRYPT_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
++CONFIG_JFFS2_FS=m
++CONFIG_JFFS2_SUMMARY=y
++CONFIG_UBIFS_FS=m
+CONFIG_SQUASHFS=m
+CONFIG_SQUASHFS_XATTR=y
+CONFIG_SQUASHFS_LZO=y
@@ -5691,6 +5853,10 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
++CONFIG_CIFS_ACL=y
++CONFIG_CIFS_DFS_UPCALL=y
++CONFIG_CIFS_SMB2=y
++CONFIG_CIFS_FSCACHE=y
+CONFIG_9P_FS=m
+CONFIG_9P_FS_POSIX_ACL=y
+CONFIG_NLS_DEFAULT="utf8"
@@ -5757,6 +5923,7 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_USER_API_SKCIPHER=m
+# CONFIG_CRYPTO_HW is not set
+CONFIG_ARM_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM_NEON=m
@@ -5764,9 +5931,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2709_defconfig linux-rpi/arch/arm/conf
+CONFIG_CRYPTO_AES_ARM_BS=m
+CONFIG_CRC_ITU_T=y
+CONFIG_LIBCRC32C=y
-diff -Nur linux-4.1.6/arch/arm/configs/bcm2835_defconfig linux-rpi/arch/arm/configs/bcm2835_defconfig
---- linux-4.1.6/arch/arm/configs/bcm2835_defconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/configs/bcm2835_defconfig 2015-08-26 10:26:04.745260265 +0200
+diff -Nur linux-4.1.10/arch/arm/configs/bcm2835_defconfig linux-rpi/arch/arm/configs/bcm2835_defconfig
+--- linux-4.1.10/arch/arm/configs/bcm2835_defconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/configs/bcm2835_defconfig 2015-10-07 16:40:31.000000000 +0200
@@ -1,105 +1,1075 @@
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_SYSVIPC=y
@@ -7019,10 +7186,10 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcm2835_defconfig linux-rpi/arch/arm/conf
+CONFIG_LIBCRC32C=y
# CONFIG_XZ_DEC_ARM is not set
# CONFIG_XZ_DEC_ARMTHUMB is not set
-diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/configs/bcmrpi_defconfig
---- linux-4.1.6/arch/arm/configs/bcmrpi_defconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/configs/bcmrpi_defconfig 2015-08-26 10:26:04.745260265 +0200
-@@ -0,0 +1,1228 @@
+diff -Nur linux-4.1.10/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/configs/bcmrpi_defconfig
+--- linux-4.1.10/arch/arm/configs/bcmrpi_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/configs/bcmrpi_defconfig 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,1249 @@
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
+CONFIG_PHYS_OFFSET=0
+# CONFIG_LOCALVERSION_AUTO is not set
@@ -7301,6 +7468,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_ATALK=m
+CONFIG_6LOWPAN=m
++CONFIG_IEEE802154=m
++CONFIG_IEEE802154_6LOWPAN=m
++CONFIG_MAC802154=m
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
@@ -7410,6 +7580,10 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_DEVTMPFS_MOUNT=y
+CONFIG_DMA_CMA=y
+CONFIG_CMA_SIZE_MBYTES=5
++CONFIG_MTD=m
++CONFIG_MTD_BLOCK=m
++CONFIG_MTD_NAND=m
++CONFIG_MTD_UBI=m
+CONFIG_ZRAM=m
+CONFIG_ZRAM_LZ4_COMPRESS=y
+CONFIG_BLK_DEV_LOOP=y
@@ -7543,6 +7717,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_WIMAX_I2400M_USB=m
++CONFIG_IEEE802154_AT86RF230=m
++CONFIG_IEEE802154_MRF24J40=m
++CONFIG_IEEE802154_CC2520=m
+CONFIG_INPUT_POLLDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_JOYDEV=m
@@ -7850,10 +8027,13 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_SND_BCM2708_SOC_RPI_DAC=m
+CONFIG_SND_BCM2708_SOC_RPI_PROTO=m
+CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m
++CONFIG_SND_BCM2708_SOC_RASPIDAC3=m
++CONFIG_SND_SOC_ADAU1701=m
+CONFIG_SND_SOC_WM8804_I2C=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SOUND_PRIME=m
+CONFIG_HIDRAW=y
++CONFIG_UHID=m
+CONFIG_HID_A4TECH=m
+CONFIG_HID_ACRUX=m
+CONFIG_HID_APPLE=m
@@ -8158,6 +8338,9 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_ECRYPT_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
++CONFIG_JFFS2_FS=m
++CONFIG_JFFS2_SUMMARY=y
++CONFIG_UBIFS_FS=m
+CONFIG_SQUASHFS=m
+CONFIG_SQUASHFS_XATTR=y
+CONFIG_SQUASHFS_LZO=y
@@ -8176,6 +8359,10 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
++CONFIG_CIFS_ACL=y
++CONFIG_CIFS_DFS_UPCALL=y
++CONFIG_CIFS_SMB2=y
++CONFIG_CIFS_FSCACHE=y
+CONFIG_9P_FS=m
+CONFIG_9P_FS_POSIX_ACL=y
+CONFIG_NLS_DEFAULT="utf8"
@@ -8245,15 +8432,16 @@ diff -Nur linux-4.1.6/arch/arm/configs/bcmrpi_defconfig linux-rpi/arch/arm/confi
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_USER_API_SKCIPHER=m
+# CONFIG_CRYPTO_HW is not set
+CONFIG_ARM_CRYPTO=y
+CONFIG_CRYPTO_SHA1_ARM=m
+CONFIG_CRYPTO_AES_ARM=m
+CONFIG_CRC_ITU_T=y
+CONFIG_LIBCRC32C=y
-diff -Nur linux-4.1.6/arch/arm/include/asm/entry-macro-multi.S linux-rpi/arch/arm/include/asm/entry-macro-multi.S
---- linux-4.1.6/arch/arm/include/asm/entry-macro-multi.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/include/asm/entry-macro-multi.S 2015-08-26 10:26:04.757260435 +0200
+diff -Nur linux-4.1.10/arch/arm/include/asm/entry-macro-multi.S linux-rpi/arch/arm/include/asm/entry-macro-multi.S
+--- linux-4.1.10/arch/arm/include/asm/entry-macro-multi.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/include/asm/entry-macro-multi.S 2015-10-07 16:40:31.000000000 +0200
@@ -1,5 +1,6 @@
#include <asm/assembler.h>
@@ -8269,9 +8457,9 @@ diff -Nur linux-4.1.6/arch/arm/include/asm/entry-macro-multi.S linux-rpi/arch/ar
.macro arch_irq_handler, symbol_name
.align 5
-diff -Nur linux-4.1.6/arch/arm/include/asm/irqflags.h linux-rpi/arch/arm/include/asm/irqflags.h
---- linux-4.1.6/arch/arm/include/asm/irqflags.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/include/asm/irqflags.h 2015-08-26 10:26:04.761260491 +0200
+diff -Nur linux-4.1.10/arch/arm/include/asm/irqflags.h linux-rpi/arch/arm/include/asm/irqflags.h
+--- linux-4.1.10/arch/arm/include/asm/irqflags.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/include/asm/irqflags.h 2015-10-07 16:40:31.000000000 +0200
@@ -145,12 +145,22 @@
}
@@ -8298,9 +8486,9 @@ diff -Nur linux-4.1.6/arch/arm/include/asm/irqflags.h linux-rpi/arch/arm/include
:
: "r" (flags)
: "memory", "cc");
-diff -Nur linux-4.1.6/arch/arm/include/asm/string.h linux-rpi/arch/arm/include/asm/string.h
---- linux-4.1.6/arch/arm/include/asm/string.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/include/asm/string.h 2015-08-26 10:26:04.765260547 +0200
+diff -Nur linux-4.1.10/arch/arm/include/asm/string.h linux-rpi/arch/arm/include/asm/string.h
+--- linux-4.1.10/arch/arm/include/asm/string.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/include/asm/string.h 2015-10-07 16:40:31.000000000 +0200
@@ -24,6 +24,11 @@
#define __HAVE_ARCH_MEMSET
extern void * memset(void *, int, __kernel_size_t);
@@ -8313,9 +8501,9 @@ diff -Nur linux-4.1.6/arch/arm/include/asm/string.h linux-rpi/arch/arm/include/a
extern void __memzero(void *ptr, __kernel_size_t n);
#define memset(p,v,n) \
-diff -Nur linux-4.1.6/arch/arm/include/asm/uaccess.h linux-rpi/arch/arm/include/asm/uaccess.h
---- linux-4.1.6/arch/arm/include/asm/uaccess.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/include/asm/uaccess.h 2015-08-26 10:26:04.765260547 +0200
+diff -Nur linux-4.1.10/arch/arm/include/asm/uaccess.h linux-rpi/arch/arm/include/asm/uaccess.h
+--- linux-4.1.10/arch/arm/include/asm/uaccess.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/include/asm/uaccess.h 2015-10-07 16:40:31.000000000 +0200
@@ -475,6 +475,7 @@
#ifdef CONFIG_MMU
@@ -8324,9 +8512,83 @@ diff -Nur linux-4.1.6/arch/arm/include/asm/uaccess.h linux-rpi/arch/arm/include/
extern unsigned long __must_check __copy_to_user(void __user *to, const void *from, unsigned long n);
extern unsigned long __must_check __copy_to_user_std(void __user *to, const void *from, unsigned long n);
extern unsigned long __must_check __clear_user(void __user *addr, unsigned long n);
-diff -Nur linux-4.1.6/arch/arm/kernel/fiqasm.S linux-rpi/arch/arm/kernel/fiqasm.S
---- linux-4.1.6/arch/arm/kernel/fiqasm.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/kernel/fiqasm.S 2015-08-26 10:26:04.769260604 +0200
+diff -Nur linux-4.1.10/arch/arm/Kconfig linux-rpi/arch/arm/Kconfig
+--- linux-4.1.10/arch/arm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/Kconfig 2015-10-07 16:40:31.000000000 +0200
+@@ -314,6 +314,42 @@
+ default ARCH_VERSATILE if !MMU
+ default ARCH_MULTIPLATFORM if MMU
+
++config ARCH_BCM2708
++ bool "Broadcom BCM2708 family"
++ select CPU_V6
++ select ARM_AMBA
++ select HAVE_SCHED_CLOCK
++ select NEED_MACH_GPIO_H
++ select NEED_MACH_MEMORY_H
++ select COMMON_CLK
++ select ARCH_HAS_CPUFREQ
++ select GENERIC_CLOCKEVENTS
++ select ARM_ERRATA_411920
++ select MACH_BCM2708
++ select VC4
++ select FIQ
++ help
++ This enables support for Broadcom BCM2708 boards.
++
++config ARCH_BCM2709
++ bool "Broadcom BCM2709 family"
++ select ARCH_HAS_BARRIERS if SMP
++ select CPU_V7
++ select HAVE_SMP
++ select ARM_AMBA
++ select MIGHT_HAVE_CACHE_L2X0
++ select HAVE_SCHED_CLOCK
++ select NEED_MACH_MEMORY_H
++ select NEED_MACH_IO_H
++ select COMMON_CLK
++ select ARCH_HAS_CPUFREQ
++ select GENERIC_CLOCKEVENTS
++ select MACH_BCM2709
++ select VC4
++ select FIQ
++ help
++ This enables support for Broadcom BCM2709 boards.
++
+ config ARCH_MULTIPLATFORM
+ bool "Allow multiple platforms to be selected"
+ depends on MMU
+@@ -824,6 +860,9 @@
+ # Kconfigs may be included either alphabetically (according to the
+ # plat- suffix) or along side the corresponding mach-* source.
+ #
++source "arch/arm/mach-bcm2708/Kconfig"
++source "arch/arm/mach-bcm2709/Kconfig"
++
+ source "arch/arm/mach-mvebu/Kconfig"
+
+ source "arch/arm/mach-alpine/Kconfig"
+diff -Nur linux-4.1.10/arch/arm/Kconfig.debug linux-rpi/arch/arm/Kconfig.debug
+--- linux-4.1.10/arch/arm/Kconfig.debug 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/Kconfig.debug 2015-10-07 16:40:31.000000000 +0200
+@@ -1197,6 +1197,14 @@
+ options; the platform specific options are deprecated
+ and will be soon removed.
+
++ config DEBUG_BCM2708_UART0
++ bool "Broadcom BCM2708 UART0 (PL011)"
++ depends on MACH_BCM2708
++ help
++ Say Y here if you want the debug print routines to direct
++ their output to UART 0. The port must have been initialised
++ by the boot-loader before use.
++
+ endchoice
+
+ config DEBUG_AT91_UART
+diff -Nur linux-4.1.10/arch/arm/kernel/fiqasm.S linux-rpi/arch/arm/kernel/fiqasm.S
+--- linux-4.1.10/arch/arm/kernel/fiqasm.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/kernel/fiqasm.S 2015-10-07 16:40:31.000000000 +0200
@@ -47,3 +47,7 @@
mov r0, r0 @ avoid hazard prior to ARMv4
ret lr
@@ -8335,9 +8597,9 @@ diff -Nur linux-4.1.6/arch/arm/kernel/fiqasm.S linux-rpi/arch/arm/kernel/fiqasm.
+ENTRY(__FIQ_Branch)
+ mov pc, r8
+ENDPROC(__FIQ_Branch)
-diff -Nur linux-4.1.6/arch/arm/kernel/head.S linux-rpi/arch/arm/kernel/head.S
---- linux-4.1.6/arch/arm/kernel/head.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/kernel/head.S 2015-08-26 10:26:04.769260604 +0200
+diff -Nur linux-4.1.10/arch/arm/kernel/head.S linux-rpi/arch/arm/kernel/head.S
+--- linux-4.1.10/arch/arm/kernel/head.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/kernel/head.S 2015-10-07 16:40:31.000000000 +0200
@@ -680,6 +680,14 @@
ldrcc r7, [r4], #4 @ use branch for delay slot
bcc 1b
@@ -8353,9 +8615,9 @@ diff -Nur linux-4.1.6/arch/arm/kernel/head.S linux-rpi/arch/arm/kernel/head.S
#endif
ENDPROC(__fixup_a_pv_table)
-diff -Nur linux-4.1.6/arch/arm/kernel/process.c linux-rpi/arch/arm/kernel/process.c
---- linux-4.1.6/arch/arm/kernel/process.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/kernel/process.c 2015-08-26 10:26:04.773260660 +0200
+diff -Nur linux-4.1.10/arch/arm/kernel/process.c linux-rpi/arch/arm/kernel/process.c
+--- linux-4.1.10/arch/arm/kernel/process.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/kernel/process.c 2015-10-07 16:40:31.000000000 +0200
@@ -98,6 +98,16 @@
}
#endif
@@ -8373,41 +8635,9 @@ diff -Nur linux-4.1.6/arch/arm/kernel/process.c linux-rpi/arch/arm/kernel/proces
void __show_regs(struct pt_regs *regs)
{
unsigned long flags;
-diff -Nur linux-4.1.6/arch/arm/lib/Makefile linux-rpi/arch/arm/lib/Makefile
---- linux-4.1.6/arch/arm/lib/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/lib/Makefile 2015-08-26 10:26:04.777260716 +0200
-@@ -6,9 +6,8 @@
-
- lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
- csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
-- delay.o delay-loop.o findbit.o memchr.o memcpy.o \
-- memmove.o memset.o memzero.o setbit.o \
-- strchr.o strrchr.o \
-+ delay.o delay-loop.o findbit.o memchr.o memzero.o \
-+ setbit.o strchr.o strrchr.o \
- testchangebit.o testclearbit.o testsetbit.o \
- ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
- ucmpdi2.o lib1funcs.o div64.o \
-@@ -18,6 +17,16 @@
- mmu-y := clear_user.o copy_page.o getuser.o putuser.o \
- copy_from_user.o copy_to_user.o
-
-+# Choose optimised implementations for Raspberry Pi
-+ifeq ($(CONFIG_MACH_BCM2708),y)
-+ CFLAGS_uaccess_with_memcpy.o += -DCOPY_FROM_USER_THRESHOLD=1600
-+ CFLAGS_uaccess_with_memcpy.o += -DCOPY_TO_USER_THRESHOLD=672
-+ obj-$(CONFIG_MODULES) += exports_rpi.o
-+ lib-y += memcpy_rpi.o memmove_rpi.o memset_rpi.o memcmp_rpi.o
-+else
-+ lib-y += memcpy.o memmove.o memset.o
-+endif
-+
- # using lib_ here won't override already available weak symbols
- obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o
-
-diff -Nur linux-4.1.6/arch/arm/lib/arm-mem.h linux-rpi/arch/arm/lib/arm-mem.h
---- linux-4.1.6/arch/arm/lib/arm-mem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/arm-mem.h 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/arm-mem.h linux-rpi/arch/arm/lib/arm-mem.h
+--- linux-4.1.10/arch/arm/lib/arm-mem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/arm-mem.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,159 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -8568,9 +8798,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/arm-mem.h linux-rpi/arch/arm/lib/arm-mem.h
+ .endif
+92:
+.endm
-diff -Nur linux-4.1.6/arch/arm/lib/copy_from_user.S linux-rpi/arch/arm/lib/copy_from_user.S
---- linux-4.1.6/arch/arm/lib/copy_from_user.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/lib/copy_from_user.S 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/copy_from_user.S linux-rpi/arch/arm/lib/copy_from_user.S
+--- linux-4.1.10/arch/arm/lib/copy_from_user.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/lib/copy_from_user.S 2015-10-07 16:40:32.000000000 +0200
@@ -89,11 +89,13 @@
.text
@@ -8586,9 +8816,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/copy_from_user.S linux-rpi/arch/arm/lib/copy_
.pushsection .fixup,"ax"
.align 0
-diff -Nur linux-4.1.6/arch/arm/lib/exports_rpi.c linux-rpi/arch/arm/lib/exports_rpi.c
---- linux-4.1.6/arch/arm/lib/exports_rpi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/exports_rpi.c 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/exports_rpi.c linux-rpi/arch/arm/lib/exports_rpi.c
+--- linux-4.1.10/arch/arm/lib/exports_rpi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/exports_rpi.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2014, Raspberry Pi (Trading) Ltd.
@@ -8627,9 +8857,41 @@ diff -Nur linux-4.1.6/arch/arm/lib/exports_rpi.c linux-rpi/arch/arm/lib/exports_
+#include <linux/module.h>
+
+EXPORT_SYMBOL(memcmp);
-diff -Nur linux-4.1.6/arch/arm/lib/memcmp_rpi.S linux-rpi/arch/arm/lib/memcmp_rpi.S
---- linux-4.1.6/arch/arm/lib/memcmp_rpi.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/memcmp_rpi.S 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/Makefile linux-rpi/arch/arm/lib/Makefile
+--- linux-4.1.10/arch/arm/lib/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/lib/Makefile 2015-10-07 16:40:32.000000000 +0200
+@@ -6,9 +6,8 @@
+
+ lib-y := backtrace.o changebit.o csumipv6.o csumpartial.o \
+ csumpartialcopy.o csumpartialcopyuser.o clearbit.o \
+- delay.o delay-loop.o findbit.o memchr.o memcpy.o \
+- memmove.o memset.o memzero.o setbit.o \
+- strchr.o strrchr.o \
++ delay.o delay-loop.o findbit.o memchr.o memzero.o \
++ setbit.o strchr.o strrchr.o \
+ testchangebit.o testclearbit.o testsetbit.o \
+ ashldi3.o ashrdi3.o lshrdi3.o muldi3.o \
+ ucmpdi2.o lib1funcs.o div64.o \
+@@ -18,6 +17,16 @@
+ mmu-y := clear_user.o copy_page.o getuser.o putuser.o \
+ copy_from_user.o copy_to_user.o
+
++# Choose optimised implementations for Raspberry Pi
++ifeq ($(CONFIG_MACH_BCM2708),y)
++ CFLAGS_uaccess_with_memcpy.o += -DCOPY_FROM_USER_THRESHOLD=1600
++ CFLAGS_uaccess_with_memcpy.o += -DCOPY_TO_USER_THRESHOLD=672
++ obj-$(CONFIG_MODULES) += exports_rpi.o
++ lib-y += memcpy_rpi.o memmove_rpi.o memset_rpi.o memcmp_rpi.o
++else
++ lib-y += memcpy.o memmove.o memset.o
++endif
++
+ # using lib_ here won't override already available weak symbols
+ obj-$(CONFIG_UACCESS_WITH_MEMCPY) += uaccess_with_memcpy.o
+
+diff -Nur linux-4.1.10/arch/arm/lib/memcmp_rpi.S linux-rpi/arch/arm/lib/memcmp_rpi.S
+--- linux-4.1.10/arch/arm/lib/memcmp_rpi.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/memcmp_rpi.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,285 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -8916,72 +9178,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/memcmp_rpi.S linux-rpi/arch/arm/lib/memcmp_rp
+ .unreq DAT7
+ .unreq OFF
+ENDPROC(memcmp)
-diff -Nur linux-4.1.6/arch/arm/lib/memcpy_rpi.S linux-rpi/arch/arm/lib/memcpy_rpi.S
---- linux-4.1.6/arch/arm/lib/memcpy_rpi.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/memcpy_rpi.S 2015-08-26 10:26:04.777260716 +0200
-@@ -0,0 +1,59 @@
-+/*
-+Copyright (c) 2013, Raspberry Pi Foundation
-+Copyright (c) 2013, RISC OS Open Ltd
-+All rights reserved.
-+
-+Redistribution and use in source and binary forms, with or without
-+modification, are permitted provided that the following conditions are met:
-+ * Redistributions of source code must retain the above copyright
-+ notice, this list of conditions and the following disclaimer.
-+ * Redistributions in binary form must reproduce the above copyright
-+ notice, this list of conditions and the following disclaimer in the
-+ documentation and/or other materials provided with the distribution.
-+ * Neither the name of the copyright holder nor the
-+ names of its contributors may be used to endorse or promote products
-+ derived from this software without specific prior written permission.
-+
-+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
-+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+*/
-+
-+#include <linux/linkage.h>
-+#include "arm-mem.h"
-+#include "memcpymove.h"
-+
-+/* Prevent the stack from becoming executable */
-+#if defined(__linux__) && defined(__ELF__)
-+.section .note.GNU-stack,"",%progbits
-+#endif
-+
-+ .text
-+ .arch armv6
-+ .object_arch armv4
-+ .arm
-+ .altmacro
-+ .p2align 2
-+
-+/*
-+ * void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
-+ * On entry:
-+ * a1 = pointer to destination
-+ * a2 = pointer to source
-+ * a3 = number of bytes to copy
-+ * On exit:
-+ * a1 preserved
-+ */
-+
-+.set prefetch_distance, 3
-+
-+ENTRY(memcpy)
-+ memcpy 0
-+ENDPROC(memcpy)
-diff -Nur linux-4.1.6/arch/arm/lib/memcpymove.h linux-rpi/arch/arm/lib/memcpymove.h
---- linux-4.1.6/arch/arm/lib/memcpymove.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/memcpymove.h 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/memcpymove.h linux-rpi/arch/arm/lib/memcpymove.h
+--- linux-4.1.10/arch/arm/lib/memcpymove.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/memcpymove.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,506 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -9489,9 +9688,72 @@ diff -Nur linux-4.1.6/arch/arm/lib/memcpymove.h linux-rpi/arch/arm/lib/memcpymov
+ .unreq LAST
+ .unreq OFF
+.endm
-diff -Nur linux-4.1.6/arch/arm/lib/memmove_rpi.S linux-rpi/arch/arm/lib/memmove_rpi.S
---- linux-4.1.6/arch/arm/lib/memmove_rpi.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/memmove_rpi.S 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/memcpy_rpi.S linux-rpi/arch/arm/lib/memcpy_rpi.S
+--- linux-4.1.10/arch/arm/lib/memcpy_rpi.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/memcpy_rpi.S 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++Copyright (c) 2013, Raspberry Pi Foundation
++Copyright (c) 2013, RISC OS Open Ltd
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++ * Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++ * Neither the name of the copyright holder nor the
++ names of its contributors may be used to endorse or promote products
++ derived from this software without specific prior written permission.
++
++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
++ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
++WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
++DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
++ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#include <linux/linkage.h>
++#include "arm-mem.h"
++#include "memcpymove.h"
++
++/* Prevent the stack from becoming executable */
++#if defined(__linux__) && defined(__ELF__)
++.section .note.GNU-stack,"",%progbits
++#endif
++
++ .text
++ .arch armv6
++ .object_arch armv4
++ .arm
++ .altmacro
++ .p2align 2
++
++/*
++ * void *memcpy(void * restrict s1, const void * restrict s2, size_t n);
++ * On entry:
++ * a1 = pointer to destination
++ * a2 = pointer to source
++ * a3 = number of bytes to copy
++ * On exit:
++ * a1 preserved
++ */
++
++.set prefetch_distance, 3
++
++ENTRY(memcpy)
++ memcpy 0
++ENDPROC(memcpy)
+diff -Nur linux-4.1.10/arch/arm/lib/memmove_rpi.S linux-rpi/arch/arm/lib/memmove_rpi.S
+--- linux-4.1.10/arch/arm/lib/memmove_rpi.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/memmove_rpi.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,61 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -9554,9 +9816,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/memmove_rpi.S linux-rpi/arch/arm/lib/memmove_
+ bpl memcpy /* pl works even over -1 - 0 and 0x7fffffff - 0x80000000 boundaries */
+ memcpy 1
+ENDPROC(memmove)
-diff -Nur linux-4.1.6/arch/arm/lib/memset_rpi.S linux-rpi/arch/arm/lib/memset_rpi.S
---- linux-4.1.6/arch/arm/lib/memset_rpi.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/lib/memset_rpi.S 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/memset_rpi.S linux-rpi/arch/arm/lib/memset_rpi.S
+--- linux-4.1.10/arch/arm/lib/memset_rpi.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/lib/memset_rpi.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,121 @@
+/*
+Copyright (c) 2013, Raspberry Pi Foundation
@@ -9679,9 +9941,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/memset_rpi.S linux-rpi/arch/arm/lib/memset_rp
+ .unreq DAT2
+ .unreq DAT3
+ENDPROC(memset)
-diff -Nur linux-4.1.6/arch/arm/lib/uaccess_with_memcpy.c linux-rpi/arch/arm/lib/uaccess_with_memcpy.c
---- linux-4.1.6/arch/arm/lib/uaccess_with_memcpy.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/lib/uaccess_with_memcpy.c 2015-08-26 10:26:04.777260716 +0200
+diff -Nur linux-4.1.10/arch/arm/lib/uaccess_with_memcpy.c linux-rpi/arch/arm/lib/uaccess_with_memcpy.c
+--- linux-4.1.10/arch/arm/lib/uaccess_with_memcpy.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/lib/uaccess_with_memcpy.c 2015-10-07 16:40:32.000000000 +0200
@@ -22,6 +22,14 @@
#include <asm/current.h>
#include <asm/page.h>
@@ -9825,20 +10087,9 @@ diff -Nur linux-4.1.6/arch/arm/lib/uaccess_with_memcpy.c linux-rpi/arch/arm/lib/
static unsigned long noinline
__clear_user_memset(void __user *addr, unsigned long n)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm/Kconfig linux-rpi/arch/arm/mach-bcm/Kconfig
---- linux-4.1.6/arch/arm/mach-bcm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/mach-bcm/Kconfig 2015-08-26 10:26:04.781260773 +0200
-@@ -114,6 +114,7 @@
- select ARM_ERRATA_411920
- select ARM_TIMER_SP804
- select CLKSRC_OF
-+ select FIQ
- select PINCTRL
- select PINCTRL_BCM2835
- help
-diff -Nur linux-4.1.6/arch/arm/mach-bcm/board_bcm2835.c linux-rpi/arch/arm/mach-bcm/board_bcm2835.c
---- linux-4.1.6/arch/arm/mach-bcm/board_bcm2835.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/mach-bcm/board_bcm2835.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm/board_bcm2835.c linux-rpi/arch/arm/mach-bcm/board_bcm2835.c
+--- linux-4.1.10/arch/arm/mach-bcm/board_bcm2835.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/mach-bcm/board_bcm2835.c 2015-10-07 16:40:32.000000000 +0200
@@ -18,6 +18,7 @@
#include <linux/of_address.h>
#include <linux/of_platform.h>
@@ -9869,75 +10120,20 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm/board_bcm2835.c linux-rpi/arch/arm/mach-
}
static const char * const bcm2835_compat[] = {
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/Kconfig linux-rpi/arch/arm/mach-bcm2708/Kconfig
---- linux-4.1.6/arch/arm/mach-bcm2708/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/Kconfig 2015-08-26 10:26:04.781260773 +0200
-@@ -0,0 +1,45 @@
-+menu "Broadcom BCM2708 Implementations"
-+ depends on ARCH_BCM2708
-+
-+config MACH_BCM2708
-+ bool "Broadcom BCM2708 Development Platform"
-+ select NEED_MACH_MEMORY_H
-+ select NEED_MACH_IO_H
-+ select CPU_V6
-+ help
-+ Include support for the Broadcom(R) BCM2708 platform.
-+
-+config BCM2708_DT
-+ bool "BCM2708 Device Tree support"
-+ depends on MACH_BCM2708
-+ default n
-+ select USE_OF
-+ select ARCH_REQUIRE_GPIOLIB
-+ select PINCTRL
-+ select PINCTRL_BCM2835
-+ help
-+ Enable Device Tree support for BCM2708
-+
-+config BCM2708_GPIO
-+ bool "BCM2708 gpio support"
-+ depends on MACH_BCM2708
-+ select ARCH_REQUIRE_GPIOLIB
-+ default y
-+ help
-+ Include support for the Broadcom(R) BCM2708 gpio.
-+
-+config BCM2708_NOL2CACHE
-+ bool "Videocore L2 cache disable"
-+ depends on MACH_BCM2708
-+ default n
-+ help
-+ Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt.
-+
-+config BCM2708_SPIDEV
-+ bool "Bind spidev to SPI0 master"
-+ depends on MACH_BCM2708
-+ depends on SPI
-+ default y
-+ help
-+ Binds spidev driver to the SPI0 master
-+endmenu
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/Makefile linux-rpi/arch/arm/mach-bcm2708/Makefile
---- linux-4.1.6/arch/arm/mach-bcm2708/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/Makefile 2015-08-26 10:26:04.781260773 +0200
-@@ -0,0 +1,6 @@
-+#
-+# Makefile for the linux kernel.
-+#
-+
-+obj-$(CONFIG_MACH_BCM2708) += bcm2708.o armctrl.o
-+obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/Makefile.boot linux-rpi/arch/arm/mach-bcm2708/Makefile.boot
---- linux-4.1.6/arch/arm/mach-bcm2708/Makefile.boot 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/Makefile.boot 2015-08-26 10:26:04.781260773 +0200
-@@ -0,0 +1,3 @@
-+ zreladdr-y := 0x00008000
-+params_phys-y := 0x00000100
-+initrd_phys-y := 0x00800000
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/armctrl.c linux-rpi/arch/arm/mach-bcm2708/armctrl.c
---- linux-4.1.6/arch/arm/mach-bcm2708/armctrl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/armctrl.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm/Kconfig linux-rpi/arch/arm/mach-bcm/Kconfig
+--- linux-4.1.10/arch/arm/mach-bcm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/mach-bcm/Kconfig 2015-10-07 16:40:32.000000000 +0200
+@@ -114,6 +114,7 @@
+ select ARM_ERRATA_411920
+ select ARM_TIMER_SP804
+ select CLKSRC_OF
++ select FIQ
+ select PINCTRL
+ select PINCTRL_BCM2835
+ help
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/armctrl.c linux-rpi/arch/arm/mach-bcm2708/armctrl.c
+--- linux-4.1.10/arch/arm/mach-bcm2708/armctrl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/armctrl.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,315 @@
+/*
+ * linux/arch/arm/mach-bcm2708/armctrl.c
@@ -10254,9 +10450,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/armctrl.c linux-rpi/arch/arm/mach-bc
+ armctrl_dt_init();
+ return 0;
+}
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/armctrl.h linux-rpi/arch/arm/mach-bcm2708/armctrl.h
---- linux-4.1.6/arch/arm/mach-bcm2708/armctrl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/armctrl.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/armctrl.h linux-rpi/arch/arm/mach-bcm2708/armctrl.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/armctrl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/armctrl.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,27 @@
+/*
+ * linux/arch/arm/mach-bcm2708/armctrl.h
@@ -10285,9 +10481,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/armctrl.h linux-rpi/arch/arm/mach-bc
+ u32 armctrl_sources, u32 resume_sources);
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/bcm2708.c linux-rpi/arch/arm/mach-bcm2708/bcm2708.c
---- linux-4.1.6/arch/arm/mach-bcm2708/bcm2708.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/bcm2708.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/bcm2708.c linux-rpi/arch/arm/mach-bcm2708/bcm2708.c
+--- linux-4.1.10/arch/arm/mach-bcm2708/bcm2708.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/bcm2708.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,1162 @@
+/*
+ * linux/arch/arm/mach-bcm2708/bcm2708.c
@@ -11451,62 +11647,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/bcm2708.c linux-rpi/arch/arm/mach-bc
+MODULE_PARM_DESC(vc_i2c_override, "Allow the use of VC's I2C peripheral.");
+module_param(pps_gpio_pin, int, 0644);
+MODULE_PARM_DESC(pps_gpio_pin, "Set GPIO pin to reserve for PPS");
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/bcm2708.h linux-rpi/arch/arm/mach-bcm2708/bcm2708.h
---- linux-4.1.6/arch/arm/mach-bcm2708/bcm2708.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/bcm2708.h 2015-08-26 10:26:04.781260773 +0200
-@@ -0,0 +1,49 @@
-+/*
-+ * linux/arch/arm/mach-bcm2708/bcm2708.h
-+ *
-+ * BCM2708 machine support header
-+ *
-+ * Copyright (C) 2010 Broadcom
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ */
-+
-+#ifndef __BCM2708_BCM2708_H
-+#define __BCM2708_BCM2708_H
-+
-+#include <linux/amba/bus.h>
-+
-+extern void __init bcm2708_init(void);
-+extern void __init bcm2708_init_irq(void);
-+extern void __init bcm2708_map_io(void);
-+extern struct sys_timer bcm2708_timer;
-+extern unsigned int mmc_status(struct device *dev);
-+
-+#define AMBA_DEVICE(name, busid, base, plat) \
-+static struct amba_device name##_device = { \
-+ .dev = { \
-+ .coherent_dma_mask = ~0, \
-+ .init_name = busid, \
-+ .platform_data = plat, \
-+ }, \
-+ .res = { \
-+ .start = base##_BASE, \
-+ .end = (base##_BASE) + SZ_4K - 1,\
-+ .flags = IORESOURCE_MEM, \
-+ }, \
-+ .irq = base##_IRQ, \
-+}
-+
-+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/bcm2708_gpio.c linux-rpi/arch/arm/mach-bcm2708/bcm2708_gpio.c
---- linux-4.1.6/arch/arm/mach-bcm2708/bcm2708_gpio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/bcm2708_gpio.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/bcm2708_gpio.c linux-rpi/arch/arm/mach-bcm2708/bcm2708_gpio.c
+--- linux-4.1.10/arch/arm/mach-bcm2708/bcm2708_gpio.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/bcm2708_gpio.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,426 @@
+/*
+ * linux/arch/arm/mach-bcm2708/bcm2708_gpio.c
@@ -11934,9 +12077,62 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/bcm2708_gpio.c linux-rpi/arch/arm/ma
+
+MODULE_DESCRIPTION("Broadcom BCM2708 GPIO driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/arm_control.h linux-rpi/arch/arm/mach-bcm2708/include/mach/arm_control.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/arm_control.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/arm_control.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/bcm2708.h linux-rpi/arch/arm/mach-bcm2708/bcm2708.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/bcm2708.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/bcm2708.h 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,49 @@
++/*
++ * linux/arch/arm/mach-bcm2708/bcm2708.h
++ *
++ * BCM2708 machine support header
++ *
++ * Copyright (C) 2010 Broadcom
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#ifndef __BCM2708_BCM2708_H
++#define __BCM2708_BCM2708_H
++
++#include <linux/amba/bus.h>
++
++extern void __init bcm2708_init(void);
++extern void __init bcm2708_init_irq(void);
++extern void __init bcm2708_map_io(void);
++extern struct sys_timer bcm2708_timer;
++extern unsigned int mmc_status(struct device *dev);
++
++#define AMBA_DEVICE(name, busid, base, plat) \
++static struct amba_device name##_device = { \
++ .dev = { \
++ .coherent_dma_mask = ~0, \
++ .init_name = busid, \
++ .platform_data = plat, \
++ }, \
++ .res = { \
++ .start = base##_BASE, \
++ .end = (base##_BASE) + SZ_4K - 1,\
++ .flags = IORESOURCE_MEM, \
++ }, \
++ .irq = base##_IRQ, \
++}
++
++#endif
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/arm_control.h linux-rpi/arch/arm/mach-bcm2708/include/mach/arm_control.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/arm_control.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/arm_control.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,419 @@
+/*
+ * linux/arch/arm/mach-bcm2708/arm_control.h
@@ -12357,9 +12553,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/arm_control.h linux-rpi
+#define AJBTDO HW_REGISTER_RW(AJB_BASE+0x0c)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/clkdev.h linux-rpi/arch/arm/mach-bcm2708/include/mach/clkdev.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/clkdev.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/clkdev.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/clkdev.h linux-rpi/arch/arm/mach-bcm2708/include/mach/clkdev.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/clkdev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/clkdev.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,7 @@
+#ifndef __ASM_MACH_CLKDEV_H
+#define __ASM_MACH_CLKDEV_H
@@ -12368,9 +12564,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/clkdev.h linux-rpi/arch
+#define __clk_put(clk) do { } while (0)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/debug-macro.S linux-rpi/arch/arm/mach-bcm2708/include/mach/debug-macro.S
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/debug-macro.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/debug-macro.S 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/debug-macro.S linux-rpi/arch/arm/mach-bcm2708/include/mach/debug-macro.S
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/debug-macro.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/debug-macro.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,22 @@
+/* arch/arm/mach-bcm2708/include/mach/debug-macro.S
+ *
@@ -12394,9 +12590,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/debug-macro.S linux-rpi
+ .endm
+
+#include <debug/pl01x.S>
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/entry-macro.S linux-rpi/arch/arm/mach-bcm2708/include/mach/entry-macro.S
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/entry-macro.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/entry-macro.S 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/entry-macro.S linux-rpi/arch/arm/mach-bcm2708/include/mach/entry-macro.S
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/entry-macro.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/entry-macro.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,69 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/entry-macro.S
@@ -12467,9 +12663,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/entry-macro.S linux-rpi
+1020: @ EQ will be set if no irqs pending
+
+ .endm
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/frc.h linux-rpi/arch/arm/mach-bcm2708/include/mach/frc.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/frc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/frc.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/frc.h linux-rpi/arch/arm/mach-bcm2708/include/mach/frc.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/frc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/frc.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,38 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/timex.h
@@ -12509,9 +12705,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/frc.h linux-rpi/arch/ar
+extern unsigned long long frc_clock_ticks63(void);
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/gpio.h linux-rpi/arch/arm/mach-bcm2708/include/mach/gpio.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/gpio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/gpio.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/gpio.h linux-rpi/arch/arm/mach-bcm2708/include/mach/gpio.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/gpio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/gpio.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,17 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/gpio.h
@@ -12530,9 +12726,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/gpio.h linux-rpi/arch/a
+#define irq_to_gpio(x) ((x) - GPIO_IRQ_START)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/hardware.h linux-rpi/arch/arm/mach-bcm2708/include/mach/hardware.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/hardware.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/hardware.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/hardware.h linux-rpi/arch/arm/mach-bcm2708/include/mach/hardware.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/hardware.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/hardware.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,28 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/hardware.h
@@ -12562,9 +12758,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/hardware.h linux-rpi/ar
+#include <mach/platform.h>
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/io.h linux-rpi/arch/arm/mach-bcm2708/include/mach/io.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/io.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/io.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/io.h linux-rpi/arch/arm/mach-bcm2708/include/mach/io.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/io.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/io.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,27 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/io.h
@@ -12593,9 +12789,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/io.h linux-rpi/arch/arm
+#define __io(a) __typesafe_io(a)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/irqs.h linux-rpi/arch/arm/mach-bcm2708/include/mach/irqs.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/irqs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/irqs.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/irqs.h linux-rpi/arch/arm/mach-bcm2708/include/mach/irqs.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/irqs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/irqs.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,199 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/irqs.h
@@ -12796,9 +12992,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/irqs.h linux-rpi/arch/a
+#define NR_IRQS (BCM2708_ALLOC_IRQS+FREE_IRQS)
+
+#endif /* _BCM2708_IRQS_H_ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/memory.h linux-rpi/arch/arm/mach-bcm2708/include/mach/memory.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/memory.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/memory.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/memory.h linux-rpi/arch/arm/mach-bcm2708/include/mach/memory.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/memory.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/memory.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,57 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/memory.h
@@ -12857,9 +13053,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/memory.h linux-rpi/arch
+#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - BCM_PLAT_PHYS_OFFSET))
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/platform.h linux-rpi/arch/arm/mach-bcm2708/include/mach/platform.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/platform.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/platform.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/platform.h linux-rpi/arch/arm/mach-bcm2708/include/mach/platform.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/platform.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/platform.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,230 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/platform.h
@@ -13091,9 +13287,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/platform.h linux-rpi/ar
+#endif
+
+/* END */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/system.h linux-rpi/arch/arm/mach-bcm2708/include/mach/system.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/system.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/system.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/system.h linux-rpi/arch/arm/mach-bcm2708/include/mach/system.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/system.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/system.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,38 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/system.h
@@ -13133,9 +13329,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/system.h linux-rpi/arch
+}
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/timex.h linux-rpi/arch/arm/mach-bcm2708/include/mach/timex.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/timex.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/timex.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/timex.h linux-rpi/arch/arm/mach-bcm2708/include/mach/timex.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/timex.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/timex.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,23 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/timex.h
@@ -13160,9 +13356,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/timex.h linux-rpi/arch/
+ */
+
+#define CLOCK_TICK_RATE (1000000)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/uncompress.h linux-rpi/arch/arm/mach-bcm2708/include/mach/uncompress.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/uncompress.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/uncompress.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/uncompress.h linux-rpi/arch/arm/mach-bcm2708/include/mach/uncompress.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/uncompress.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/uncompress.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,84 @@
+/*
+ * arch/arm/mach-bcn2708/include/mach/uncompress.h
@@ -13248,9 +13444,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/uncompress.h linux-rpi/
+ * nothing to do
+ */
+#define arch_decomp_wdog()
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,181 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -13433,9 +13629,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_defs.h linux-rpi/
+} VC_SM_MSG_UNION_T;
+
+#endif /* __VC_SM_DEFS_H__INCLUDED__ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,55 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -13492,9 +13688,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_sm_knl.h linux-rpi/a
+ long unsigned int *data);
+
+#endif /* __VC_SM_KNL_H__INCLUDED__ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,82 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -13578,9 +13774,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vc_vchi_sm.h linux-rpi/
+ VC_SM_ACTION_CLEAN_T *action_clean);
+
+#endif /* __VC_VCHI_SM_H__INCLUDED__ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmalloc.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vmalloc.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmalloc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vmalloc.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vmalloc.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vmalloc.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vmalloc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vmalloc.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/vmalloc.h
@@ -13602,9 +13798,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmalloc.h linux-rpi/arc
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#define VMALLOC_END (0xe8000000)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h
---- linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h linux-rpi/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h
+--- linux-4.1.10/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,248 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -13854,72 +14050,75 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2708/include/mach/vmcs_sm_ioctl.h linux-r
+/* ---- Function Prototypes ---------------------------------------------- */
+
+#endif /* __VMCS_SM_IOCTL_H__INCLUDED__ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/Kconfig linux-rpi/arch/arm/mach-bcm2709/Kconfig
---- linux-4.1.6/arch/arm/mach-bcm2709/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/Kconfig 2015-08-26 10:26:04.781260773 +0200
-@@ -0,0 +1,42 @@
-+menu "Broadcom BCM2709 Implementations"
-+ depends on ARCH_BCM2709
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/Kconfig linux-rpi/arch/arm/mach-bcm2708/Kconfig
+--- linux-4.1.10/arch/arm/mach-bcm2708/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/Kconfig 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,45 @@
++menu "Broadcom BCM2708 Implementations"
++ depends on ARCH_BCM2708
+
-+config MACH_BCM2709
-+ bool "Broadcom BCM2709 Development Platform"
++config MACH_BCM2708
++ bool "Broadcom BCM2708 Development Platform"
++ select NEED_MACH_MEMORY_H
++ select NEED_MACH_IO_H
++ select CPU_V6
+ help
-+ Include support for the Broadcom(R) BCM2709 platform.
++ Include support for the Broadcom(R) BCM2708 platform.
+
-+config BCM2709_DT
-+ bool "BCM2709 Device Tree support"
-+ depends on MACH_BCM2709
++config BCM2708_DT
++ bool "BCM2708 Device Tree support"
++ depends on MACH_BCM2708
+ default n
+ select USE_OF
+ select ARCH_REQUIRE_GPIOLIB
+ select PINCTRL
+ select PINCTRL_BCM2835
+ help
-+ Enable Device Tree support for BCM2709
++ Enable Device Tree support for BCM2708
+
+config BCM2708_GPIO
-+ bool "BCM2709 gpio support"
-+ depends on MACH_BCM2709
++ bool "BCM2708 gpio support"
++ depends on MACH_BCM2708
+ select ARCH_REQUIRE_GPIOLIB
+ default y
+ help
-+ Include support for the Broadcom(R) BCM2709 gpio.
++ Include support for the Broadcom(R) BCM2708 gpio.
+
+config BCM2708_NOL2CACHE
+ bool "Videocore L2 cache disable"
-+ depends on MACH_BCM2709
-+ default y
++ depends on MACH_BCM2708
++ default n
+ help
+ Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt.
+
+config BCM2708_SPIDEV
+ bool "Bind spidev to SPI0 master"
-+ depends on MACH_BCM2709
++ depends on MACH_BCM2708
+ depends on SPI
+ default y
+ help
+ Binds spidev driver to the SPI0 master
+endmenu
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/Makefile linux-rpi/arch/arm/mach-bcm2709/Makefile
---- linux-4.1.6/arch/arm/mach-bcm2709/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/Makefile 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/Makefile linux-rpi/arch/arm/mach-bcm2708/Makefile
+--- linux-4.1.10/arch/arm/mach-bcm2708/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/Makefile 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,6 @@
+#
+# Makefile for the linux kernel.
+#
+
-+obj-$(CONFIG_MACH_BCM2709) += bcm2709.o armctrl.o
++obj-$(CONFIG_MACH_BCM2708) += bcm2708.o armctrl.o
+obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/Makefile.boot linux-rpi/arch/arm/mach-bcm2709/Makefile.boot
---- linux-4.1.6/arch/arm/mach-bcm2709/Makefile.boot 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/Makefile.boot 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2708/Makefile.boot linux-rpi/arch/arm/mach-bcm2708/Makefile.boot
+--- linux-4.1.10/arch/arm/mach-bcm2708/Makefile.boot 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2708/Makefile.boot 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,3 @@
+ zreladdr-y := 0x00008000
+params_phys-y := 0x00000100
+initrd_phys-y := 0x00800000
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/armctrl.c linux-rpi/arch/arm/mach-bcm2709/armctrl.c
---- linux-4.1.6/arch/arm/mach-bcm2709/armctrl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/armctrl.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/armctrl.c linux-rpi/arch/arm/mach-bcm2709/armctrl.c
+--- linux-4.1.10/arch/arm/mach-bcm2709/armctrl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/armctrl.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,384 @@
+/*
+ * linux/arch/arm/mach-bcm2708/armctrl.c
@@ -14305,9 +14504,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/armctrl.c linux-rpi/arch/arm/mach-bc
+ armctrl_dt_init();
+ return 0;
+}
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/armctrl.h linux-rpi/arch/arm/mach-bcm2709/armctrl.h
---- linux-4.1.6/arch/arm/mach-bcm2709/armctrl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/armctrl.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/armctrl.h linux-rpi/arch/arm/mach-bcm2709/armctrl.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/armctrl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/armctrl.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,27 @@
+/*
+ * linux/arch/arm/mach-bcm2708/armctrl.h
@@ -14336,9 +14535,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/armctrl.h linux-rpi/arch/arm/mach-bc
+ u32 armctrl_sources, u32 resume_sources);
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2708_gpio.c linux-rpi/arch/arm/mach-bcm2709/bcm2708_gpio.c
---- linux-4.1.6/arch/arm/mach-bcm2709/bcm2708_gpio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/bcm2708_gpio.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/bcm2708_gpio.c linux-rpi/arch/arm/mach-bcm2709/bcm2708_gpio.c
+--- linux-4.1.10/arch/arm/mach-bcm2709/bcm2708_gpio.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/bcm2708_gpio.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,426 @@
+/*
+ * linux/arch/arm/mach-bcm2708/bcm2708_gpio.c
@@ -14766,9 +14965,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2708_gpio.c linux-rpi/arch/arm/ma
+
+MODULE_DESCRIPTION("Broadcom BCM2708 GPIO driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.c linux-rpi/arch/arm/mach-bcm2709/bcm2709.c
---- linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/bcm2709.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/bcm2709.c linux-rpi/arch/arm/mach-bcm2709/bcm2709.c
+--- linux-4.1.10/arch/arm/mach-bcm2709/bcm2709.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/bcm2709.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,1332 @@
+/*
+ * linux/arch/arm/mach-bcm2709/bcm2709.c
@@ -16102,9 +16301,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.c linux-rpi/arch/arm/mach-bc
+MODULE_PARM_DESC(vc_i2c_override, "Allow the use of VC's I2C peripheral.");
+module_param(pps_gpio_pin, int, 0644);
+MODULE_PARM_DESC(pps_gpio_pin, "Set GPIO pin to reserve for PPS");
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.h linux-rpi/arch/arm/mach-bcm2709/bcm2709.h
---- linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/bcm2709.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/bcm2709.h linux-rpi/arch/arm/mach-bcm2709/bcm2709.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/bcm2709.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/bcm2709.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,49 @@
+/*
+ * linux/arch/arm/mach-bcm2708/bcm2708.h
@@ -16155,9 +16354,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/bcm2709.h linux-rpi/arch/arm/mach-bc
+}
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/delay.S linux-rpi/arch/arm/mach-bcm2709/delay.S
---- linux-4.1.6/arch/arm/mach-bcm2709/delay.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/delay.S 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/delay.S linux-rpi/arch/arm/mach-bcm2709/delay.S
+--- linux-4.1.10/arch/arm/mach-bcm2709/delay.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/delay.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,21 @@
+/*
+ * linux/arch/arm/lib/delay.S
@@ -16180,9 +16379,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/delay.S linux-rpi/arch/arm/mach-bcm2
+ bhi bcm2708_delay
+ mov pc, lr
+ENDPROC(bcm2708_delay)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/arm_control.h linux-rpi/arch/arm/mach-bcm2709/include/mach/arm_control.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/arm_control.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/arm_control.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/arm_control.h linux-rpi/arch/arm/mach-bcm2709/include/mach/arm_control.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/arm_control.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/arm_control.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,493 @@
+/*
+ * linux/arch/arm/mach-bcm2708/arm_control.h
@@ -16677,16 +16876,16 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/arm_control.h linux-rpi
+#define ARM_LOCAL_MAILBOX3_CLR3 HW_REGISTER_RW(ARM_LOCAL_BASE+0x0FC)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/barriers.h linux-rpi/arch/arm/mach-bcm2709/include/mach/barriers.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/barriers.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/barriers.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/barriers.h linux-rpi/arch/arm/mach-bcm2709/include/mach/barriers.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/barriers.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/barriers.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,3 @@
+#define mb() dsb()
+#define rmb() dsb()
+#define wmb() mb()
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/clkdev.h linux-rpi/arch/arm/mach-bcm2709/include/mach/clkdev.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/clkdev.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/clkdev.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/clkdev.h linux-rpi/arch/arm/mach-bcm2709/include/mach/clkdev.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/clkdev.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/clkdev.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,7 @@
+#ifndef __ASM_MACH_CLKDEV_H
+#define __ASM_MACH_CLKDEV_H
@@ -16695,9 +16894,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/clkdev.h linux-rpi/arch
+#define __clk_put(clk) do { } while (0)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/debug-macro.S linux-rpi/arch/arm/mach-bcm2709/include/mach/debug-macro.S
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/debug-macro.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/debug-macro.S 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/debug-macro.S linux-rpi/arch/arm/mach-bcm2709/include/mach/debug-macro.S
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/debug-macro.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/debug-macro.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,22 @@
+/* arch/arm/mach-bcm2708/include/mach/debug-macro.S
+ *
@@ -16721,9 +16920,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/debug-macro.S linux-rpi
+ .endm
+
+#include <debug/pl01x.S>
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/entry-macro.S linux-rpi/arch/arm/mach-bcm2709/include/mach/entry-macro.S
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/entry-macro.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/entry-macro.S 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/entry-macro.S linux-rpi/arch/arm/mach-bcm2709/include/mach/entry-macro.S
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/entry-macro.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/entry-macro.S 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,120 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/entry-macro.S
@@ -16845,9 +17044,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/entry-macro.S linux-rpi
+ .macro arch_irq_handler_default
+1: get_irqnr_and_base r0, r2, r6, lr
+ .endm
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/frc.h linux-rpi/arch/arm/mach-bcm2709/include/mach/frc.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/frc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/frc.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/frc.h linux-rpi/arch/arm/mach-bcm2709/include/mach/frc.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/frc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/frc.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,38 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/timex.h
@@ -16887,9 +17086,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/frc.h linux-rpi/arch/ar
+extern unsigned long long frc_clock_ticks63(void);
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/gpio.h linux-rpi/arch/arm/mach-bcm2709/include/mach/gpio.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/gpio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/gpio.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/gpio.h linux-rpi/arch/arm/mach-bcm2709/include/mach/gpio.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/gpio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/gpio.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,17 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/gpio.h
@@ -16908,9 +17107,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/gpio.h linux-rpi/arch/a
+#define irq_to_gpio(x) ((x) - GPIO_IRQ_START)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/hardware.h linux-rpi/arch/arm/mach-bcm2709/include/mach/hardware.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/hardware.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/hardware.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/hardware.h linux-rpi/arch/arm/mach-bcm2709/include/mach/hardware.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/hardware.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/hardware.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,28 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/hardware.h
@@ -16940,9 +17139,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/hardware.h linux-rpi/ar
+#include <mach/platform.h>
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/io.h linux-rpi/arch/arm/mach-bcm2709/include/mach/io.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/io.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/io.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/io.h linux-rpi/arch/arm/mach-bcm2709/include/mach/io.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/io.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/io.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,27 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/io.h
@@ -16971,9 +17170,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/io.h linux-rpi/arch/arm
+#define __io(a) __typesafe_io(a)
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/irqs.h linux-rpi/arch/arm/mach-bcm2709/include/mach/irqs.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/irqs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/irqs.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/irqs.h linux-rpi/arch/arm/mach-bcm2709/include/mach/irqs.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/irqs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/irqs.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,225 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/irqs.h
@@ -17200,9 +17399,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/irqs.h linux-rpi/arch/a
+#define NR_IRQS (BCM2708_ALLOC_IRQS+FREE_IRQS)
+
+#endif /* _BCM2708_IRQS_H_ */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/memory.h linux-rpi/arch/arm/mach-bcm2709/include/mach/memory.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/memory.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/memory.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/memory.h linux-rpi/arch/arm/mach-bcm2709/include/mach/memory.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/memory.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/memory.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,57 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/memory.h
@@ -17261,9 +17460,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/memory.h linux-rpi/arch
+#define __bus_to_pfn(x) __phys_to_pfn((x) - (BUS_OFFSET - BCM_PLAT_PHYS_OFFSET))
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/platform.h linux-rpi/arch/arm/mach-bcm2709/include/mach/platform.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/platform.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/platform.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/platform.h linux-rpi/arch/arm/mach-bcm2709/include/mach/platform.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/platform.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/platform.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,227 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/platform.h
@@ -17492,9 +17691,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/platform.h linux-rpi/ar
+#endif
+
+/* END */
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/system.h linux-rpi/arch/arm/mach-bcm2709/include/mach/system.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/system.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/system.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/system.h linux-rpi/arch/arm/mach-bcm2709/include/mach/system.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/system.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/system.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,38 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/system.h
@@ -17534,9 +17733,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/system.h linux-rpi/arch
+}
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/timex.h linux-rpi/arch/arm/mach-bcm2709/include/mach/timex.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/timex.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/timex.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/timex.h linux-rpi/arch/arm/mach-bcm2709/include/mach/timex.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/timex.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/timex.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,23 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/timex.h
@@ -17561,9 +17760,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/timex.h linux-rpi/arch/
+ */
+
+#define CLOCK_TICK_RATE (1000000)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/uncompress.h linux-rpi/arch/arm/mach-bcm2709/include/mach/uncompress.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/uncompress.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/uncompress.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/uncompress.h linux-rpi/arch/arm/mach-bcm2709/include/mach/uncompress.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/uncompress.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/uncompress.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,84 @@
+/*
+ * arch/arm/mach-bcn2708/include/mach/uncompress.h
@@ -17649,9 +17848,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/uncompress.h linux-rpi/
+ * nothing to do
+ */
+#define arch_decomp_wdog()
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vc_support.h linux-rpi/arch/arm/mach-bcm2709/include/mach/vc_support.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vc_support.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/vc_support.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/vc_support.h linux-rpi/arch/arm/mach-bcm2709/include/mach/vc_support.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/vc_support.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/vc_support.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,69 @@
+#ifndef _VC_SUPPORT_H_
+#define _VC_SUPPORT_H_
@@ -17722,9 +17921,9 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vc_support.h linux-rpi/
+ unsigned int r0, unsigned int r1, unsigned int r2, unsigned int r3, unsigned int r4, unsigned int r5);
+
+#endif
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vmalloc.h linux-rpi/arch/arm/mach-bcm2709/include/mach/vmalloc.h
---- linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vmalloc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/include/mach/vmalloc.h 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/include/mach/vmalloc.h linux-rpi/arch/arm/mach-bcm2709/include/mach/vmalloc.h
+--- linux-4.1.10/arch/arm/mach-bcm2709/include/mach/vmalloc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/include/mach/vmalloc.h 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,20 @@
+/*
+ * arch/arm/mach-bcm2708/include/mach/vmalloc.h
@@ -17746,9 +17945,72 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/include/mach/vmalloc.h linux-rpi/arc
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#define VMALLOC_END (0xff000000)
-diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/vc_support.c linux-rpi/arch/arm/mach-bcm2709/vc_support.c
---- linux-4.1.6/arch/arm/mach-bcm2709/vc_support.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/arch/arm/mach-bcm2709/vc_support.c 2015-08-26 10:26:04.781260773 +0200
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/Kconfig linux-rpi/arch/arm/mach-bcm2709/Kconfig
+--- linux-4.1.10/arch/arm/mach-bcm2709/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/Kconfig 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,42 @@
++menu "Broadcom BCM2709 Implementations"
++ depends on ARCH_BCM2709
++
++config MACH_BCM2709
++ bool "Broadcom BCM2709 Development Platform"
++ help
++ Include support for the Broadcom(R) BCM2709 platform.
++
++config BCM2709_DT
++ bool "BCM2709 Device Tree support"
++ depends on MACH_BCM2709
++ default n
++ select USE_OF
++ select ARCH_REQUIRE_GPIOLIB
++ select PINCTRL
++ select PINCTRL_BCM2835
++ help
++ Enable Device Tree support for BCM2709
++
++config BCM2708_GPIO
++ bool "BCM2709 gpio support"
++ depends on MACH_BCM2709
++ select ARCH_REQUIRE_GPIOLIB
++ default y
++ help
++ Include support for the Broadcom(R) BCM2709 gpio.
++
++config BCM2708_NOL2CACHE
++ bool "Videocore L2 cache disable"
++ depends on MACH_BCM2709
++ default y
++ help
++ Do not allow ARM to use GPU's L2 cache. Requires disable_l2cache in config.txt.
++
++config BCM2708_SPIDEV
++ bool "Bind spidev to SPI0 master"
++ depends on MACH_BCM2709
++ depends on SPI
++ default y
++ help
++ Binds spidev driver to the SPI0 master
++endmenu
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/Makefile linux-rpi/arch/arm/mach-bcm2709/Makefile
+--- linux-4.1.10/arch/arm/mach-bcm2709/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/Makefile 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,6 @@
++#
++# Makefile for the linux kernel.
++#
++
++obj-$(CONFIG_MACH_BCM2709) += bcm2709.o armctrl.o
++obj-$(CONFIG_BCM2708_GPIO) += bcm2708_gpio.o
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/Makefile.boot linux-rpi/arch/arm/mach-bcm2709/Makefile.boot
+--- linux-4.1.10/arch/arm/mach-bcm2709/Makefile.boot 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/Makefile.boot 2015-10-07 16:40:32.000000000 +0200
+@@ -0,0 +1,3 @@
++ zreladdr-y := 0x00008000
++params_phys-y := 0x00000100
++initrd_phys-y := 0x00800000
+diff -Nur linux-4.1.10/arch/arm/mach-bcm2709/vc_support.c linux-rpi/arch/arm/mach-bcm2709/vc_support.c
+--- linux-4.1.10/arch/arm/mach-bcm2709/vc_support.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/arch/arm/mach-bcm2709/vc_support.c 2015-10-07 16:40:32.000000000 +0200
@@ -0,0 +1,318 @@
+/*
+ * vc_support.c
@@ -18068,9 +18330,21 @@ diff -Nur linux-4.1.6/arch/arm/mach-bcm2709/vc_support.c linux-rpi/arch/arm/mach
+ return 1;
+ }
+}
-diff -Nur linux-4.1.6/arch/arm/mm/Kconfig linux-rpi/arch/arm/mm/Kconfig
---- linux-4.1.6/arch/arm/mm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/mm/Kconfig 2015-08-26 10:26:04.889262296 +0200
+diff -Nur linux-4.1.10/arch/arm/Makefile linux-rpi/arch/arm/Makefile
+--- linux-4.1.10/arch/arm/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/Makefile 2015-10-07 16:40:31.000000000 +0200
+@@ -142,6 +142,8 @@
+
+ # Machine directory name. This list is sorted alphanumerically
+ # by CONFIG_* macro name.
++machine-$(CONFIG_ARCH_BCM2708) += bcm2708
++machine-$(CONFIG_ARCH_BCM2709) += bcm2709
+ machine-$(CONFIG_ARCH_ALPINE) += alpine
+ machine-$(CONFIG_ARCH_AT91) += at91
+ machine-$(CONFIG_ARCH_AXXIA) += axxia
+diff -Nur linux-4.1.10/arch/arm/mm/Kconfig linux-rpi/arch/arm/mm/Kconfig
+--- linux-4.1.10/arch/arm/mm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/mm/Kconfig 2015-10-07 16:40:32.000000000 +0200
@@ -358,7 +358,7 @@
# ARMv6
@@ -18080,9 +18354,9 @@ diff -Nur linux-4.1.6/arch/arm/mm/Kconfig linux-rpi/arch/arm/mm/Kconfig
select CPU_32v6
select CPU_ABRT_EV6
select CPU_CACHE_V6
-diff -Nur linux-4.1.6/arch/arm/mm/proc-v6.S linux-rpi/arch/arm/mm/proc-v6.S
---- linux-4.1.6/arch/arm/mm/proc-v6.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/mm/proc-v6.S 2015-08-26 10:26:04.893262353 +0200
+diff -Nur linux-4.1.10/arch/arm/mm/proc-v6.S linux-rpi/arch/arm/mm/proc-v6.S
+--- linux-4.1.10/arch/arm/mm/proc-v6.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/mm/proc-v6.S 2015-10-07 16:40:32.000000000 +0200
@@ -73,10 +73,19 @@
*
* IRQs are already disabled.
@@ -18106,10 +18380,10 @@ diff -Nur linux-4.1.6/arch/arm/mm/proc-v6.S linux-rpi/arch/arm/mm/proc-v6.S
ret lr
ENTRY(cpu_v6_dcache_clean_area)
-diff -Nur linux-4.1.6/arch/arm/mm/proc-v7.S linux-rpi/arch/arm/mm/proc-v7.S
---- linux-4.1.6/arch/arm/mm/proc-v7.S 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/mm/proc-v7.S 2015-08-26 10:26:04.893262353 +0200
-@@ -456,6 +456,7 @@
+diff -Nur linux-4.1.10/arch/arm/mm/proc-v7.S linux-rpi/arch/arm/mm/proc-v7.S
+--- linux-4.1.10/arch/arm/mm/proc-v7.S 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/mm/proc-v7.S 2015-10-07 16:40:32.000000000 +0200
+@@ -460,6 +460,7 @@
orr r0, r0, r6 @ set them
THUMB( orr r0, r0, #1 << 30 ) @ Thumb exceptions
ret lr @ return to head.S:__ret
@@ -18117,9 +18391,9 @@ diff -Nur linux-4.1.6/arch/arm/mm/proc-v7.S linux-rpi/arch/arm/mm/proc-v7.S
ENDPROC(__v7_setup)
.align 2
-diff -Nur linux-4.1.6/arch/arm/tools/mach-types linux-rpi/arch/arm/tools/mach-types
---- linux-4.1.6/arch/arm/tools/mach-types 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/arch/arm/tools/mach-types 2015-08-26 10:26:04.905262521 +0200
+diff -Nur linux-4.1.10/arch/arm/tools/mach-types linux-rpi/arch/arm/tools/mach-types
+--- linux-4.1.10/arch/arm/tools/mach-types 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/arch/arm/tools/mach-types 2015-10-07 16:40:32.000000000 +0200
@@ -522,6 +522,8 @@
prima2_evb MACH_PRIMA2_EVB PRIMA2_EVB 3103
paz00 MACH_PAZ00 PAZ00 3128
@@ -18129,94 +18403,262 @@ diff -Nur linux-4.1.6/arch/arm/tools/mach-types linux-rpi/arch/arm/tools/mach-ty
ag5evm MACH_AG5EVM AG5EVM 3189
ics_if_voip MACH_ICS_IF_VOIP ICS_IF_VOIP 3206
wlf_cragg_6410 MACH_WLF_CRAGG_6410 WLF_CRAGG_6410 3207
-diff -Nur linux-4.1.6/drivers/char/Kconfig linux-rpi/drivers/char/Kconfig
---- linux-4.1.6/drivers/char/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/char/Kconfig 2015-08-26 10:26:06.405283586 +0200
-@@ -590,6 +590,8 @@
+diff -Nur linux-4.1.10/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 linux-rpi/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00
+--- linux-4.1.10/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/Documentation/ABI/stable/sysfs-driver-w1_ds28ea00 2015-10-07 16:40:29.000000000 +0200
+@@ -0,0 +1,6 @@
++What: /sys/bus/w1/devices/.../w1_seq
++Date: Apr 2015
++Contact: Matt Campbell <mattrcampbell@gmail.com>
++Description: Support for the DS28EA00 chain sequence function
++ see Documentation/w1/slaves/w1_therm for detailed information
++Users: any user space application which wants to communicate with DS28EA00
+diff -Nur linux-4.1.10/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt linux-rpi/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt
+--- linux-4.1.10/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/Documentation/devicetree/bindings/dma/brcm,bcm2835-dma.txt 2015-10-07 16:40:29.000000000 +0200
+@@ -48,8 +48,8 @@
- source "drivers/s390/char/Kconfig"
+ bcm2835_i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = < 0x7e203000 0x20>,
+- < 0x7e101098 0x02>;
++ reg = < 0x7e203000 0x24>,
++ < 0x7e101098 0x08>;
-+source "drivers/char/broadcom/Kconfig"
+ dmas = <&dma 2>,
+ <&dma 3>;
+diff -Nur linux-4.1.10/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt linux-rpi/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt
+--- linux-4.1.10/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt 2015-10-07 16:40:29.000000000 +0200
+@@ -0,0 +1,17 @@
++* Broadcom BCM2835 SMI character device driver.
+
- config MSM_SMD_PKT
- bool "Enable device interface for some SMD packet ports"
- default n
-diff -Nur linux-4.1.6/drivers/char/Makefile linux-rpi/drivers/char/Makefile
---- linux-4.1.6/drivers/char/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/char/Makefile 2015-08-26 10:26:06.405283586 +0200
-@@ -62,3 +62,4 @@
++SMI or secondary memory interface is a peripheral specific to certain Broadcom
++SOCs, and is helpful for talking to things like parallel-interface displays
++and NAND flashes (in fact, most things with a parallel register interface).
++
++This driver adds a character device which provides a user-space interface to
++an instance of the SMI driver.
++
++Required properties:
++- compatible: "brcm,bcm2835-smi-dev"
++- smi_handle: a phandle to the smi node.
++
++Optional properties:
++- None.
++
++
+diff -Nur linux-4.1.10/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt linux-rpi/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt
+--- linux-4.1.10/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt 2015-10-07 16:40:29.000000000 +0200
+@@ -0,0 +1,48 @@
++* Broadcom BCM2835 SMI driver.
++
++SMI or secondary memory interface is a peripheral specific to certain Broadcom
++SOCs, and is helpful for talking to things like parallel-interface displays
++and NAND flashes (in fact, most things with a parallel register interface).
++
++Required properties:
++- compatible: "brcm,bcm2835-smi"
++- reg: Should contain location and length of SMI registers and SMI clkman regs
++- interrupts: *the* SMI interrupt.
++- pinctrl-names: should be "default".
++- pinctrl-0: the phandle of the gpio pin node.
++- brcm,smi-clock-source: the clock source for clkman
++- brcm,smi-clock-divisor: the integer clock divisor for clkman
++- dmas: the dma controller phandle and the DREQ number (4 on a 2835)
++- dma-names: the name used by the driver to request its channel.
++ Should be "rx-tx".
++
++Optional properties:
++- None.
++
++Examples:
++
++8 data pin configuration:
++
++smi: smi@7e600000 {
++ compatible = "brcm,bcm2835-smi";
++ reg = <0x7e600000 0x44>, <0x7e1010b0 0x8>;
++ interrupts = <2 16>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&smi_pins>;
++ brcm,smi-clock-source = <6>;
++ brcm,smi-clock-divisor = <4>;
++ dmas = <&dma 4>;
++ dma-names = "rx-tx";
++
++ status = "okay";
++};
++
++smi_pins: smi_pins {
++ brcm,pins = <2 3 4 5 6 7 8 9 10 11 12 13 14 15>;
++ /* Alt 1: SMI */
++ brcm,function = <5 5 5 5 5 5 5 5 5 5 5 5 5 5>;
++ /* /CS, /WE and /OE are pulled high, as they are
++ generally active low signals */
++ brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
++};
++
+diff -Nur linux-4.1.10/Documentation/devicetree/bindings/mtd/brcm,bcm2835-smi-nand.txt linux-rpi/Documentation/devicetree/bindings/mtd/brcm,bcm2835-smi-nand.txt
+--- linux-4.1.10/Documentation/devicetree/bindings/mtd/brcm,bcm2835-smi-nand.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/Documentation/devicetree/bindings/mtd/brcm,bcm2835-smi-nand.txt 2015-10-07 16:40:29.000000000 +0200
+@@ -0,0 +1,42 @@
++* BCM2835 SMI NAND flash
++
++This driver is a shim between the BCM2835 SMI driver (SMI is a peripheral for
++talking to parallel register interfaces) and Linux's MTD layer.
++
++Required properties:
++- compatible: "brcm,bcm2835-smi-nand"
++- status: "okay"
++
++Optional properties:
++- partition@n, where n is an integer from a consecutive sequence starting at 0
++ - Difficult to store partition table on NAND device - normally put it
++ in the source code, kernel bootparams, or device tree (the best way!)
++ - Sub-properties:
++ - label: the partition name, as shown by mtdinfo /dev/mtd*
++ - reg: the size and offset of this partition.
++ - (optional) read-only: an empty property flagging as read only
++
++Example:
++
++nand: flash@0 {
++ compatible = "brcm,bcm2835-smi-nand";
++ status = "okay";
++
++ partition@0 {
++ label = "stage2";
++ // 128k
++ reg = <0 0x20000>;
++ read-only;
++ };
++ partition@1 {
++ label = "firmware";
++ // 16M
++ reg = <0x20000 0x1000000>;
++ read-only;
++ };
++ partition@2 {
++ label = "root";
++ // 2G
++ reg = <0x1020000 0x80000000>;
++ };
++};
+\ No newline at end of file
+diff -Nur linux-4.1.10/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt linux-rpi/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt
+--- linux-4.1.10/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/Documentation/devicetree/bindings/sound/brcm,bcm2835-i2s.txt 2015-10-07 16:40:29.000000000 +0200
+@@ -16,8 +16,8 @@
- obj-$(CONFIG_TILE_SROM) += tile-srom.o
- obj-$(CONFIG_XILLYBUS) += xillybus/
-+obj-$(CONFIG_BRCM_CHAR_DRIVERS) += broadcom/
-diff -Nur linux-4.1.6/drivers/char/broadcom/Kconfig linux-rpi/drivers/char/broadcom/Kconfig
---- linux-4.1.6/drivers/char/broadcom/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/Kconfig 2015-08-26 10:26:06.405283586 +0200
-@@ -0,0 +1,49 @@
-+#
-+# Broadcom char driver config
-+#
+ bcm2835_i2s: i2s@7e203000 {
+ compatible = "brcm,bcm2835-i2s";
+- reg = <0x7e203000 0x20>,
+- <0x7e101098 0x02>;
++ reg = <0x7e203000 0x24>,
++ <0x7e101098 0x08>;
+
+ dmas = <&dma 2>,
+ <&dma 3>;
+diff -Nur linux-4.1.10/Documentation/video4linux/bcm2835-v4l2.txt linux-rpi/Documentation/video4linux/bcm2835-v4l2.txt
+--- linux-4.1.10/Documentation/video4linux/bcm2835-v4l2.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/Documentation/video4linux/bcm2835-v4l2.txt 2015-10-07 16:40:31.000000000 +0200
+@@ -0,0 +1,60 @@
+
-+menuconfig BRCM_CHAR_DRIVERS
-+ bool "Broadcom Char Drivers"
-+ help
-+ Broadcom's char drivers
++BCM2835 (aka Raspberry Pi) V4L2 driver
++======================================
+
-+if BRCM_CHAR_DRIVERS
++1. Copyright
++============
+
-+config BCM_VC_CMA
-+ bool "Videocore CMA"
-+ depends on CMA && BCM2708_VCHIQ
-+ default n
-+ help
-+ Helper for videocore CMA access.
++Copyright © 2013 Raspberry Pi (Trading) Ltd.
+
-+config BCM2708_VCMEM
-+ bool "Videocore Memory"
-+ default y
-+ help
-+ Helper for videocore memory access and total size allocation.
++2. License
++==========
+
-+config BCM_VCIO
-+ tristate "Mailbox userspace access"
-+ depends on BCM2835_MBOX
-+ help
-+ Gives access to the mailbox property channel from userspace.
++This program is free software; you can redistribute it and/or modify
++it under the terms of the GNU General Public License as published by
++the Free Software Foundation; either version 2 of the License, or
++(at your option) any later version.
+
-+endif
++This program is distributed in the hope that it will be useful,
++but WITHOUT ANY WARRANTY; without even the implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++GNU General Public License for more details.
+
-+config BCM_VC_SM
-+ bool "VMCS Shared Memory"
-+ depends on BCM2708_VCHIQ
-+ select BCM2708_VCMEM
-+ default n
-+ help
-+ Support for the VC shared memory on the Broadcom reference
-+ design. Uses the VCHIQ stack.
++You should have received a copy of the GNU General Public License
++along with this program; if not, write to the Free Software
++Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
-+config BCM2835_DEVGPIOMEM
-+ tristate "/dev/gpiomem rootless GPIO access via mmap() on the BCM2835"
-+ default m
-+ help
-+ Provides users with root-free access to the GPIO registers
-+ on the 2835. Calling mmap(/dev/gpiomem) will map the GPIO
-+ register page to the user's pointer.
++3. Quick Start
++==============
+
-diff -Nur linux-4.1.6/drivers/char/broadcom/Makefile linux-rpi/drivers/char/broadcom/Makefile
---- linux-4.1.6/drivers/char/broadcom/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/Makefile 2015-08-26 10:26:06.405283586 +0200
-@@ -0,0 +1,7 @@
-+obj-$(CONFIG_BCM_VC_CMA) += vc_cma/
-+obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
-+obj-$(CONFIG_BCM_VCIO) += vcio.o
-+obj-$(CONFIG_BCM_VC_SM) += vc_sm/
++You need a version 1.0 or later of v4l2-ctl, available from:
++ git://git.linuxtv.org/v4l-utils.git
+
-+obj-$(CONFIG_BCM2835_DEVGPIOMEM)+= bcm2835-gpiomem.o
++$ sudo modprobe bcm2835-v4l2
++
++Turn on the overlay:
++
++$ v4l2-ctl --overlay=1
++
++Turn off the overlay:
++
++$ v4l2-ctl --overlay=0
++
++Set the capture format for video:
++
++$ v4l2-ctl --set-fmt-video=width=1920,height=1088,pixelformat=4
++
++(Note: 1088 not 1080).
++
++Capture:
++
++$ v4l2-ctl --stream-mmap=3 --stream-count=100 --stream-to=somefile.h264
++
++Stills capture:
++
++$ v4l2-ctl --set-fmt-video=width=2592,height=1944,pixelformat=3
++$ v4l2-ctl --stream-mmap=3 --stream-count=1 --stream-to=somefile.jpg
++
++List of available formats:
+
-diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/char/broadcom/bcm2835-gpiomem.c
---- linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/bcm2835-gpiomem.c 2015-08-26 10:26:06.405283586 +0200
-@@ -0,0 +1,265 @@
++$ v4l2-ctl --list-formats
+diff -Nur linux-4.1.10/Documentation/w1/slaves/w1_therm linux-rpi/Documentation/w1/slaves/w1_therm
+--- linux-4.1.10/Documentation/w1/slaves/w1_therm 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/Documentation/w1/slaves/w1_therm 2015-10-07 16:40:31.000000000 +0200
+@@ -11,12 +11,14 @@
+ Description
+ -----------
+
+-w1_therm provides basic temperature conversion for ds18*20 devices.
++w1_therm provides basic temperature conversion for ds18*20 devices, and the
++ds28ea00 device.
+ supported family codes:
+ W1_THERM_DS18S20 0x10
+ W1_THERM_DS1822 0x22
+ W1_THERM_DS18B20 0x28
+ W1_THERM_DS1825 0x3B
++W1_THERM_DS28EA00 0x42
+
+ Support is provided through the sysfs w1_slave file. Each open and
+ read sequence will initiate a temperature conversion then provide two
+@@ -48,3 +50,10 @@
+ maximum current draw of 1.5mA and that a 5k pullup resistor is not
+ sufficient. The strong pullup is designed to provide the additional
+ current required.
++
++The DS28EA00 provides an additional two pins for implementing a sequence
++detection algorithm. This feature allows you to determine the physical
++location of the chip in the 1-wire bus without needing pre-existing
++knowledge of the bus ordering. Support is provided through the sysfs
++w1_seq file. The file will contain a single line with an integer value
++representing the device index in the bus starting at 0.
+diff -Nur linux-4.1.10/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/char/broadcom/bcm2835-gpiomem.c
+--- linux-4.1.10/drivers/char/broadcom/bcm2835-gpiomem.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/bcm2835-gpiomem.c 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,260 @@
+/**
+ * GPIO memory device driver
+ *
@@ -18362,7 +18804,6 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/
+ int err;
+ void *ptr_err;
+ struct device *dev = &pdev->dev;
-+ struct device_node *node = dev->of_node;
+ struct resource *ioresource;
+
+ /* Allocate buffers and instance data */
@@ -18376,6 +18817,15 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/
+
+ inst->dev = dev;
+
++ ioresource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (ioresource) {
++ inst->gpio_regs_phys = ioresource->start;
++ } else {
++ dev_err(inst->dev, "failed to get IO resource");
++ err = -ENOENT;
++ goto failed_get_resource;
++ }
++
+ /* Create character device entries */
+
+ err = alloc_chrdev_region(&bcm2835_gpiomem_devid,
@@ -18406,20 +18856,6 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/
+ if (IS_ERR(ptr_err))
+ goto failed_device_create;
+
-+ /* Get address from device tree if available (*_resource() correctly
-+ converts the bus address in device tree to a physical address),
-+ or use hardcoded offset + BCM2708_PERI_BASE if not.
-+ (In spite of its name 2708 actually seems to have the correct
-+ mach-dependent value on 2709 etc, as it is defined in
-+ mach-bcm270x/platform.h) */
-+
-+ if (node) {
-+ ioresource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+ inst->gpio_regs_phys = ioresource->start;
-+ } else {
-+ inst->gpio_regs_phys = GPIO_BASE;
-+ }
-+
+ dev_info(inst->dev, "Initialised: Registers at 0x%08lx",
+ inst->gpio_regs_phys);
+
@@ -18433,6 +18869,7 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/
+failed_cdev_add:
+ unregister_chrdev_region(bcm2835_gpiomem_devid, 1);
+failed_alloc_chrdev:
++failed_get_resource:
+ kfree(inst);
+failed_inst_alloc:
+ dev_err(inst->dev, "could not load bcm2835_gpiomem");
@@ -18482,9 +18919,487 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/bcm2835-gpiomem.c linux-rpi/drivers/
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("gpiomem driver for accessing GPIO from userspace");
+MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_cma/Makefile linux-rpi/drivers/char/broadcom/vc_cma/Makefile
---- linux-4.1.6/drivers/char/broadcom/vc_cma/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_cma/Makefile 2015-08-26 10:26:06.405283586 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/bcm2835_smi_dev.c linux-rpi/drivers/char/broadcom/bcm2835_smi_dev.c
+--- linux-4.1.10/drivers/char/broadcom/bcm2835_smi_dev.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/bcm2835_smi_dev.c 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,402 @@
++/**
++ * Character device driver for Broadcom Secondary Memory Interface
++ *
++ * Written by Luke Wren <luke@raspberrypi.org>
++ * Copyright (c) 2015, Raspberry Pi (Trading) Ltd.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of.h>
++#include <linux/platform_device.h>
++#include <linux/slab.h>
++#include <linux/mm.h>
++#include <linux/pagemap.h>
++#include <linux/fs.h>
++#include <linux/cdev.h>
++#include <linux/fs.h>
++
++#include <linux/broadcom/bcm2835_smi.h>
++
++#define DEVICE_NAME "bcm2835-smi-dev"
++#define DRIVER_NAME "smi-dev-bcm2835"
++#define DEVICE_MINOR 0
++
++static struct cdev bcm2835_smi_cdev;
++static dev_t bcm2835_smi_devid;
++static struct class *bcm2835_smi_class;
++static struct device *bcm2835_smi_dev;
++
++struct bcm2835_smi_dev_instance {
++ struct device *dev;
++};
++
++static struct bcm2835_smi_instance *smi_inst;
++static struct bcm2835_smi_dev_instance *inst;
++
++static const char *const ioctl_names[] = {
++ "READ_SETTINGS",
++ "WRITE_SETTINGS",
++ "ADDRESS"
++};
++
++/****************************************************************************
++*
++* SMI chardev file ops
++*
++***************************************************************************/
++static long
++bcm2835_smi_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
++{
++ long ret = 0;
++
++ dev_info(inst->dev, "serving ioctl...");
++
++ switch (cmd) {
++ case BCM2835_SMI_IOC_GET_SETTINGS:{
++ struct smi_settings *settings;
++
++ dev_info(inst->dev, "Reading SMI settings to user.");
++ settings = bcm2835_smi_get_settings_from_regs(smi_inst);
++ if (copy_to_user((void *)arg, settings,
++ sizeof(struct smi_settings)))
++ dev_err(inst->dev, "settings copy failed.");
++ break;
++ }
++ case BCM2835_SMI_IOC_WRITE_SETTINGS:{
++ struct smi_settings *settings;
++
++ dev_info(inst->dev, "Setting user's SMI settings.");
++ settings = bcm2835_smi_get_settings_from_regs(smi_inst);
++ if (copy_from_user(settings, (void *)arg,
++ sizeof(struct smi_settings)))
++ dev_err(inst->dev, "settings copy failed.");
++ else
++ bcm2835_smi_set_regs_from_settings(smi_inst);
++ break;
++ }
++ case BCM2835_SMI_IOC_ADDRESS:
++ dev_info(inst->dev, "SMI address set: 0x%02x", (int)arg);
++ bcm2835_smi_set_address(smi_inst, arg);
++ break;
++ default:
++ dev_err(inst->dev, "invalid ioctl cmd: %d", cmd);
++ ret = -ENOTTY;
++ break;
++ }
++
++ return ret;
++}
++
++static int bcm2835_smi_open(struct inode *inode, struct file *file)
++{
++ int dev = iminor(inode);
++
++ dev_dbg(inst->dev, "SMI device opened.");
++
++ if (dev != DEVICE_MINOR) {
++ dev_err(inst->dev,
++ "bcm2835_smi_release: Unknown minor device: %d",
++ dev);
++ return -ENXIO;
++ }
++
++ return 0;
++}
++
++static int bcm2835_smi_release(struct inode *inode, struct file *file)
++{
++ int dev = iminor(inode);
++
++ if (dev != DEVICE_MINOR) {
++ dev_err(inst->dev,
++ "bcm2835_smi_release: Unknown minor device %d", dev);
++ return -ENXIO;
++ }
++
++ return 0;
++}
++
++static ssize_t dma_bounce_user(
++ enum dma_transfer_direction dma_dir,
++ char __user *user_ptr,
++ size_t count,
++ struct bcm2835_smi_bounce_info *bounce)
++{
++ int chunk_size;
++ int chunk_no = 0;
++ int count_left = count;
++
++ while (count_left) {
++ int rv;
++ void *buf;
++
++ /* Wait for current chunk to complete: */
++ if (down_timeout(&bounce->callback_sem,
++ msecs_to_jiffies(1000))) {
++ dev_err(inst->dev, "DMA bounce timed out");
++ count -= (count_left);
++ break;
++ }
++
++ if (bounce->callback_sem.count >= DMA_BOUNCE_BUFFER_COUNT - 1)
++ dev_err(inst->dev, "WARNING: Ring buffer overflow");
++ chunk_size = count_left > DMA_BOUNCE_BUFFER_SIZE ?
++ DMA_BOUNCE_BUFFER_SIZE : count_left;
++ buf = bounce->buffer[chunk_no % DMA_BOUNCE_BUFFER_COUNT];
++ if (dma_dir == DMA_DEV_TO_MEM)
++ rv = copy_to_user(user_ptr, buf, chunk_size);
++ else
++ rv = copy_from_user(buf, user_ptr, chunk_size);
++ if (rv)
++ dev_err(inst->dev, "copy_*_user() failed!: %d", rv);
++ user_ptr += chunk_size;
++ count_left -= chunk_size;
++ chunk_no++;
++ }
++ return count;
++}
++
++static ssize_t
++bcm2835_read_file(struct file *f, char __user *user_ptr,
++ size_t count, loff_t *offs)
++{
++ int odd_bytes;
++
++ dev_dbg(inst->dev, "User reading %d bytes from SMI.", count);
++ /* We don't want to DMA a number of bytes % 4 != 0 (32 bit FIFO) */
++ if (count > DMA_THRESHOLD_BYTES)
++ odd_bytes = count & 0x3;
++ else
++ odd_bytes = count;
++ count -= odd_bytes;
++ if (count) {
++ struct bcm2835_smi_bounce_info *bounce;
++
++ count = bcm2835_smi_user_dma(smi_inst,
++ DMA_DEV_TO_MEM, user_ptr, count,
++ &bounce);
++ if (count)
++ count = dma_bounce_user(DMA_DEV_TO_MEM, user_ptr,
++ count, bounce);
++ }
++ if (odd_bytes) {
++ /* Read from FIFO directly if not using DMA */
++ uint8_t buf[DMA_THRESHOLD_BYTES];
++
++ bcm2835_smi_read_buf(smi_inst, buf, odd_bytes);
++ if (copy_to_user(user_ptr, buf, odd_bytes))
++ dev_err(inst->dev, "copy_to_user() failed.");
++ count += odd_bytes;
++
++ }
++ return count;
++}
++
++static ssize_t
++bcm2835_write_file(struct file *f, const char __user *user_ptr,
++ size_t count, loff_t *offs)
++{
++ int odd_bytes;
++
++ dev_dbg(inst->dev, "User writing %d bytes to SMI.", count);
++ if (count > DMA_THRESHOLD_BYTES)
++ odd_bytes = count & 0x3;
++ else
++ odd_bytes = count;
++ count -= odd_bytes;
++ if (count) {
++ struct bcm2835_smi_bounce_info *bounce;
++
++ count = bcm2835_smi_user_dma(smi_inst,
++ DMA_MEM_TO_DEV, (char __user *)user_ptr, count,
++ &bounce);
++ if (count)
++ count = dma_bounce_user(DMA_MEM_TO_DEV,
++ (char __user *)user_ptr,
++ count, bounce);
++ }
++ if (odd_bytes) {
++ uint8_t buf[DMA_THRESHOLD_BYTES];
++
++ if (copy_from_user(buf, user_ptr, odd_bytes))
++ dev_err(inst->dev, "copy_from_user() failed.");
++ else
++ bcm2835_smi_write_buf(smi_inst, buf, odd_bytes);
++ count += odd_bytes;
++ }
++ return count;
++}
++
++static const struct file_operations
++bcm2835_smi_fops = {
++ .owner = THIS_MODULE,
++ .unlocked_ioctl = bcm2835_smi_ioctl,
++ .open = bcm2835_smi_open,
++ .release = bcm2835_smi_release,
++ .read = bcm2835_read_file,
++ .write = bcm2835_write_file,
++};
++
++
++/****************************************************************************
++*
++* bcm2835_smi_probe - called when the driver is loaded.
++*
++***************************************************************************/
++
++static int bcm2835_smi_dev_probe(struct platform_device *pdev)
++{
++ int err;
++ void *ptr_err;
++ struct device *dev = &pdev->dev;
++ struct device_node *node = dev->of_node, *smi_node;
++
++ if (!node) {
++ dev_err(dev, "No device tree node supplied!");
++ return -EINVAL;
++ }
++
++ smi_node = of_parse_phandle(node, "smi_handle", 0);
++
++ if (!smi_node) {
++ dev_err(dev, "No such property: smi_handle");
++ return -ENXIO;
++ }
++
++ smi_inst = bcm2835_smi_get(smi_node);
++
++ if (!smi_inst)
++ return -EPROBE_DEFER;
++
++ /* Allocate buffers and instance data */
++
++ inst = devm_kzalloc(dev, sizeof(*inst), GFP_KERNEL);
++
++ if (!inst)
++ return -ENOMEM;
++
++ inst->dev = dev;
++
++ /* Create character device entries */
++
++ err = alloc_chrdev_region(&bcm2835_smi_devid,
++ DEVICE_MINOR, 1, DEVICE_NAME);
++ if (err != 0) {
++ dev_err(inst->dev, "unable to allocate device number");
++ return -ENOMEM;
++ }
++ cdev_init(&bcm2835_smi_cdev, &bcm2835_smi_fops);
++ bcm2835_smi_cdev.owner = THIS_MODULE;
++ err = cdev_add(&bcm2835_smi_cdev, bcm2835_smi_devid, 1);
++ if (err != 0) {
++ dev_err(inst->dev, "unable to register device");
++ err = -ENOMEM;
++ goto failed_cdev_add;
++ }
++
++ /* Create sysfs entries */
++
++ bcm2835_smi_class = class_create(THIS_MODULE, DEVICE_NAME);
++ ptr_err = bcm2835_smi_class;
++ if (IS_ERR(ptr_err))
++ goto failed_class_create;
++
++ bcm2835_smi_dev = device_create(bcm2835_smi_class, NULL,
++ bcm2835_smi_devid, NULL,
++ "smi");
++ ptr_err = bcm2835_smi_dev;
++ if (IS_ERR(ptr_err))
++ goto failed_device_create;
++
++ dev_info(inst->dev, "initialised");
++
++ return 0;
++
++failed_device_create:
++ class_destroy(bcm2835_smi_class);
++failed_class_create:
++ cdev_del(&bcm2835_smi_cdev);
++ err = PTR_ERR(ptr_err);
++failed_cdev_add:
++ unregister_chrdev_region(bcm2835_smi_devid, 1);
++ dev_err(dev, "could not load bcm2835_smi_dev");
++ return err;
++}
++
++/****************************************************************************
++*
++* bcm2835_smi_remove - called when the driver is unloaded.
++*
++***************************************************************************/
++
++static int bcm2835_smi_dev_remove(struct platform_device *pdev)
++{
++ device_destroy(bcm2835_smi_class, bcm2835_smi_devid);
++ class_destroy(bcm2835_smi_class);
++ cdev_del(&bcm2835_smi_cdev);
++ unregister_chrdev_region(bcm2835_smi_devid, 1);
++
++ dev_info(inst->dev, "SMI character dev removed - OK");
++ return 0;
++}
++
++/****************************************************************************
++*
++* Register the driver with device tree
++*
++***************************************************************************/
++
++static const struct of_device_id bcm2835_smi_dev_of_match[] = {
++ {.compatible = "brcm,bcm2835-smi-dev",},
++ { /* sentinel */ },
++};
++
++MODULE_DEVICE_TABLE(of, bcm2835_smi_dev_of_match);
++
++static struct platform_driver bcm2835_smi_dev_driver = {
++ .probe = bcm2835_smi_dev_probe,
++ .remove = bcm2835_smi_dev_remove,
++ .driver = {
++ .name = DRIVER_NAME,
++ .owner = THIS_MODULE,
++ .of_match_table = bcm2835_smi_dev_of_match,
++ },
++};
++
++module_platform_driver(bcm2835_smi_dev_driver);
++
++MODULE_ALIAS("platform:smi-dev-bcm2835");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION(
++ "Character device driver for BCM2835's secondary memory interface");
++MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
+diff -Nur linux-4.1.10/drivers/char/broadcom/Kconfig linux-rpi/drivers/char/broadcom/Kconfig
+--- linux-4.1.10/drivers/char/broadcom/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/Kconfig 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,57 @@
++#
++# Broadcom char driver config
++#
++
++menuconfig BRCM_CHAR_DRIVERS
++ bool "Broadcom Char Drivers"
++ help
++ Broadcom's char drivers
++
++if BRCM_CHAR_DRIVERS
++
++config BCM_VC_CMA
++ bool "Videocore CMA"
++ depends on CMA && BCM2708_VCHIQ
++ default n
++ help
++ Helper for videocore CMA access.
++
++config BCM2708_VCMEM
++ bool "Videocore Memory"
++ default y
++ help
++ Helper for videocore memory access and total size allocation.
++
++config BCM_VCIO
++ tristate "Mailbox userspace access"
++ depends on BCM2835_MBOX
++ help
++ Gives access to the mailbox property channel from userspace.
++
++endif
++
++config BCM_VC_SM
++ bool "VMCS Shared Memory"
++ depends on BCM2708_VCHIQ
++ select BCM2708_VCMEM
++ default n
++ help
++ Support for the VC shared memory on the Broadcom reference
++ design. Uses the VCHIQ stack.
++
++config BCM2835_DEVGPIOMEM
++ tristate "/dev/gpiomem rootless GPIO access via mmap() on the BCM2835"
++ default m
++ help
++ Provides users with root-free access to the GPIO registers
++ on the 2835. Calling mmap(/dev/gpiomem) will map the GPIO
++ register page to the user's pointer.
++
++config BCM2835_SMI_DEV
++ tristate "Character device driver for BCM2835 Secondary Memory Interface"
++ depends on (MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835) && BCM2835_SMI
++ default m
++ help
++ This driver provides a character device interface (ioctl + read/write) to
++ Broadcom's Secondary Memory interface. The low-level functionality is provided
++ by the SMI driver itself.
+diff -Nur linux-4.1.10/drivers/char/broadcom/Makefile linux-rpi/drivers/char/broadcom/Makefile
+--- linux-4.1.10/drivers/char/broadcom/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,7 @@
++obj-$(CONFIG_BCM_VC_CMA) += vc_cma/
++obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
++obj-$(CONFIG_BCM_VCIO) += vcio.o
++obj-$(CONFIG_BCM_VC_SM) += vc_sm/
++
++obj-$(CONFIG_BCM2835_DEVGPIOMEM)+= bcm2835-gpiomem.o
++obj-$(CONFIG_BCM2835_SMI_DEV) += bcm2835_smi_dev.o
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_cma/Makefile linux-rpi/drivers/char/broadcom/vc_cma/Makefile
+--- linux-4.1.10/drivers/char/broadcom/vc_cma/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_cma/Makefile 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,14 @@
+ccflags-y += -Wall -Wstrict-prototypes -Wno-trigraphs
+ccflags-y += -Werror
@@ -18500,9 +19415,9 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_cma/Makefile linux-rpi/drivers/ch
+obj-$(CONFIG_BCM_VC_CMA) += vc-cma.o
+
+vc-cma-objs := vc_cma.o
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_cma/vc_cma.c linux-rpi/drivers/char/broadcom/vc_cma/vc_cma.c
---- linux-4.1.6/drivers/char/broadcom/vc_cma/vc_cma.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_cma/vc_cma.c 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_cma/vc_cma.c linux-rpi/drivers/char/broadcom/vc_cma/vc_cma.c
+--- linux-4.1.10/drivers/char/broadcom/vc_cma/vc_cma.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_cma/vc_cma.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,1193 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -19697,9 +20612,188 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_cma/vc_cma.c linux-rpi/drivers/ch
+module_exit(vc_cma_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Broadcom Corporation");
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_mem.c linux-rpi/drivers/char/broadcom/vc_mem.c
---- linux-4.1.6/drivers/char/broadcom/vc_mem.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_mem.c 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/vcio.c linux-rpi/drivers/char/broadcom/vcio.c
+--- linux-4.1.10/drivers/char/broadcom/vcio.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vcio.c 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,175 @@
++/*
++ * Copyright (C) 2010 Broadcom
++ * Copyright (C) 2015 Noralf Trønnes
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ */
++
++#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
++
++#include <linux/cdev.h>
++#include <linux/device.h>
++#include <linux/fs.h>
++#include <linux/init.h>
++#include <linux/ioctl.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/uaccess.h>
++#include <soc/bcm2835/raspberrypi-firmware.h>
++
++#define MBOX_CHAN_PROPERTY 8
++
++#define VCIO_IOC_MAGIC 100
++#define IOCTL_MBOX_PROPERTY _IOWR(VCIO_IOC_MAGIC, 0, char *)
++
++static struct {
++ dev_t devt;
++ struct cdev cdev;
++ struct class *class;
++ struct rpi_firmware *fw;
++} vcio;
++
++static int vcio_user_property_list(void *user)
++{
++ u32 *buf, size;
++ int ret;
++
++ /* The first 32-bit is the size of the buffer */
++ if (copy_from_user(&size, user, sizeof(size)))
++ return -EFAULT;
++
++ buf = kmalloc(size, GFP_KERNEL);
++ if (!buf)
++ return -ENOMEM;
++
++ if (copy_from_user(buf, user, size)) {
++ kfree(buf);
++ return -EFAULT;
++ }
++
++ /* Strip off protocol encapsulation */
++ ret = rpi_firmware_property_list(vcio.fw, &buf[2], size - 12);
++ if (ret) {
++ kfree(buf);
++ return ret;
++ }
++
++ buf[1] = RPI_FIRMWARE_STATUS_SUCCESS;
++ if (copy_to_user(user, buf, size))
++ ret = -EFAULT;
++
++ kfree(buf);
++
++ return ret;
++}
++
++static int vcio_device_open(struct inode *inode, struct file *file)
++{
++ try_module_get(THIS_MODULE);
++
++ return 0;
++}
++
++static int vcio_device_release(struct inode *inode, struct file *file)
++{
++ module_put(THIS_MODULE);
++
++ return 0;
++}
++
++static long vcio_device_ioctl(struct file *file, unsigned int ioctl_num,
++ unsigned long ioctl_param)
++{
++ switch (ioctl_num) {
++ case IOCTL_MBOX_PROPERTY:
++ return vcio_user_property_list((void *)ioctl_param);
++ default:
++ pr_err("unknown ioctl: %d\n", ioctl_num);
++ return -EINVAL;
++ }
++}
++
++const struct file_operations vcio_fops = {
++ .unlocked_ioctl = vcio_device_ioctl,
++ .open = vcio_device_open,
++ .release = vcio_device_release,
++};
++
++static int __init vcio_init(void)
++{
++ struct device_node *np;
++ static struct device *dev;
++ int ret;
++
++ np = of_find_compatible_node(NULL, NULL,
++ "raspberrypi,bcm2835-firmware");
++/* Uncomment this when we only boot with Device Tree
++ if (!of_device_is_available(np))
++ return -ENODEV;
++*/
++ vcio.fw = rpi_firmware_get(np);
++ if (!vcio.fw)
++ return -ENODEV;
++
++ ret = alloc_chrdev_region(&vcio.devt, 0, 1, "vcio");
++ if (ret) {
++ pr_err("failed to allocate device number\n");
++ return ret;
++ }
++
++ cdev_init(&vcio.cdev, &vcio_fops);
++ vcio.cdev.owner = THIS_MODULE;
++ ret = cdev_add(&vcio.cdev, vcio.devt, 1);
++ if (ret) {
++ pr_err("failed to register device\n");
++ goto err_unregister_chardev;
++ }
++
++ /*
++ * Create sysfs entries
++ * 'bcm2708_vcio' is used for backwards compatibility so we don't break
++ * userspace. Raspian has a udev rule that changes the permissions.
++ */
++ vcio.class = class_create(THIS_MODULE, "bcm2708_vcio");
++ if (IS_ERR(vcio.class)) {
++ ret = PTR_ERR(vcio.class);
++ pr_err("failed to create class\n");
++ goto err_cdev_del;
++ }
++
++ dev = device_create(vcio.class, NULL, vcio.devt, NULL, "vcio");
++ if (IS_ERR(dev)) {
++ ret = PTR_ERR(dev);
++ pr_err("failed to create device\n");
++ goto err_class_destroy;
++ }
++
++ return 0;
++
++err_class_destroy:
++ class_destroy(vcio.class);
++err_cdev_del:
++ cdev_del(&vcio.cdev);
++err_unregister_chardev:
++ unregister_chrdev_region(vcio.devt, 1);
++
++ return ret;
++}
++module_init(vcio_init);
++
++static void __exit vcio_exit(void)
++{
++ device_destroy(vcio.class, vcio.devt);
++ class_destroy(vcio.class);
++ cdev_del(&vcio.cdev);
++ unregister_chrdev_region(vcio.devt, 1);
++}
++module_exit(vcio_exit);
++
++MODULE_AUTHOR("Gray Girling");
++MODULE_AUTHOR("Noralf Trønnes");
++MODULE_DESCRIPTION("Mailbox userspace access");
++MODULE_LICENSE("GPL");
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_mem.c linux-rpi/drivers/char/broadcom/vc_mem.c
+--- linux-4.1.10/drivers/char/broadcom/vc_mem.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_mem.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,422 @@
+/*****************************************************************************
+* Copyright 2010 - 2011 Broadcom Corporation. All rights reserved.
@@ -20123,9 +21217,9 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_mem.c linux-rpi/drivers/char/broa
+module_param(phys_addr, uint, 0644);
+module_param(mem_size, uint, 0644);
+module_param(mem_base, uint, 0644);
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/Makefile linux-rpi/drivers/char/broadcom/vc_sm/Makefile
---- linux-4.1.6/drivers/char/broadcom/vc_sm/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_sm/Makefile 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_sm/Makefile linux-rpi/drivers/char/broadcom/vc_sm/Makefile
+--- linux-4.1.10/drivers/char/broadcom/vc_sm/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_sm/Makefile 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,21 @@
+EXTRA_CFLAGS += -Wall -Wstrict-prototypes -Wno-trigraphs -O2
+
@@ -20148,9 +21242,9 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/Makefile linux-rpi/drivers/cha
+vc-sm-objs := \
+ vmcs_sm.o \
+ vc_vchi_sm.o
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/vc_vchi_sm.c linux-rpi/drivers/char/broadcom/vc_sm/vc_vchi_sm.c
---- linux-4.1.6/drivers/char/broadcom/vc_sm/vc_vchi_sm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_sm/vc_vchi_sm.c 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_sm/vc_vchi_sm.c linux-rpi/drivers/char/broadcom/vc_sm/vc_vchi_sm.c
+--- linux-4.1.10/drivers/char/broadcom/vc_sm/vc_vchi_sm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_sm/vc_vchi_sm.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,492 @@
+/*****************************************************************************
+* Copyright 2011-2012 Broadcom Corporation. All rights reserved.
@@ -20644,9 +21738,9 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/vc_vchi_sm.c linux-rpi/drivers
+ return vc_vchi_sm_send_msg(handle, VC_SM_MSG_TYPE_ACTION_CLEAN,
+ msg, sizeof(*msg), 0, 0, 0, 0);
+}
-diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/vmcs_sm.c linux-rpi/drivers/char/broadcom/vc_sm/vmcs_sm.c
---- linux-4.1.6/drivers/char/broadcom/vc_sm/vmcs_sm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vc_sm/vmcs_sm.c 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/broadcom/vc_sm/vmcs_sm.c linux-rpi/drivers/char/broadcom/vc_sm/vmcs_sm.c
+--- linux-4.1.10/drivers/char/broadcom/vc_sm/vmcs_sm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/broadcom/vc_sm/vmcs_sm.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,3211 @@
+/*****************************************************************************
+* Copyright 2011-2012 Broadcom Corporation. All rights reserved.
@@ -22018,8 +23112,8 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/vmcs_sm.c linux-rpi/drivers/ch
+ return 0;
+
+error:
-+ vmcs_sm_release_resource(resource, 0);
+ resource->res_stats[MAP_FAIL]++;
++ vmcs_sm_release_resource(resource, 0);
+ return ret;
+}
+
@@ -23859,229 +24953,9 @@ diff -Nur linux-4.1.6/drivers/char/broadcom/vc_sm/vmcs_sm.c linux-rpi/drivers/ch
+MODULE_AUTHOR("Broadcom");
+MODULE_DESCRIPTION("VideoCore SharedMemory Driver");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/drivers/char/broadcom/vcio.c linux-rpi/drivers/char/broadcom/vcio.c
---- linux-4.1.6/drivers/char/broadcom/vcio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/broadcom/vcio.c 2015-08-26 10:26:06.409283642 +0200
-@@ -0,0 +1,175 @@
-+/*
-+ * Copyright (C) 2010 Broadcom
-+ * Copyright (C) 2015 Noralf Trønnes
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ */
-+
-+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-+
-+#include <linux/cdev.h>
-+#include <linux/device.h>
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/ioctl.h>
-+#include <linux/module.h>
-+#include <linux/slab.h>
-+#include <linux/uaccess.h>
-+#include <soc/bcm2835/raspberrypi-firmware.h>
-+
-+#define MBOX_CHAN_PROPERTY 8
-+
-+#define VCIO_IOC_MAGIC 100
-+#define IOCTL_MBOX_PROPERTY _IOWR(VCIO_IOC_MAGIC, 0, char *)
-+
-+static struct {
-+ dev_t devt;
-+ struct cdev cdev;
-+ struct class *class;
-+ struct rpi_firmware *fw;
-+} vcio;
-+
-+static int vcio_user_property_list(void *user)
-+{
-+ u32 *buf, size;
-+ int ret;
-+
-+ /* The first 32-bit is the size of the buffer */
-+ if (copy_from_user(&size, user, sizeof(size)))
-+ return -EFAULT;
-+
-+ buf = kmalloc(size, GFP_KERNEL);
-+ if (!buf)
-+ return -ENOMEM;
-+
-+ if (copy_from_user(buf, user, size)) {
-+ kfree(buf);
-+ return -EFAULT;
-+ }
-+
-+ /* Strip off protocol encapsulation */
-+ ret = rpi_firmware_property_list(vcio.fw, &buf[2], size - 12);
-+ if (ret) {
-+ kfree(buf);
-+ return ret;
-+ }
-+
-+ buf[1] = RPI_FIRMWARE_STATUS_SUCCESS;
-+ if (copy_to_user(user, buf, size))
-+ ret = -EFAULT;
-+
-+ kfree(buf);
-+
-+ return ret;
-+}
-+
-+static int vcio_device_open(struct inode *inode, struct file *file)
-+{
-+ try_module_get(THIS_MODULE);
-+
-+ return 0;
-+}
-+
-+static int vcio_device_release(struct inode *inode, struct file *file)
-+{
-+ module_put(THIS_MODULE);
-+
-+ return 0;
-+}
-+
-+static long vcio_device_ioctl(struct file *file, unsigned int ioctl_num,
-+ unsigned long ioctl_param)
-+{
-+ switch (ioctl_num) {
-+ case IOCTL_MBOX_PROPERTY:
-+ return vcio_user_property_list((void *)ioctl_param);
-+ default:
-+ pr_err("unknown ioctl: %d\n", ioctl_num);
-+ return -EINVAL;
-+ }
-+}
-+
-+const struct file_operations vcio_fops = {
-+ .unlocked_ioctl = vcio_device_ioctl,
-+ .open = vcio_device_open,
-+ .release = vcio_device_release,
-+};
-+
-+static int __init vcio_init(void)
-+{
-+ struct device_node *np;
-+ static struct device *dev;
-+ int ret;
-+
-+ np = of_find_compatible_node(NULL, NULL,
-+ "raspberrypi,bcm2835-firmware");
-+/* Uncomment this when we only boot with Device Tree
-+ if (!of_device_is_available(np))
-+ return -ENODEV;
-+*/
-+ vcio.fw = rpi_firmware_get(np);
-+ if (!vcio.fw)
-+ return -ENODEV;
-+
-+ ret = alloc_chrdev_region(&vcio.devt, 0, 1, "vcio");
-+ if (ret) {
-+ pr_err("failed to allocate device number\n");
-+ return ret;
-+ }
-+
-+ cdev_init(&vcio.cdev, &vcio_fops);
-+ vcio.cdev.owner = THIS_MODULE;
-+ ret = cdev_add(&vcio.cdev, vcio.devt, 1);
-+ if (ret) {
-+ pr_err("failed to register device\n");
-+ goto err_unregister_chardev;
-+ }
-+
-+ /*
-+ * Create sysfs entries
-+ * 'bcm2708_vcio' is used for backwards compatibility so we don't break
-+ * userspace. Raspian has a udev rule that changes the permissions.
-+ */
-+ vcio.class = class_create(THIS_MODULE, "bcm2708_vcio");
-+ if (IS_ERR(vcio.class)) {
-+ ret = PTR_ERR(vcio.class);
-+ pr_err("failed to create class\n");
-+ goto err_cdev_del;
-+ }
-+
-+ dev = device_create(vcio.class, NULL, vcio.devt, NULL, "vcio");
-+ if (IS_ERR(dev)) {
-+ ret = PTR_ERR(dev);
-+ pr_err("failed to create device\n");
-+ goto err_class_destroy;
-+ }
-+
-+ return 0;
-+
-+err_class_destroy:
-+ class_destroy(vcio.class);
-+err_cdev_del:
-+ cdev_del(&vcio.cdev);
-+err_unregister_chardev:
-+ unregister_chrdev_region(vcio.devt, 1);
-+
-+ return ret;
-+}
-+module_init(vcio_init);
-+
-+static void __exit vcio_exit(void)
-+{
-+ device_destroy(vcio.class, vcio.devt);
-+ class_destroy(vcio.class);
-+ cdev_del(&vcio.cdev);
-+ unregister_chrdev_region(vcio.devt, 1);
-+}
-+module_exit(vcio_exit);
-+
-+MODULE_AUTHOR("Gray Girling");
-+MODULE_AUTHOR("Noralf Trønnes");
-+MODULE_DESCRIPTION("Mailbox userspace access");
-+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/drivers/char/hw_random/Kconfig linux-rpi/drivers/char/hw_random/Kconfig
---- linux-4.1.6/drivers/char/hw_random/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/char/hw_random/Kconfig 2015-08-26 10:26:06.409283642 +0200
-@@ -90,7 +90,7 @@
-
- config HW_RANDOM_BCM2835
- tristate "Broadcom BCM2835 Random Number Generator support"
-- depends on ARCH_BCM2835
-+ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
- default HW_RANDOM
- ---help---
- This driver provides kernel-side support for the Random Number
-@@ -333,6 +333,17 @@
-
- If unsure, say Y.
-
-+config HW_RANDOM_BCM2708
-+ tristate "BCM2708 generic true random number generator support"
-+ depends on HW_RANDOM && (ARCH_BCM2708 || ARCH_BCM2709)
-+ ---help---
-+ This driver provides the kernel-side support for the BCM2708 hardware.
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called bcm2708-rng.
-+
-+ If unsure, say N.
-+
- config HW_RANDOM_MSM
- tristate "Qualcomm SoCs Random Number Generator support"
- depends on HW_RANDOM && ARCH_QCOM
-diff -Nur linux-4.1.6/drivers/char/hw_random/Makefile linux-rpi/drivers/char/hw_random/Makefile
---- linux-4.1.6/drivers/char/hw_random/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/char/hw_random/Makefile 2015-08-26 10:26:06.409283642 +0200
-@@ -4,6 +4,7 @@
-
- obj-$(CONFIG_HW_RANDOM) += rng-core.o
- rng-core-y := core.o
-+obj-$(CONFIG_HW_RANDOM_BCM2708) += bcm2708-rng.o
- obj-$(CONFIG_HW_RANDOM_TIMERIOMEM) += timeriomem-rng.o
- obj-$(CONFIG_HW_RANDOM_INTEL) += intel-rng.o
- obj-$(CONFIG_HW_RANDOM_AMD) += amd-rng.o
-diff -Nur linux-4.1.6/drivers/char/hw_random/bcm2708-rng.c linux-rpi/drivers/char/hw_random/bcm2708-rng.c
---- linux-4.1.6/drivers/char/hw_random/bcm2708-rng.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/char/hw_random/bcm2708-rng.c 2015-08-26 10:26:06.409283642 +0200
+diff -Nur linux-4.1.10/drivers/char/hw_random/bcm2708-rng.c linux-rpi/drivers/char/hw_random/bcm2708-rng.c
+--- linux-4.1.10/drivers/char/hw_random/bcm2708-rng.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/char/hw_random/bcm2708-rng.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,118 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -24201,9 +25075,245 @@ diff -Nur linux-4.1.6/drivers/char/hw_random/bcm2708-rng.c linux-rpi/drivers/cha
+
+MODULE_DESCRIPTION("BCM2708 H/W Random Number Generator (RNG) driver");
+MODULE_LICENSE("GPL and additional rights");
-diff -Nur linux-4.1.6/drivers/clocksource/arm_arch_timer.c linux-rpi/drivers/clocksource/arm_arch_timer.c
---- linux-4.1.6/drivers/clocksource/arm_arch_timer.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/clocksource/arm_arch_timer.c 2015-08-26 10:26:06.441284089 +0200
+diff -Nur linux-4.1.10/drivers/char/hw_random/Kconfig linux-rpi/drivers/char/hw_random/Kconfig
+--- linux-4.1.10/drivers/char/hw_random/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/char/hw_random/Kconfig 2015-10-07 16:40:34.000000000 +0200
+@@ -90,7 +90,7 @@
+
+ config HW_RANDOM_BCM2835
+ tristate "Broadcom BCM2835 Random Number Generator support"
+- depends on ARCH_BCM2835
++ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
+ default HW_RANDOM
+ ---help---
+ This driver provides kernel-side support for the Random Number
+@@ -333,6 +333,17 @@
+
+ If unsure, say Y.
+
++config HW_RANDOM_BCM2708
++ tristate "BCM2708 generic true random number generator support"
++ depends on HW_RANDOM && (ARCH_BCM2708 || ARCH_BCM2709)
++ ---help---
++ This driver provides the kernel-side support for the BCM2708 hardware.
++
++ To compile this driver as a module, choose M here: the
++ module will be called bcm2708-rng.
++
++ If unsure, say N.
++
+ config HW_RANDOM_MSM
+ tristate "Qualcomm SoCs Random Number Generator support"
+ depends on HW_RANDOM && ARCH_QCOM
+diff -Nur linux-4.1.10/drivers/char/hw_random/Makefile linux-rpi/drivers/char/hw_random/Makefile
+--- linux-4.1.10/drivers/char/hw_random/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/char/hw_random/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -4,6 +4,7 @@
+
+ obj-$(CONFIG_HW_RANDOM) += rng-core.o
+ rng-core-y := core.o
++obj-$(CONFIG_HW_RANDOM_BCM2708) += bcm2708-rng.o
+ obj-$(CONFIG_HW_RANDOM_TIMERIOMEM) += timeriomem-rng.o
+ obj-$(CONFIG_HW_RANDOM_INTEL) += intel-rng.o
+ obj-$(CONFIG_HW_RANDOM_AMD) += amd-rng.o
+diff -Nur linux-4.1.10/drivers/char/Kconfig linux-rpi/drivers/char/Kconfig
+--- linux-4.1.10/drivers/char/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/char/Kconfig 2015-10-07 16:40:34.000000000 +0200
+@@ -590,6 +590,8 @@
+
+ source "drivers/s390/char/Kconfig"
+
++source "drivers/char/broadcom/Kconfig"
++
+ config MSM_SMD_PKT
+ bool "Enable device interface for some SMD packet ports"
+ default n
+diff -Nur linux-4.1.10/drivers/char/Makefile linux-rpi/drivers/char/Makefile
+--- linux-4.1.10/drivers/char/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/char/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -62,3 +62,4 @@
+
+ obj-$(CONFIG_TILE_SROM) += tile-srom.o
+ obj-$(CONFIG_XILLYBUS) += xillybus/
++obj-$(CONFIG_BRCM_CHAR_DRIVERS) += broadcom/
+diff -Nur linux-4.1.10/drivers/clk/clk-hifiberry-dacpro.c linux-rpi/drivers/clk/clk-hifiberry-dacpro.c
+--- linux-4.1.10/drivers/clk/clk-hifiberry-dacpro.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/clk/clk-hifiberry-dacpro.c 2015-10-07 16:40:34.000000000 +0200
+@@ -0,0 +1,160 @@
++/*
++ * Clock Driver for HiFiBerry DAC Pro
++ *
++ * Author: Stuart MacLean
++ * Copyright 2015
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ */
++
++#include <linux/clk-provider.h>
++#include <linux/clkdev.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of.h>
++#include <linux/slab.h>
++#include <linux/platform_device.h>
++
++/* Clock rate of CLK44EN attached to GPIO6 pin */
++#define CLK_44EN_RATE 22579200UL
++/* Clock rate of CLK48EN attached to GPIO3 pin */
++#define CLK_48EN_RATE 24576000UL
++
++/**
++ * struct hifiberry_dacpro_clk - Common struct to the HiFiBerry DAC Pro
++ * @hw: clk_hw for the common clk framework
++ * @mode: 0 => CLK44EN, 1 => CLK48EN
++ */
++struct clk_hifiberry_hw {
++ struct clk_hw hw;
++ uint8_t mode;
++};
++
++#define to_hifiberry_clk(_hw) container_of(_hw, struct clk_hifiberry_hw, hw)
++
++static const struct of_device_id clk_hifiberry_dacpro_dt_ids[] = {
++ { .compatible = "hifiberry,dacpro-clk",},
++ { }
++};
++MODULE_DEVICE_TABLE(of, clk_hifiberry_dacpro_dt_ids);
++
++static unsigned long clk_hifiberry_dacpro_recalc_rate(struct clk_hw *hw,
++ unsigned long parent_rate)
++{
++ return (to_hifiberry_clk(hw)->mode == 0) ? CLK_44EN_RATE :
++ CLK_48EN_RATE;
++}
++
++static long clk_hifiberry_dacpro_round_rate(struct clk_hw *hw,
++ unsigned long rate, unsigned long *parent_rate)
++{
++ long actual_rate;
++
++ if (rate <= CLK_44EN_RATE) {
++ actual_rate = (long)CLK_44EN_RATE;
++ } else if (rate >= CLK_48EN_RATE) {
++ actual_rate = (long)CLK_48EN_RATE;
++ } else {
++ long diff44Rate = (long)(rate - CLK_44EN_RATE);
++ long diff48Rate = (long)(CLK_48EN_RATE - rate);
++
++ if (diff44Rate < diff48Rate)
++ actual_rate = (long)CLK_44EN_RATE;
++ else
++ actual_rate = (long)CLK_48EN_RATE;
++ }
++ return actual_rate;
++}
++
++
++static int clk_hifiberry_dacpro_set_rate(struct clk_hw *hw,
++ unsigned long rate, unsigned long parent_rate)
++{
++ unsigned long actual_rate;
++ struct clk_hifiberry_hw *clk = to_hifiberry_clk(hw);
++
++ actual_rate = (unsigned long)clk_hifiberry_dacpro_round_rate(hw, rate,
++ &parent_rate);
++ clk->mode = (actual_rate == CLK_44EN_RATE) ? 0 : 1;
++ return 0;
++}
++
++
++const struct clk_ops clk_hifiberry_dacpro_rate_ops = {
++ .recalc_rate = clk_hifiberry_dacpro_recalc_rate,
++ .round_rate = clk_hifiberry_dacpro_round_rate,
++ .set_rate = clk_hifiberry_dacpro_set_rate,
++};
++
++static int clk_hifiberry_dacpro_probe(struct platform_device *pdev)
++{
++ int ret;
++ struct clk_hifiberry_hw *proclk;
++ struct clk *clk;
++ struct device *dev;
++ struct clk_init_data init;
++
++ dev = &pdev->dev;
++
++ proclk = kzalloc(sizeof(struct clk_hifiberry_hw), GFP_KERNEL);
++ if (!proclk)
++ return -ENOMEM;
++
++ init.name = "clk-hifiberry-dacpro";
++ init.ops = &clk_hifiberry_dacpro_rate_ops;
++ init.flags = CLK_IS_ROOT | CLK_IS_BASIC;
++ init.parent_names = NULL;
++ init.num_parents = 0;
++
++ proclk->mode = 0;
++ proclk->hw.init = &init;
++
++ clk = devm_clk_register(dev, &proclk->hw);
++ if (!IS_ERR(clk)) {
++ ret = of_clk_add_provider(dev->of_node, of_clk_src_simple_get,
++ clk);
++ } else {
++ dev_err(dev, "Fail to register clock driver\n");
++ kfree(proclk);
++ ret = PTR_ERR(clk);
++ }
++ return ret;
++}
++
++static int clk_hifiberry_dacpro_remove(struct platform_device *pdev)
++{
++ of_clk_del_provider(pdev->dev.of_node);
++ return 0;
++}
++
++static struct platform_driver clk_hifiberry_dacpro_driver = {
++ .probe = clk_hifiberry_dacpro_probe,
++ .remove = clk_hifiberry_dacpro_remove,
++ .driver = {
++ .name = "clk-hifiberry-dacpro",
++ .of_match_table = clk_hifiberry_dacpro_dt_ids,
++ },
++};
++
++static int __init clk_hifiberry_dacpro_init(void)
++{
++ return platform_driver_register(&clk_hifiberry_dacpro_driver);
++}
++core_initcall(clk_hifiberry_dacpro_init);
++
++static void __exit clk_hifiberry_dacpro_exit(void)
++{
++ platform_driver_unregister(&clk_hifiberry_dacpro_driver);
++}
++module_exit(clk_hifiberry_dacpro_exit);
++
++MODULE_DESCRIPTION("HiFiBerry DAC Pro clock driver");
++MODULE_LICENSE("GPL v2");
++MODULE_ALIAS("platform:clk-hifiberry-dacpro");
+diff -Nur linux-4.1.10/drivers/clk/Makefile linux-rpi/drivers/clk/Makefile
+--- linux-4.1.10/drivers/clk/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/clk/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -24,6 +24,7 @@
+ obj-$(CONFIG_ARCH_CLPS711X) += clk-clps711x.o
+ obj-$(CONFIG_ARCH_EFM32) += clk-efm32gg.o
+ obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o
++obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += clk-hifiberry-dacpro.o
+ obj-$(CONFIG_MACH_LOONGSON1) += clk-ls1x.o
+ obj-$(CONFIG_COMMON_CLK_MAX_GEN) += clk-max-gen.o
+ obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o
+diff -Nur linux-4.1.10/drivers/clocksource/arm_arch_timer.c linux-rpi/drivers/clocksource/arm_arch_timer.c
+--- linux-4.1.10/drivers/clocksource/arm_arch_timer.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/clocksource/arm_arch_timer.c 2015-10-07 16:40:34.000000000 +0200
@@ -882,3 +882,39 @@
acpi_table_parse(ACPI_SIG_GTDT, arch_timer_acpi_init);
}
@@ -24244,39 +25354,9 @@ diff -Nur linux-4.1.6/drivers/clocksource/arm_arch_timer.c linux-rpi/drivers/clo
+ arch_timer_common_init();
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/cpufreq/Kconfig.arm linux-rpi/drivers/cpufreq/Kconfig.arm
---- linux-4.1.6/drivers/cpufreq/Kconfig.arm 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/cpufreq/Kconfig.arm 2015-08-26 10:26:06.445284146 +0200
-@@ -258,6 +258,15 @@
- help
- This adds the CPUFreq driver support for SPEAr SOCs.
-
-+config ARM_BCM2835_CPUFREQ
-+ depends on RASPBERRYPI_FIRMWARE
-+ bool "BCM2835 Driver"
-+ default y
-+ help
-+ This adds the CPUFreq driver for BCM2835
-+
-+ If in doubt, say N.
-+
- config ARM_TEGRA_CPUFREQ
- bool "TEGRA CPUFreq support"
- depends on ARCH_TEGRA
-diff -Nur linux-4.1.6/drivers/cpufreq/Makefile linux-rpi/drivers/cpufreq/Makefile
---- linux-4.1.6/drivers/cpufreq/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/cpufreq/Makefile 2015-08-26 10:26:06.445284146 +0200
-@@ -77,6 +77,7 @@
- obj-$(CONFIG_ARM_SA1100_CPUFREQ) += sa1100-cpufreq.o
- obj-$(CONFIG_ARM_SA1110_CPUFREQ) += sa1110-cpufreq.o
- obj-$(CONFIG_ARM_SPEAR_CPUFREQ) += spear-cpufreq.o
-+obj-$(CONFIG_ARM_BCM2835_CPUFREQ) += bcm2835-cpufreq.o
- obj-$(CONFIG_ARM_TEGRA_CPUFREQ) += tegra-cpufreq.o
- obj-$(CONFIG_ARM_VEXPRESS_SPC_CPUFREQ) += vexpress-spc-cpufreq.o
-
-diff -Nur linux-4.1.6/drivers/cpufreq/bcm2835-cpufreq.c linux-rpi/drivers/cpufreq/bcm2835-cpufreq.c
---- linux-4.1.6/drivers/cpufreq/bcm2835-cpufreq.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/cpufreq/bcm2835-cpufreq.c 2015-08-26 10:26:06.445284146 +0200
+diff -Nur linux-4.1.10/drivers/cpufreq/bcm2835-cpufreq.c linux-rpi/drivers/cpufreq/bcm2835-cpufreq.c
+--- linux-4.1.10/drivers/cpufreq/bcm2835-cpufreq.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/cpufreq/bcm2835-cpufreq.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,213 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -24491,50 +25571,39 @@ diff -Nur linux-4.1.6/drivers/cpufreq/bcm2835-cpufreq.c linux-rpi/drivers/cpufre
+
+module_init(bcm2835_cpufreq_module_init);
+module_exit(bcm2835_cpufreq_module_exit);
-diff -Nur linux-4.1.6/drivers/dma/Kconfig linux-rpi/drivers/dma/Kconfig
---- linux-4.1.6/drivers/dma/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/dma/Kconfig 2015-08-26 10:26:06.469284482 +0200
-@@ -337,6 +337,17 @@
- select DMA_ENGINE
- select DMA_VIRTUAL_CHANNELS
+diff -Nur linux-4.1.10/drivers/cpufreq/Kconfig.arm linux-rpi/drivers/cpufreq/Kconfig.arm
+--- linux-4.1.10/drivers/cpufreq/Kconfig.arm 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/cpufreq/Kconfig.arm 2015-10-07 16:40:34.000000000 +0200
+@@ -258,6 +258,15 @@
+ help
+ This adds the CPUFreq driver support for SPEAr SOCs.
-+config DMA_BCM2708
-+ tristate "BCM2708 DMA engine support"
-+ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
-+ select DMA_ENGINE
-+ select DMA_VIRTUAL_CHANNELS
-+
-+config DMA_BCM2708_LEGACY
-+ bool "BCM2708 DMA legacy API support"
-+ depends on DMA_BCM2708
++config ARM_BCM2835_CPUFREQ
++ depends on RASPBERRYPI_FIRMWARE
++ bool "BCM2835 Driver"
+ default y
++ help
++ This adds the CPUFreq driver for BCM2835
+
- config TI_CPPI41
- tristate "AM33xx CPPI41 DMA support"
- depends on ARCH_OMAP
-@@ -385,7 +396,7 @@
- select DMA_VIRTUAL_CHANNELS
- help
- Enable support for the MOXA ART SoC DMA controller.
--
++ If in doubt, say N.
+
- config FSL_EDMA
- tristate "Freescale eDMA engine support"
- depends on OF
-diff -Nur linux-4.1.6/drivers/dma/Makefile linux-rpi/drivers/dma/Makefile
---- linux-4.1.6/drivers/dma/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/dma/Makefile 2015-08-26 10:26:06.469284482 +0200
-@@ -39,6 +39,7 @@
- obj-$(CONFIG_MMP_TDMA) += mmp_tdma.o
- obj-$(CONFIG_DMA_OMAP) += omap-dma.o
- obj-$(CONFIG_DMA_BCM2835) += bcm2835-dma.o
-+obj-$(CONFIG_DMA_BCM2708) += bcm2708-dmaengine.o
- obj-$(CONFIG_MMP_PDMA) += mmp_pdma.o
- obj-$(CONFIG_DMA_JZ4740) += dma-jz4740.o
- obj-$(CONFIG_DMA_JZ4780) += dma-jz4780.o
-diff -Nur linux-4.1.6/drivers/dma/bcm2708-dmaengine.c linux-rpi/drivers/dma/bcm2708-dmaengine.c
---- linux-4.1.6/drivers/dma/bcm2708-dmaengine.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/dma/bcm2708-dmaengine.c 2015-08-26 10:26:06.473284538 +0200
+ config ARM_TEGRA_CPUFREQ
+ bool "TEGRA CPUFreq support"
+ depends on ARCH_TEGRA
+diff -Nur linux-4.1.10/drivers/cpufreq/Makefile linux-rpi/drivers/cpufreq/Makefile
+--- linux-4.1.10/drivers/cpufreq/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/cpufreq/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -77,6 +77,7 @@
+ obj-$(CONFIG_ARM_SA1100_CPUFREQ) += sa1100-cpufreq.o
+ obj-$(CONFIG_ARM_SA1110_CPUFREQ) += sa1110-cpufreq.o
+ obj-$(CONFIG_ARM_SPEAR_CPUFREQ) += spear-cpufreq.o
++obj-$(CONFIG_ARM_BCM2835_CPUFREQ) += bcm2835-cpufreq.o
+ obj-$(CONFIG_ARM_TEGRA_CPUFREQ) += tegra-cpufreq.o
+ obj-$(CONFIG_ARM_VEXPRESS_SPC_CPUFREQ) += vexpress-spc-cpufreq.o
+
+diff -Nur linux-4.1.10/drivers/dma/bcm2708-dmaengine.c linux-rpi/drivers/dma/bcm2708-dmaengine.c
+--- linux-4.1.10/drivers/dma/bcm2708-dmaengine.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/dma/bcm2708-dmaengine.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,1314 @@
+/*
+ * BCM2835 DMA engine support
@@ -25850,9 +26919,50 @@ diff -Nur linux-4.1.6/drivers/dma/bcm2708-dmaengine.c linux-rpi/drivers/dma/bcm2
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_AUTHOR("Gellert Weisz <gellert@raspberrypi.org>");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/drivers/firmware/Kconfig linux-rpi/drivers/firmware/Kconfig
---- linux-4.1.6/drivers/firmware/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/firmware/Kconfig 2015-08-26 10:26:06.493284818 +0200
+diff -Nur linux-4.1.10/drivers/dma/Kconfig linux-rpi/drivers/dma/Kconfig
+--- linux-4.1.10/drivers/dma/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/dma/Kconfig 2015-10-07 16:40:34.000000000 +0200
+@@ -337,6 +337,17 @@
+ select DMA_ENGINE
+ select DMA_VIRTUAL_CHANNELS
+
++config DMA_BCM2708
++ tristate "BCM2708 DMA engine support"
++ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
++ select DMA_ENGINE
++ select DMA_VIRTUAL_CHANNELS
++
++config DMA_BCM2708_LEGACY
++ bool "BCM2708 DMA legacy API support"
++ depends on DMA_BCM2708
++ default y
++
+ config TI_CPPI41
+ tristate "AM33xx CPPI41 DMA support"
+ depends on ARCH_OMAP
+@@ -385,7 +396,7 @@
+ select DMA_VIRTUAL_CHANNELS
+ help
+ Enable support for the MOXA ART SoC DMA controller.
+-
++
+ config FSL_EDMA
+ tristate "Freescale eDMA engine support"
+ depends on OF
+diff -Nur linux-4.1.10/drivers/dma/Makefile linux-rpi/drivers/dma/Makefile
+--- linux-4.1.10/drivers/dma/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/dma/Makefile 2015-10-07 16:40:34.000000000 +0200
+@@ -39,6 +39,7 @@
+ obj-$(CONFIG_MMP_TDMA) += mmp_tdma.o
+ obj-$(CONFIG_DMA_OMAP) += omap-dma.o
+ obj-$(CONFIG_DMA_BCM2835) += bcm2835-dma.o
++obj-$(CONFIG_DMA_BCM2708) += bcm2708-dmaengine.o
+ obj-$(CONFIG_MMP_PDMA) += mmp_pdma.o
+ obj-$(CONFIG_DMA_JZ4740) += dma-jz4740.o
+ obj-$(CONFIG_DMA_JZ4780) += dma-jz4780.o
+diff -Nur linux-4.1.10/drivers/firmware/Kconfig linux-rpi/drivers/firmware/Kconfig
+--- linux-4.1.10/drivers/firmware/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/firmware/Kconfig 2015-10-07 16:40:34.000000000 +0200
@@ -136,6 +136,13 @@
bool
depends on ARM || ARM64
@@ -25867,9 +26977,9 @@ diff -Nur linux-4.1.6/drivers/firmware/Kconfig linux-rpi/drivers/firmware/Kconfi
source "drivers/firmware/google/Kconfig"
source "drivers/firmware/efi/Kconfig"
-diff -Nur linux-4.1.6/drivers/firmware/Makefile linux-rpi/drivers/firmware/Makefile
---- linux-4.1.6/drivers/firmware/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/firmware/Makefile 2015-08-26 10:26:06.493284818 +0200
+diff -Nur linux-4.1.10/drivers/firmware/Makefile linux-rpi/drivers/firmware/Makefile
+--- linux-4.1.10/drivers/firmware/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/firmware/Makefile 2015-10-07 16:40:34.000000000 +0200
@@ -13,6 +13,7 @@
obj-$(CONFIG_FIRMWARE_MEMMAP) += memmap.o
obj-$(CONFIG_QCOM_SCM) += qcom_scm.o
@@ -25878,9 +26988,9 @@ diff -Nur linux-4.1.6/drivers/firmware/Makefile linux-rpi/drivers/firmware/Makef
obj-$(CONFIG_GOOGLE_FIRMWARE) += google/
obj-$(CONFIG_EFI) += efi/
-diff -Nur linux-4.1.6/drivers/firmware/raspberrypi.c linux-rpi/drivers/firmware/raspberrypi.c
---- linux-4.1.6/drivers/firmware/raspberrypi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/firmware/raspberrypi.c 2015-08-26 10:26:06.497284874 +0200
+diff -Nur linux-4.1.10/drivers/firmware/raspberrypi.c linux-rpi/drivers/firmware/raspberrypi.c
+--- linux-4.1.10/drivers/firmware/raspberrypi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/firmware/raspberrypi.c 2015-10-07 16:40:34.000000000 +0200
@@ -0,0 +1,297 @@
+/*
+ * Defines interfaces for interacting wtih the Raspberry Pi firmware's
@@ -26179,9 +27289,9 @@ diff -Nur linux-4.1.6/drivers/firmware/raspberrypi.c linux-rpi/drivers/firmware/
+MODULE_AUTHOR("Eric Anholt <eric@anholt.net>");
+MODULE_DESCRIPTION("Raspberry Pi firmware driver");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/drivers/hid/usbhid/hid-core.c linux-rpi/drivers/hid/usbhid/hid-core.c
---- linux-4.1.6/drivers/hid/usbhid/hid-core.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/hid/usbhid/hid-core.c 2015-08-26 10:26:06.661287169 +0200
+diff -Nur linux-4.1.10/drivers/hid/usbhid/hid-core.c linux-rpi/drivers/hid/usbhid/hid-core.c
+--- linux-4.1.10/drivers/hid/usbhid/hid-core.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/hid/usbhid/hid-core.c 2015-10-07 16:40:42.000000000 +0200
@@ -49,7 +49,7 @@
* Module parameters.
*/
@@ -26206,59 +27316,9 @@ diff -Nur linux-4.1.6/drivers/hid/usbhid/hid-core.c linux-rpi/drivers/hid/usbhid
ret = -ENOMEM;
if (usb_endpoint_dir_in(endpoint)) {
-diff -Nur linux-4.1.6/drivers/i2c/busses/Kconfig linux-rpi/drivers/i2c/busses/Kconfig
---- linux-4.1.6/drivers/i2c/busses/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/i2c/busses/Kconfig 2015-08-26 10:26:06.689287562 +0200
-@@ -8,6 +8,25 @@
- comment "PC SMBus host controller drivers"
- depends on PCI
-
-+config I2C_BCM2708
-+ tristate "BCM2708 BSC"
-+ depends on MACH_BCM2708 || MACH_BCM2709
-+ help
-+ Enabling this option will add BSC (Broadcom Serial Controller)
-+ support for the BCM2708. BSC is a Broadcom proprietary bus compatible
-+ with I2C/TWI/SMBus.
-+
-+config I2C_BCM2708_BAUDRATE
-+ prompt "BCM2708 I2C baudrate"
-+ depends on I2C_BCM2708
-+ int
-+ default 100000
-+ help
-+ Set the I2C baudrate. This will alter the default value. A
-+ different baudrate can be set by using a module parameter as well. If
-+ no parameter is provided when loading, this is the value that will be
-+ used.
-+
- config I2C_ALI1535
- tristate "ALI 1535"
- depends on PCI
-@@ -362,7 +381,7 @@
-
- config I2C_BCM2835
- tristate "Broadcom BCM2835 I2C controller"
-- depends on ARCH_BCM2835
-+ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
- help
- If you say yes to this option, support will be included for the
- BCM2835 I2C controller.
-diff -Nur linux-4.1.6/drivers/i2c/busses/Makefile linux-rpi/drivers/i2c/busses/Makefile
---- linux-4.1.6/drivers/i2c/busses/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/i2c/busses/Makefile 2015-08-26 10:26:06.689287562 +0200
-@@ -2,6 +2,8 @@
- # Makefile for the i2c bus drivers.
- #
-
-+obj-$(CONFIG_I2C_BCM2708) += i2c-bcm2708.o
-+
- # ACPI drivers
- obj-$(CONFIG_I2C_SCMI) += i2c-scmi.o
-
-diff -Nur linux-4.1.6/drivers/i2c/busses/i2c-bcm2708.c linux-rpi/drivers/i2c/busses/i2c-bcm2708.c
---- linux-4.1.6/drivers/i2c/busses/i2c-bcm2708.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/i2c/busses/i2c-bcm2708.c 2015-08-26 10:26:06.689287562 +0200
+diff -Nur linux-4.1.10/drivers/i2c/busses/i2c-bcm2708.c linux-rpi/drivers/i2c/busses/i2c-bcm2708.c
+--- linux-4.1.10/drivers/i2c/busses/i2c-bcm2708.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/i2c/busses/i2c-bcm2708.c 2015-10-07 16:40:42.000000000 +0200
@@ -0,0 +1,524 @@
+/*
+ * Driver for Broadcom BCM2708 BSC Controllers
@@ -26784,9 +27844,59 @@ diff -Nur linux-4.1.6/drivers/i2c/busses/i2c-bcm2708.c linux-rpi/drivers/i2c/bus
+MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:" DRV_NAME);
-diff -Nur linux-4.1.6/drivers/input/joystick/Kconfig linux-rpi/drivers/input/joystick/Kconfig
---- linux-4.1.6/drivers/input/joystick/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/input/joystick/Kconfig 2015-08-26 10:26:07.769302643 +0200
+diff -Nur linux-4.1.10/drivers/i2c/busses/Kconfig linux-rpi/drivers/i2c/busses/Kconfig
+--- linux-4.1.10/drivers/i2c/busses/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/i2c/busses/Kconfig 2015-10-07 16:40:42.000000000 +0200
+@@ -8,6 +8,25 @@
+ comment "PC SMBus host controller drivers"
+ depends on PCI
+
++config I2C_BCM2708
++ tristate "BCM2708 BSC"
++ depends on MACH_BCM2708 || MACH_BCM2709
++ help
++ Enabling this option will add BSC (Broadcom Serial Controller)
++ support for the BCM2708. BSC is a Broadcom proprietary bus compatible
++ with I2C/TWI/SMBus.
++
++config I2C_BCM2708_BAUDRATE
++ prompt "BCM2708 I2C baudrate"
++ depends on I2C_BCM2708
++ int
++ default 100000
++ help
++ Set the I2C baudrate. This will alter the default value. A
++ different baudrate can be set by using a module parameter as well. If
++ no parameter is provided when loading, this is the value that will be
++ used.
++
+ config I2C_ALI1535
+ tristate "ALI 1535"
+ depends on PCI
+@@ -362,7 +381,7 @@
+
+ config I2C_BCM2835
+ tristate "Broadcom BCM2835 I2C controller"
+- depends on ARCH_BCM2835
++ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
+ help
+ If you say yes to this option, support will be included for the
+ BCM2835 I2C controller.
+diff -Nur linux-4.1.10/drivers/i2c/busses/Makefile linux-rpi/drivers/i2c/busses/Makefile
+--- linux-4.1.10/drivers/i2c/busses/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/i2c/busses/Makefile 2015-10-07 16:40:42.000000000 +0200
+@@ -2,6 +2,8 @@
+ # Makefile for the i2c bus drivers.
+ #
+
++obj-$(CONFIG_I2C_BCM2708) += i2c-bcm2708.o
++
+ # ACPI drivers
+ obj-$(CONFIG_I2C_SCMI) += i2c-scmi.o
+
+diff -Nur linux-4.1.10/drivers/input/joystick/Kconfig linux-rpi/drivers/input/joystick/Kconfig
+--- linux-4.1.10/drivers/input/joystick/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/input/joystick/Kconfig 2015-10-07 16:40:42.000000000 +0200
@@ -329,4 +329,12 @@
To compile this as a module choose M here: the module will be called
maplecontrol.
@@ -26800,18 +27910,18 @@ diff -Nur linux-4.1.6/drivers/input/joystick/Kconfig linux-rpi/drivers/input/joy
+ This is the joystick driver for the Raspberry Pi Sense HAT
+
endif
-diff -Nur linux-4.1.6/drivers/input/joystick/Makefile linux-rpi/drivers/input/joystick/Makefile
---- linux-4.1.6/drivers/input/joystick/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/input/joystick/Makefile 2015-08-26 10:26:07.769302643 +0200
+diff -Nur linux-4.1.10/drivers/input/joystick/Makefile linux-rpi/drivers/input/joystick/Makefile
+--- linux-4.1.10/drivers/input/joystick/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/input/joystick/Makefile 2015-10-07 16:40:42.000000000 +0200
@@ -32,4 +32,5 @@
obj-$(CONFIG_JOYSTICK_XPAD) += xpad.o
obj-$(CONFIG_JOYSTICK_ZHENHUA) += zhenhua.o
obj-$(CONFIG_JOYSTICK_WALKERA0701) += walkera0701.o
+obj-$(CONFIG_JOYSTICK_RPISENSE) += rpisense-js.o
-diff -Nur linux-4.1.6/drivers/input/joystick/rpisense-js.c linux-rpi/drivers/input/joystick/rpisense-js.c
---- linux-4.1.6/drivers/input/joystick/rpisense-js.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/input/joystick/rpisense-js.c 2015-08-26 10:26:07.769302643 +0200
+diff -Nur linux-4.1.10/drivers/input/joystick/rpisense-js.c linux-rpi/drivers/input/joystick/rpisense-js.c
+--- linux-4.1.10/drivers/input/joystick/rpisense-js.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/input/joystick/rpisense-js.c 2015-10-07 16:40:42.000000000 +0200
@@ -0,0 +1,153 @@
+/*
+ * Raspberry Pi Sense HAT joystick driver
@@ -26966,9 +28076,9 @@ diff -Nur linux-4.1.6/drivers/input/joystick/rpisense-js.c linux-rpi/drivers/inp
+MODULE_DESCRIPTION("Raspberry Pi Sense HAT joystick driver");
+MODULE_AUTHOR("Serge Schneider <serge@raspberrypi.org>");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/drivers/input/touchscreen/Kconfig linux-rpi/drivers/input/touchscreen/Kconfig
---- linux-4.1.6/drivers/input/touchscreen/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/input/touchscreen/Kconfig 2015-08-26 10:26:07.789302922 +0200
+diff -Nur linux-4.1.10/drivers/input/touchscreen/Kconfig linux-rpi/drivers/input/touchscreen/Kconfig
+--- linux-4.1.10/drivers/input/touchscreen/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/input/touchscreen/Kconfig 2015-10-07 16:40:44.000000000 +0200
@@ -583,6 +583,13 @@
To compile this driver as a module, choose M here: the
module will be called edt-ft5x06.
@@ -26983,9 +28093,9 @@ diff -Nur linux-4.1.6/drivers/input/touchscreen/Kconfig linux-rpi/drivers/input/
config TOUCHSCREEN_MIGOR
tristate "Renesas MIGO-R touchscreen"
depends on SH_MIGOR && I2C
-diff -Nur linux-4.1.6/drivers/input/touchscreen/Makefile linux-rpi/drivers/input/touchscreen/Makefile
---- linux-4.1.6/drivers/input/touchscreen/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/input/touchscreen/Makefile 2015-08-26 10:26:07.789302922 +0200
+diff -Nur linux-4.1.10/drivers/input/touchscreen/Makefile linux-rpi/drivers/input/touchscreen/Makefile
+--- linux-4.1.10/drivers/input/touchscreen/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/input/touchscreen/Makefile 2015-10-07 16:40:44.000000000 +0200
@@ -29,6 +29,7 @@
obj-$(CONFIG_TOUCHSCREEN_DA9052) += da9052_tsi.o
obj-$(CONFIG_TOUCHSCREEN_DYNAPRO) += dynapro.o
@@ -26994,9 +28104,9 @@ diff -Nur linux-4.1.6/drivers/input/touchscreen/Makefile linux-rpi/drivers/input
obj-$(CONFIG_TOUCHSCREEN_HAMPSHIRE) += hampshire.o
obj-$(CONFIG_TOUCHSCREEN_GUNZE) += gunze.o
obj-$(CONFIG_TOUCHSCREEN_EETI) += eeti_ts.o
-diff -Nur linux-4.1.6/drivers/input/touchscreen/rpi-ft5406.c linux-rpi/drivers/input/touchscreen/rpi-ft5406.c
---- linux-4.1.6/drivers/input/touchscreen/rpi-ft5406.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/input/touchscreen/rpi-ft5406.c 2015-08-26 10:26:07.793302977 +0200
+diff -Nur linux-4.1.10/drivers/input/touchscreen/rpi-ft5406.c linux-rpi/drivers/input/touchscreen/rpi-ft5406.c
+--- linux-4.1.10/drivers/input/touchscreen/rpi-ft5406.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/input/touchscreen/rpi-ft5406.c 2015-10-07 16:40:44.000000000 +0200
@@ -0,0 +1,246 @@
+/*
+ * Driver for memory based ft5406 touchscreen
@@ -27244,9 +28354,9 @@ diff -Nur linux-4.1.6/drivers/input/touchscreen/rpi-ft5406.c linux-rpi/drivers/i
+MODULE_AUTHOR("Gordon Hollingworth");
+MODULE_DESCRIPTION("Touchscreen driver for memory based FT5406");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/drivers/irqchip/irq-bcm2835.c linux-rpi/drivers/irqchip/irq-bcm2835.c
---- linux-4.1.6/drivers/irqchip/irq-bcm2835.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/irqchip/irq-bcm2835.c 2015-08-26 10:26:07.805303145 +0200
+diff -Nur linux-4.1.10/drivers/irqchip/irq-bcm2835.c linux-rpi/drivers/irqchip/irq-bcm2835.c
+--- linux-4.1.10/drivers/irqchip/irq-bcm2835.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/irqchip/irq-bcm2835.c 2015-10-07 16:40:44.000000000 +0200
@@ -56,7 +56,7 @@
#include "irqchip.h"
@@ -27345,9 +28455,9 @@ diff -Nur linux-4.1.6/drivers/irqchip/irq-bcm2835.c linux-rpi/drivers/irqchip/ir
return 0;
}
-diff -Nur linux-4.1.6/drivers/leds/leds-gpio.c linux-rpi/drivers/leds/leds-gpio.c
---- linux-4.1.6/drivers/leds/leds-gpio.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/leds/leds-gpio.c 2015-08-26 10:26:07.841303647 +0200
+diff -Nur linux-4.1.10/drivers/leds/leds-gpio.c linux-rpi/drivers/leds/leds-gpio.c
+--- linux-4.1.10/drivers/leds/leds-gpio.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/leds/leds-gpio.c 2015-10-07 16:40:44.000000000 +0200
@@ -41,6 +41,13 @@
led_dat->platform_gpio_blink_set(led_dat->gpiod,
led_dat->new_level, NULL, NULL);
@@ -27394,9 +28504,9 @@ diff -Nur linux-4.1.6/drivers/leds/leds-gpio.c linux-rpi/drivers/leds/leds-gpio.
if (template->default_state == LEDS_GPIO_DEFSTATE_KEEP)
state = !!gpiod_get_value_cansleep(led_dat->gpiod);
else
-diff -Nur linux-4.1.6/drivers/leds/trigger/Kconfig linux-rpi/drivers/leds/trigger/Kconfig
---- linux-4.1.6/drivers/leds/trigger/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/leds/trigger/Kconfig 2015-08-26 10:26:07.845303703 +0200
+diff -Nur linux-4.1.10/drivers/leds/trigger/Kconfig linux-rpi/drivers/leds/trigger/Kconfig
+--- linux-4.1.10/drivers/leds/trigger/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/leds/trigger/Kconfig 2015-10-07 16:40:44.000000000 +0200
@@ -108,4 +108,11 @@
This enables direct flash/torch on/off by the driver, kernel space.
If unsure, say Y.
@@ -27409,17 +28519,9 @@ diff -Nur linux-4.1.6/drivers/leds/trigger/Kconfig linux-rpi/drivers/leds/trigge
+ If unsure, say Y.
+
endif # LEDS_TRIGGERS
-diff -Nur linux-4.1.6/drivers/leds/trigger/Makefile linux-rpi/drivers/leds/trigger/Makefile
---- linux-4.1.6/drivers/leds/trigger/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/leds/trigger/Makefile 2015-08-26 10:26:07.845303703 +0200
-@@ -8,3 +8,4 @@
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
- obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT) += ledtrig-transient.o
- obj-$(CONFIG_LEDS_TRIGGER_CAMERA) += ledtrig-camera.o
-+obj-$(CONFIG_LEDS_TRIGGER_INPUT) += ledtrig-input.o
-diff -Nur linux-4.1.6/drivers/leds/trigger/ledtrig-input.c linux-rpi/drivers/leds/trigger/ledtrig-input.c
---- linux-4.1.6/drivers/leds/trigger/ledtrig-input.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/leds/trigger/ledtrig-input.c 2015-08-26 10:26:07.845303703 +0200
+diff -Nur linux-4.1.10/drivers/leds/trigger/ledtrig-input.c linux-rpi/drivers/leds/trigger/ledtrig-input.c
+--- linux-4.1.10/drivers/leds/trigger/ledtrig-input.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/leds/trigger/ledtrig-input.c 2015-10-07 16:40:44.000000000 +0200
@@ -0,0 +1,54 @@
+/*
+ * Set LED GPIO to Input "Trigger"
@@ -27475,35 +28577,17 @@ diff -Nur linux-4.1.6/drivers/leds/trigger/ledtrig-input.c linux-rpi/drivers/led
+MODULE_AUTHOR("Phil Elwell <phil@raspberrypi.org>");
+MODULE_DESCRIPTION("Set LED GPIO to Input \"trigger\"");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/drivers/mailbox/Kconfig linux-rpi/drivers/mailbox/Kconfig
---- linux-4.1.6/drivers/mailbox/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mailbox/Kconfig 2015-08-26 10:26:07.849303759 +0200
-@@ -60,4 +60,13 @@
- An implementation of the Altera Mailbox soft core. It is used
- to send message between processors. Say Y here if you want to use the
- Altera mailbox support.
-+
-+config BCM2835_MBOX
-+ tristate "BCM2835 Mailbox"
-+ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
-+ help
-+ An implementation of the BCM2385 Mailbox. It is used to invoke
-+ the services of the Videocore. Say Y here if you want to use the
-+ BCM2835 Mailbox.
-+
- endif
-diff -Nur linux-4.1.6/drivers/mailbox/Makefile linux-rpi/drivers/mailbox/Makefile
---- linux-4.1.6/drivers/mailbox/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mailbox/Makefile 2015-08-26 10:26:07.849303759 +0200
-@@ -11,3 +11,5 @@
- obj-$(CONFIG_PCC) += pcc.o
-
- obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o
-+
-+obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o
-diff -Nur linux-4.1.6/drivers/mailbox/bcm2835-mailbox.c linux-rpi/drivers/mailbox/bcm2835-mailbox.c
---- linux-4.1.6/drivers/mailbox/bcm2835-mailbox.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/mailbox/bcm2835-mailbox.c 2015-08-26 10:26:07.849303759 +0200
+diff -Nur linux-4.1.10/drivers/leds/trigger/Makefile linux-rpi/drivers/leds/trigger/Makefile
+--- linux-4.1.10/drivers/leds/trigger/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/leds/trigger/Makefile 2015-10-07 16:40:44.000000000 +0200
+@@ -8,3 +8,4 @@
+ obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
+ obj-$(CONFIG_LEDS_TRIGGER_TRANSIENT) += ledtrig-transient.o
+ obj-$(CONFIG_LEDS_TRIGGER_CAMERA) += ledtrig-camera.o
++obj-$(CONFIG_LEDS_TRIGGER_INPUT) += ledtrig-input.o
+diff -Nur linux-4.1.10/drivers/mailbox/bcm2835-mailbox.c linux-rpi/drivers/mailbox/bcm2835-mailbox.c
+--- linux-4.1.10/drivers/mailbox/bcm2835-mailbox.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/mailbox/bcm2835-mailbox.c 2015-10-07 16:40:44.000000000 +0200
@@ -0,0 +1,231 @@
+/*
+ * Copyright (C) 2010,2015 Broadcom
@@ -27736,9 +28820,26 @@ diff -Nur linux-4.1.6/drivers/mailbox/bcm2835-mailbox.c linux-rpi/drivers/mailbo
+MODULE_AUTHOR("Lubomir Rintel <lkundrak@v3.sk>");
+MODULE_DESCRIPTION("BCM2835 mailbox IPC driver");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/drivers/mailbox/mailbox.c linux-rpi/drivers/mailbox/mailbox.c
---- linux-4.1.6/drivers/mailbox/mailbox.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mailbox/mailbox.c 2015-08-26 10:26:07.853303814 +0200
+diff -Nur linux-4.1.10/drivers/mailbox/Kconfig linux-rpi/drivers/mailbox/Kconfig
+--- linux-4.1.10/drivers/mailbox/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mailbox/Kconfig 2015-10-07 16:40:44.000000000 +0200
+@@ -60,4 +60,13 @@
+ An implementation of the Altera Mailbox soft core. It is used
+ to send message between processors. Say Y here if you want to use the
+ Altera mailbox support.
++
++config BCM2835_MBOX
++ tristate "BCM2835 Mailbox"
++ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
++ help
++ An implementation of the BCM2385 Mailbox. It is used to invoke
++ the services of the Videocore. Say Y here if you want to use the
++ BCM2835 Mailbox.
++
+ endif
+diff -Nur linux-4.1.10/drivers/mailbox/mailbox.c linux-rpi/drivers/mailbox/mailbox.c
+--- linux-4.1.10/drivers/mailbox/mailbox.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mailbox/mailbox.c 2015-10-07 16:40:44.000000000 +0200
@@ -304,13 +304,23 @@
unsigned long flags;
int ret;
@@ -27772,71 +28873,18 @@ diff -Nur linux-4.1.6/drivers/mailbox/mailbox.c linux-rpi/drivers/mailbox/mailbo
if (!chan || chan->cl || !try_module_get(mbox->dev->driver->owner)) {
dev_dbg(dev, "%s: mailbox not free\n", __func__);
mutex_unlock(&con_mutex);
-diff -Nur linux-4.1.6/drivers/media/platform/Kconfig linux-rpi/drivers/media/platform/Kconfig
---- linux-4.1.6/drivers/media/platform/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/media/platform/Kconfig 2015-08-26 10:26:08.025306213 +0200
-@@ -11,6 +11,8 @@
-
- if V4L_PLATFORM_DRIVERS
-
-+source "drivers/media/platform/bcm2835/Kconfig"
-+
- source "drivers/media/platform/marvell-ccic/Kconfig"
-
- config VIDEO_VIA_CAMERA
-diff -Nur linux-4.1.6/drivers/media/platform/Makefile linux-rpi/drivers/media/platform/Makefile
---- linux-4.1.6/drivers/media/platform/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/media/platform/Makefile 2015-08-26 10:26:08.025306213 +0200
-@@ -2,6 +2,8 @@
- # Makefile for the video capture/playback device drivers.
- #
-
-+obj-$(CONFIG_VIDEO_BCM2835) += bcm2835/
-+
- obj-$(CONFIG_VIDEO_TIMBERDALE) += timblogiw.o
- obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o
+diff -Nur linux-4.1.10/drivers/mailbox/Makefile linux-rpi/drivers/mailbox/Makefile
+--- linux-4.1.10/drivers/mailbox/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mailbox/Makefile 2015-10-07 16:40:44.000000000 +0200
+@@ -11,3 +11,5 @@
+ obj-$(CONFIG_PCC) += pcc.o
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/Kconfig linux-rpi/drivers/media/platform/bcm2835/Kconfig
---- linux-4.1.6/drivers/media/platform/bcm2835/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/Kconfig 2015-08-26 10:26:08.025306213 +0200
-@@ -0,0 +1,25 @@
-+# Broadcom VideoCore IV v4l2 camera support
-+
-+config VIDEO_BCM2835
-+ bool "Broadcom BCM2835 camera interface driver"
-+ depends on VIDEO_V4L2 && (ARCH_BCM2708 || ARCH_BCM2709 || ARCH_BCM2835)
-+ ---help---
-+ Say Y here to enable camera host interface devices for
-+ Broadcom BCM2835 SoC. This operates over the VCHIQ interface
-+ to a service running on VideoCore.
-+
-+
-+if VIDEO_BCM2835
-+
-+config VIDEO_BCM2835_MMAL
-+ tristate "Broadcom BM2835 MMAL camera interface driver"
-+ depends on BCM2708_VCHIQ
-+ select VIDEOBUF2_VMALLOC
-+ ---help---
-+ This is a V4L2 driver for the Broadcom BCM2835 MMAL camera host interface
-+
-+ To compile this driver as a module, choose M here: the
-+ module will be called bcm2835-v4l2.o
-+
-+
-+endif # VIDEO_BM2835
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/Makefile linux-rpi/drivers/media/platform/bcm2835/Makefile
---- linux-4.1.6/drivers/media/platform/bcm2835/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/Makefile 2015-08-26 10:26:08.025306213 +0200
-@@ -0,0 +1,5 @@
-+bcm2835-v4l2-objs := bcm2835-camera.o controls.o mmal-vchiq.o
-+
-+obj-$(CONFIG_VIDEO_BCM2835_MMAL) += bcm2835-v4l2.o
+ obj-$(CONFIG_ALTERA_MBOX) += mailbox-altera.o
+
-+ccflags-$(CONFIG_VIDEO_BCM2835) += -Idrivers/misc/vc04_services -Idrivers/misc/vc04_services/interface/vcos/linuxkernel -D__VCCOREVER__=0x04000000
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.c linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.c
---- linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.c 2015-08-26 10:26:08.025306213 +0200
++obj-$(CONFIG_BCM2835_MBOX) += bcm2835-mailbox.o
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/bcm2835-camera.c linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.c
+--- linux-4.1.10/drivers/media/platform/bcm2835/bcm2835-camera.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,1842 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -29680,9 +30728,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.c linux-rpi/
+
+module_init(bm2835_mmal_init);
+module_exit(bm2835_mmal_exit);
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.h linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.h
---- linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/bcm2835-camera.h linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/bcm2835-camera.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/bcm2835-camera.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,126 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -29810,10 +30858,10 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/bcm2835-camera.h linux-rpi/
+ (pix_fmt)->pixelformat, (pix_fmt)->bytesperline, \
+ (pix_fmt)->sizeimage, (pix_fmt)->colorspace, (pix_fmt)->priv); \
+}
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/controls.c linux-rpi/drivers/media/platform/bcm2835/controls.c
---- linux-4.1.6/drivers/media/platform/bcm2835/controls.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/controls.c 2015-08-26 10:26:08.025306213 +0200
-@@ -0,0 +1,1322 @@
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/controls.c linux-rpi/drivers/media/platform/bcm2835/controls.c
+--- linux-4.1.10/drivers/media/platform/bcm2835/controls.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/controls.c 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,1324 @@
+/*
+ * Broadcom BM2835 V4L2 driver
+ *
@@ -30661,6 +31709,8 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/controls.c linux-rpi/driver
+ break;
+ }
+ }
++ if (!scene)
++ return -EINVAL;
+ if (i >= ARRAY_SIZE(scene_configs))
+ return -EINVAL;
+
@@ -31136,9 +32186,47 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/controls.c linux-rpi/driver
+
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-common.h linux-rpi/drivers/media/platform/bcm2835/mmal-common.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-common.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/Kconfig linux-rpi/drivers/media/platform/bcm2835/Kconfig
+--- linux-4.1.10/drivers/media/platform/bcm2835/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/Kconfig 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,25 @@
++# Broadcom VideoCore IV v4l2 camera support
++
++config VIDEO_BCM2835
++ bool "Broadcom BCM2835 camera interface driver"
++ depends on VIDEO_V4L2 && (ARCH_BCM2708 || ARCH_BCM2709 || ARCH_BCM2835)
++ ---help---
++ Say Y here to enable camera host interface devices for
++ Broadcom BCM2835 SoC. This operates over the VCHIQ interface
++ to a service running on VideoCore.
++
++
++if VIDEO_BCM2835
++
++config VIDEO_BCM2835_MMAL
++ tristate "Broadcom BM2835 MMAL camera interface driver"
++ depends on BCM2708_VCHIQ
++ select VIDEOBUF2_VMALLOC
++ ---help---
++ This is a V4L2 driver for the Broadcom BCM2835 MMAL camera host interface
++
++ To compile this driver as a module, choose M here: the
++ module will be called bcm2835-v4l2.o
++
++
++endif # VIDEO_BM2835
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/Makefile linux-rpi/drivers/media/platform/bcm2835/Makefile
+--- linux-4.1.10/drivers/media/platform/bcm2835/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/Makefile 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,5 @@
++bcm2835-v4l2-objs := bcm2835-camera.o controls.o mmal-vchiq.o
++
++obj-$(CONFIG_VIDEO_BCM2835_MMAL) += bcm2835-v4l2.o
++
++ccflags-$(CONFIG_VIDEO_BCM2835) += -Idrivers/misc/vc04_services -Idrivers/misc/vc04_services/interface/vcos/linuxkernel -D__VCCOREVER__=0x04000000
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-common.h linux-rpi/drivers/media/platform/bcm2835/mmal-common.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-common.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,53 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -31193,9 +32281,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-common.h linux-rpi/dri
+ u32 u;
+ u32 v;
+};
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-encodings.h linux-rpi/drivers/media/platform/bcm2835/mmal-encodings.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-encodings.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-encodings.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-encodings.h linux-rpi/drivers/media/platform/bcm2835/mmal-encodings.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-encodings.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-encodings.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -31324,9 +32412,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-encodings.h linux-rpi/
+/* @} MmalColorSpace List */
+
+#endif /* MMAL_ENCODINGS_H */
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-common.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-common.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-common.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-common.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-common.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-common.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,50 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -31378,9 +32466,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-common.h linux-rpi
+};
+
+#endif /* MMAL_MSG_COMMON_H */
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-format.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-format.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-format.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-format.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-format.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-format.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-format.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-format.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,81 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -31463,120 +32551,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-format.h linux-rpi
+};
+
+#endif /* MMAL_MSG_FORMAT_H */
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-port.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-port.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg-port.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-port.h 2015-08-26 10:26:08.025306213 +0200
-@@ -0,0 +1,107 @@
-+/*
-+ * Broadcom BM2835 V4L2 driver
-+ *
-+ * Copyright © 2013 Raspberry Pi (Trading) Ltd.
-+ *
-+ * 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.
-+ *
-+ * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
-+ * Dave Stevenson <dsteve@broadcom.com>
-+ * Simon Mellor <simellor@broadcom.com>
-+ * Luke Diamand <luked@broadcom.com>
-+ */
-+
-+/* MMAL_PORT_TYPE_T */
-+enum mmal_port_type {
-+ MMAL_PORT_TYPE_UNKNOWN = 0, /**< Unknown port type */
-+ MMAL_PORT_TYPE_CONTROL, /**< Control port */
-+ MMAL_PORT_TYPE_INPUT, /**< Input port */
-+ MMAL_PORT_TYPE_OUTPUT, /**< Output port */
-+ MMAL_PORT_TYPE_CLOCK, /**< Clock port */
-+};
-+
-+/** The port is pass-through and doesn't need buffer headers allocated */
-+#define MMAL_PORT_CAPABILITY_PASSTHROUGH 0x01
-+/** The port wants to allocate the buffer payloads.
-+ * This signals a preference that payload allocation should be done
-+ * on this port for efficiency reasons. */
-+#define MMAL_PORT_CAPABILITY_ALLOCATION 0x02
-+/** The port supports format change events.
-+ * This applies to input ports and is used to let the client know
-+ * whether the port supports being reconfigured via a format
-+ * change event (i.e. without having to disable the port). */
-+#define MMAL_PORT_CAPABILITY_SUPPORTS_EVENT_FORMAT_CHANGE 0x04
-+
-+/* mmal port structure (MMAL_PORT_T)
-+ *
-+ * most elements are informational only, the pointer values for
-+ * interogation messages are generally provided as additional
-+ * strucures within the message. When used to set values only teh
-+ * buffer_num, buffer_size and userdata parameters are writable.
-+ */
-+struct mmal_port {
-+ void *priv; /* Private member used by the framework */
-+ const char *name; /* Port name. Used for debugging purposes (RO) */
-+
-+ u32 type; /* Type of the port (RO) enum mmal_port_type */
-+ u16 index; /* Index of the port in its type list (RO) */
-+ u16 index_all; /* Index of the port in the list of all ports (RO) */
-+
-+ u32 is_enabled; /* Indicates whether the port is enabled or not (RO) */
-+ struct mmal_es_format *format; /* Format of the elementary stream */
-+
-+ u32 buffer_num_min; /* Minimum number of buffers the port
-+ * requires (RO). This is set by the
-+ * component.
-+ */
-+
-+ u32 buffer_size_min; /* Minimum size of buffers the port
-+ * requires (RO). This is set by the
-+ * component.
-+ */
-+
-+ u32 buffer_alignment_min; /* Minimum alignment requirement for
-+ * the buffers (RO). A value of
-+ * zero means no special alignment
-+ * requirements. This is set by the
-+ * component.
-+ */
-+
-+ u32 buffer_num_recommended; /* Number of buffers the port
-+ * recommends for optimal
-+ * performance (RO). A value of
-+ * zero means no special
-+ * recommendation. This is set
-+ * by the component.
-+ */
-+
-+ u32 buffer_size_recommended; /* Size of buffers the port
-+ * recommends for optimal
-+ * performance (RO). A value of
-+ * zero means no special
-+ * recommendation. This is set
-+ * by the component.
-+ */
-+
-+ u32 buffer_num; /* Actual number of buffers the port will use.
-+ * This is set by the client.
-+ */
-+
-+ u32 buffer_size; /* Actual maximum size of the buffers that
-+ * will be sent to the port. This is set by
-+ * the client.
-+ */
-+
-+ void *component; /* Component this port belongs to (Read Only) */
-+
-+ void *userdata; /* Field reserved for use by the client */
-+
-+ u32 capabilities; /* Flags describing the capabilities of a
-+ * port (RO). Bitwise combination of \ref
-+ * portcapabilities "Port capabilities"
-+ * values.
-+ */
-+
-+};
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,404 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -31982,9 +32959,120 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-msg.h linux-rpi/driver
+ u8 payload[MMAL_MSG_MAX_PAYLOAD];
+ } u;
+};
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-parameters.h linux-rpi/drivers/media/platform/bcm2835/mmal-parameters.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-parameters.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-parameters.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-port.h linux-rpi/drivers/media/platform/bcm2835/mmal-msg-port.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-msg-port.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-msg-port.h 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,107 @@
++/*
++ * Broadcom BM2835 V4L2 driver
++ *
++ * Copyright © 2013 Raspberry Pi (Trading) Ltd.
++ *
++ * 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.
++ *
++ * Authors: Vincent Sanders <vincent.sanders@collabora.co.uk>
++ * Dave Stevenson <dsteve@broadcom.com>
++ * Simon Mellor <simellor@broadcom.com>
++ * Luke Diamand <luked@broadcom.com>
++ */
++
++/* MMAL_PORT_TYPE_T */
++enum mmal_port_type {
++ MMAL_PORT_TYPE_UNKNOWN = 0, /**< Unknown port type */
++ MMAL_PORT_TYPE_CONTROL, /**< Control port */
++ MMAL_PORT_TYPE_INPUT, /**< Input port */
++ MMAL_PORT_TYPE_OUTPUT, /**< Output port */
++ MMAL_PORT_TYPE_CLOCK, /**< Clock port */
++};
++
++/** The port is pass-through and doesn't need buffer headers allocated */
++#define MMAL_PORT_CAPABILITY_PASSTHROUGH 0x01
++/** The port wants to allocate the buffer payloads.
++ * This signals a preference that payload allocation should be done
++ * on this port for efficiency reasons. */
++#define MMAL_PORT_CAPABILITY_ALLOCATION 0x02
++/** The port supports format change events.
++ * This applies to input ports and is used to let the client know
++ * whether the port supports being reconfigured via a format
++ * change event (i.e. without having to disable the port). */
++#define MMAL_PORT_CAPABILITY_SUPPORTS_EVENT_FORMAT_CHANGE 0x04
++
++/* mmal port structure (MMAL_PORT_T)
++ *
++ * most elements are informational only, the pointer values for
++ * interogation messages are generally provided as additional
++ * strucures within the message. When used to set values only teh
++ * buffer_num, buffer_size and userdata parameters are writable.
++ */
++struct mmal_port {
++ void *priv; /* Private member used by the framework */
++ const char *name; /* Port name. Used for debugging purposes (RO) */
++
++ u32 type; /* Type of the port (RO) enum mmal_port_type */
++ u16 index; /* Index of the port in its type list (RO) */
++ u16 index_all; /* Index of the port in the list of all ports (RO) */
++
++ u32 is_enabled; /* Indicates whether the port is enabled or not (RO) */
++ struct mmal_es_format *format; /* Format of the elementary stream */
++
++ u32 buffer_num_min; /* Minimum number of buffers the port
++ * requires (RO). This is set by the
++ * component.
++ */
++
++ u32 buffer_size_min; /* Minimum size of buffers the port
++ * requires (RO). This is set by the
++ * component.
++ */
++
++ u32 buffer_alignment_min; /* Minimum alignment requirement for
++ * the buffers (RO). A value of
++ * zero means no special alignment
++ * requirements. This is set by the
++ * component.
++ */
++
++ u32 buffer_num_recommended; /* Number of buffers the port
++ * recommends for optimal
++ * performance (RO). A value of
++ * zero means no special
++ * recommendation. This is set
++ * by the component.
++ */
++
++ u32 buffer_size_recommended; /* Size of buffers the port
++ * recommends for optimal
++ * performance (RO). A value of
++ * zero means no special
++ * recommendation. This is set
++ * by the component.
++ */
++
++ u32 buffer_num; /* Actual number of buffers the port will use.
++ * This is set by the client.
++ */
++
++ u32 buffer_size; /* Actual maximum size of the buffers that
++ * will be sent to the port. This is set by
++ * the client.
++ */
++
++ void *component; /* Component this port belongs to (Read Only) */
++
++ void *userdata; /* Field reserved for use by the client */
++
++ u32 capabilities; /* Flags describing the capabilities of a
++ * port (RO). Bitwise combination of \ref
++ * portcapabilities "Port capabilities"
++ * values.
++ */
++
++};
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-parameters.h linux-rpi/drivers/media/platform/bcm2835/mmal-parameters.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-parameters.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-parameters.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,656 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -32642,9 +33730,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-parameters.h linux-rpi
+ u32 num_effect_params;
+ u32 effect_parameter[MMAL_MAX_IMAGEFX_PARAMETERS];
+};
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.c linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.c
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.c 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-vchiq.c linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.c
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-vchiq.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,1916 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -33499,7 +34587,7 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.c linux-rpi/driv
+ sizeof(union mmal_es_specific_format));
+
+ m.u.port_info_set.format.extradata_size = port->format.extradata_size;
-+ memcpy(rmsg->u.port_info_set.extradata, port->format.extradata,
++ memcpy(&m.u.port_info_set.extradata, port->format.extradata,
+ port->format.extradata_size);
+
+ ret = send_synchronous_mmal_msg(instance, &m,
@@ -34562,9 +35650,9 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.c linux-rpi/driv
+ kfree(instance);
+ return -ENODEV;
+}
-diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.h linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.h
---- linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.h 2015-08-26 10:26:08.025306213 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/bcm2835/mmal-vchiq.h linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.h
+--- linux-4.1.10/drivers/media/platform/bcm2835/mmal-vchiq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/media/platform/bcm2835/mmal-vchiq.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,178 @@
+/*
+ * Broadcom BM2835 V4L2 driver
@@ -34744,9 +35832,33 @@ diff -Nur linux-4.1.6/drivers/media/platform/bcm2835/mmal-vchiq.h linux-rpi/driv
+ struct mmal_buffer *buf);
+
+#endif /* MMAL_VCHIQ_H */
-diff -Nur linux-4.1.6/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-rpi/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
---- linux-4.1.6/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2015-08-26 10:26:08.213308826 +0200
+diff -Nur linux-4.1.10/drivers/media/platform/Kconfig linux-rpi/drivers/media/platform/Kconfig
+--- linux-4.1.10/drivers/media/platform/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/media/platform/Kconfig 2015-10-07 16:40:46.000000000 +0200
+@@ -11,6 +11,8 @@
+
+ if V4L_PLATFORM_DRIVERS
+
++source "drivers/media/platform/bcm2835/Kconfig"
++
+ source "drivers/media/platform/marvell-ccic/Kconfig"
+
+ config VIDEO_VIA_CAMERA
+diff -Nur linux-4.1.10/drivers/media/platform/Makefile linux-rpi/drivers/media/platform/Makefile
+--- linux-4.1.10/drivers/media/platform/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/media/platform/Makefile 2015-10-07 16:40:46.000000000 +0200
+@@ -2,6 +2,8 @@
+ # Makefile for the video capture/playback device drivers.
+ #
+
++obj-$(CONFIG_VIDEO_BCM2835) += bcm2835/
++
+ obj-$(CONFIG_VIDEO_TIMBERDALE) += timblogiw.o
+ obj-$(CONFIG_VIDEO_M32R_AR_M64278) += arv.o
+
+diff -Nur linux-4.1.10/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-rpi/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
+--- linux-4.1.10/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/media/usb/dvb-usb-v2/rtl28xxu.c 2015-10-07 16:40:46.000000000 +0200
@@ -1744,6 +1744,10 @@
&rtl28xxu_props, "Compro VideoMate U620F", NULL) },
{ DVB_USB_DEVICE(USB_VID_KWORLD_2, 0xd394,
@@ -34758,9 +35870,9 @@ diff -Nur linux-4.1.6/drivers/media/usb/dvb-usb-v2/rtl28xxu.c linux-rpi/drivers/
{ DVB_USB_DEVICE(USB_VID_LEADTEK, 0x6a03,
&rtl28xxu_props, "Leadtek WinFast DTV Dongle mini", NULL) },
{ DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_CPYTO_REDI_PC50A,
-diff -Nur linux-4.1.6/drivers/mfd/Kconfig linux-rpi/drivers/mfd/Kconfig
---- linux-4.1.6/drivers/mfd/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mfd/Kconfig 2015-08-26 10:26:08.269309603 +0200
+diff -Nur linux-4.1.10/drivers/mfd/Kconfig linux-rpi/drivers/mfd/Kconfig
+--- linux-4.1.10/drivers/mfd/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mfd/Kconfig 2015-10-07 16:40:46.000000000 +0200
@@ -10,6 +10,14 @@
select IRQ_DOMAIN
default n
@@ -34776,18 +35888,18 @@ diff -Nur linux-4.1.6/drivers/mfd/Kconfig linux-rpi/drivers/mfd/Kconfig
config MFD_CS5535
tristate "AMD CS5535 and CS5536 southbridge core functions"
select MFD_CORE
-diff -Nur linux-4.1.6/drivers/mfd/Makefile linux-rpi/drivers/mfd/Makefile
---- linux-4.1.6/drivers/mfd/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mfd/Makefile 2015-08-26 10:26:08.269309603 +0200
+diff -Nur linux-4.1.10/drivers/mfd/Makefile linux-rpi/drivers/mfd/Makefile
+--- linux-4.1.10/drivers/mfd/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mfd/Makefile 2015-10-07 16:40:46.000000000 +0200
@@ -185,3 +185,5 @@
intel-soc-pmic-objs := intel_soc_pmic_core.o intel_soc_pmic_crc.o
obj-$(CONFIG_INTEL_SOC_PMIC) += intel-soc-pmic.o
obj-$(CONFIG_MFD_MT6397) += mt6397-core.o
+
+obj-$(CONFIG_MFD_RPISENSE_CORE) += rpisense-core.o
-diff -Nur linux-4.1.6/drivers/mfd/rpisense-core.c linux-rpi/drivers/mfd/rpisense-core.c
---- linux-4.1.6/drivers/mfd/rpisense-core.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/mfd/rpisense-core.c 2015-08-26 10:26:08.277309715 +0200
+diff -Nur linux-4.1.10/drivers/mfd/rpisense-core.c linux-rpi/drivers/mfd/rpisense-core.c
+--- linux-4.1.10/drivers/mfd/rpisense-core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/mfd/rpisense-core.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,157 @@
+/*
+ * Raspberry Pi Sense HAT core driver
@@ -34946,10 +36058,1014 @@ diff -Nur linux-4.1.6/drivers/mfd/rpisense-core.c linux-rpi/drivers/mfd/rpisense
+MODULE_AUTHOR("Serge Schneider <serge@raspberrypi.org>");
+MODULE_LICENSE("GPL");
+
-diff -Nur linux-4.1.6/drivers/misc/Kconfig linux-rpi/drivers/misc/Kconfig
---- linux-4.1.6/drivers/misc/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/misc/Kconfig 2015-08-26 10:26:08.285309826 +0200
-@@ -524,6 +524,7 @@
+diff -Nur linux-4.1.10/drivers/misc/bcm2835_smi.c linux-rpi/drivers/misc/bcm2835_smi.c
+--- linux-4.1.10/drivers/misc/bcm2835_smi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/bcm2835_smi.c 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,985 @@
++/**
++ * Broadcom Secondary Memory Interface driver
++ *
++ * Written by Luke Wren <luke@raspberrypi.org>
++ * Copyright (c) 2015, Raspberry Pi (Trading) Ltd.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of.h>
++#include <linux/platform_device.h>
++#include <linux/of_address.h>
++#include <linux/of_platform.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/pagemap.h>
++#include <linux/dma-mapping.h>
++#include <linux/dmaengine.h>
++#include <linux/semaphore.h>
++#include <linux/spinlock.h>
++#include <linux/io.h>
++
++#define BCM2835_SMI_IMPLEMENTATION
++#include <linux/broadcom/bcm2835_smi.h>
++
++#define DRIVER_NAME "smi-bcm2835"
++
++#define N_PAGES_FROM_BYTES(n) ((n + PAGE_SIZE-1) / PAGE_SIZE)
++
++#define DMA_WRITE_TO_MEM true
++#define DMA_READ_FROM_MEM false
++
++struct bcm2835_smi_instance {
++ struct device *dev;
++ struct smi_settings settings;
++ __iomem void *smi_regs_ptr, *cm_smi_regs_ptr;
++ dma_addr_t smi_regs_busaddr;
++
++ struct dma_chan *dma_chan;
++ struct dma_slave_config dma_config;
++
++ struct bcm2835_smi_bounce_info bounce;
++
++ struct scatterlist buffer_sgl;
++
++ int clock_source;
++ int clock_divisor;
++
++ /* Sometimes we are called into in an atomic context (e.g. by
++ JFFS2 + MTD) so we can't use a mutex */
++ spinlock_t transaction_lock;
++};
++
++/****************************************************************************
++*
++* SMI clock manager setup
++*
++***************************************************************************/
++
++static inline void write_smi_cm_reg(struct bcm2835_smi_instance *inst,
++ u32 val, unsigned reg)
++{
++ writel(CM_PWD | val, inst->cm_smi_regs_ptr + reg);
++}
++
++static inline u32 read_smi_cm_reg(struct bcm2835_smi_instance *inst,
++ unsigned reg)
++{
++ return readl(inst->cm_smi_regs_ptr + reg);
++}
++
++static void smi_setup_clock(struct bcm2835_smi_instance *inst)
++{
++ dev_dbg(inst->dev, "Setting up clock...");
++ /* Disable SMI clock and wait for it to stop. */
++ write_smi_cm_reg(inst, 0, CM_SMI_CTL);
++ while (read_smi_cm_reg(inst, CM_SMI_CTL) & CM_SMI_CTL_BUSY)
++ ;
++
++ write_smi_cm_reg(inst, (inst->clock_divisor << CM_SMI_DIV_DIVI_OFFS),
++ CM_SMI_DIV);
++ write_smi_cm_reg(inst, (inst->clock_source << CM_SMI_CTL_SRC_OFFS),
++ CM_SMI_CTL);
++
++ /* Enable the clock */
++ write_smi_cm_reg(inst, (inst->clock_source << CM_SMI_CTL_SRC_OFFS) |
++ CM_SMI_CTL_ENAB, CM_SMI_CTL);
++}
++
++/****************************************************************************
++*
++* SMI peripheral setup
++*
++***************************************************************************/
++
++static inline void write_smi_reg(struct bcm2835_smi_instance *inst,
++ u32 val, unsigned reg)
++{
++ writel(val, inst->smi_regs_ptr + reg);
++}
++
++static inline u32 read_smi_reg(struct bcm2835_smi_instance *inst, unsigned reg)
++{
++ return readl(inst->smi_regs_ptr + reg);
++}
++
++/* Token-paste macro for e.g SMIDSR_RSTROBE -> value of SMIDSR_RSTROBE_MASK */
++#define _CONCAT(x, y) x##y
++#define CONCAT(x, y) _CONCAT(x, y)
++
++#define SET_BIT_FIELD(dest, field, bits) ((dest) = \
++ ((dest) & ~CONCAT(field, _MASK)) | (((bits) << CONCAT(field, _OFFS))& \
++ CONCAT(field, _MASK)))
++#define GET_BIT_FIELD(src, field) (((src) & \
++ CONCAT(field, _MASK)) >> CONCAT(field, _OFFS))
++
++static void smi_dump_context_labelled(struct bcm2835_smi_instance *inst,
++ const char *label)
++{
++ dev_err(inst->dev, "SMI context dump: %s", label);
++ dev_err(inst->dev, "SMICS: 0x%08x", read_smi_reg(inst, SMICS));
++ dev_err(inst->dev, "SMIL: 0x%08x", read_smi_reg(inst, SMIL));
++ dev_err(inst->dev, "SMIDSR: 0x%08x", read_smi_reg(inst, SMIDSR0));
++ dev_err(inst->dev, "SMIDSW: 0x%08x", read_smi_reg(inst, SMIDSW0));
++ dev_err(inst->dev, "SMIDC: 0x%08x", read_smi_reg(inst, SMIDC));
++ dev_err(inst->dev, "SMIFD: 0x%08x", read_smi_reg(inst, SMIFD));
++ dev_err(inst->dev, " ");
++}
++
++static inline void smi_dump_context(struct bcm2835_smi_instance *inst)
++{
++ smi_dump_context_labelled(inst, "");
++}
++
++static void smi_get_default_settings(struct bcm2835_smi_instance *inst)
++{
++ struct smi_settings *settings = &inst->settings;
++
++ settings->data_width = SMI_WIDTH_16BIT;
++ settings->pack_data = true;
++
++ settings->read_setup_time = 1;
++ settings->read_hold_time = 1;
++ settings->read_pace_time = 1;
++ settings->read_strobe_time = 3;
++
++ settings->write_setup_time = settings->read_setup_time;
++ settings->write_hold_time = settings->read_hold_time;
++ settings->write_pace_time = settings->read_pace_time;
++ settings->write_strobe_time = settings->read_strobe_time;
++
++ settings->dma_enable = true;
++ settings->dma_passthrough_enable = false;
++ settings->dma_read_thresh = 0x01;
++ settings->dma_write_thresh = 0x3f;
++ settings->dma_panic_read_thresh = 0x20;
++ settings->dma_panic_write_thresh = 0x20;
++}
++
++void bcm2835_smi_set_regs_from_settings(struct bcm2835_smi_instance *inst)
++{
++ struct smi_settings *settings = &inst->settings;
++ int smidsr_temp = 0, smidsw_temp = 0, smics_temp,
++ smidcs_temp, smidc_temp = 0;
++
++ spin_lock(&inst->transaction_lock);
++
++ /* temporarily disable the peripheral: */
++ smics_temp = read_smi_reg(inst, SMICS);
++ write_smi_reg(inst, 0, SMICS);
++ smidcs_temp = read_smi_reg(inst, SMIDCS);
++ write_smi_reg(inst, 0, SMIDCS);
++
++ if (settings->pack_data)
++ smics_temp |= SMICS_PXLDAT;
++ else
++ smics_temp &= ~SMICS_PXLDAT;
++
++ SET_BIT_FIELD(smidsr_temp, SMIDSR_RWIDTH, settings->data_width);
++ SET_BIT_FIELD(smidsr_temp, SMIDSR_RSETUP, settings->read_setup_time);
++ SET_BIT_FIELD(smidsr_temp, SMIDSR_RHOLD, settings->read_hold_time);
++ SET_BIT_FIELD(smidsr_temp, SMIDSR_RPACE, settings->read_pace_time);
++ SET_BIT_FIELD(smidsr_temp, SMIDSR_RSTROBE, settings->read_strobe_time);
++ write_smi_reg(inst, smidsr_temp, SMIDSR0);
++
++ SET_BIT_FIELD(smidsw_temp, SMIDSW_WWIDTH, settings->data_width);
++ if (settings->data_width == SMI_WIDTH_8BIT)
++ smidsw_temp |= SMIDSW_WSWAP;
++ else
++ smidsw_temp &= ~SMIDSW_WSWAP;
++ SET_BIT_FIELD(smidsw_temp, SMIDSW_WSETUP, settings->write_setup_time);
++ SET_BIT_FIELD(smidsw_temp, SMIDSW_WHOLD, settings->write_hold_time);
++ SET_BIT_FIELD(smidsw_temp, SMIDSW_WPACE, settings->write_pace_time);
++ SET_BIT_FIELD(smidsw_temp, SMIDSW_WSTROBE,
++ settings->write_strobe_time);
++ write_smi_reg(inst, smidsw_temp, SMIDSW0);
++
++ SET_BIT_FIELD(smidc_temp, SMIDC_REQR, settings->dma_read_thresh);
++ SET_BIT_FIELD(smidc_temp, SMIDC_REQW, settings->dma_write_thresh);
++ SET_BIT_FIELD(smidc_temp, SMIDC_PANICR,
++ settings->dma_panic_read_thresh);
++ SET_BIT_FIELD(smidc_temp, SMIDC_PANICW,
++ settings->dma_panic_write_thresh);
++ if (settings->dma_passthrough_enable) {
++ smidc_temp |= SMIDC_DMAP;
++ smidsr_temp |= SMIDSR_RDREQ;
++ write_smi_reg(inst, smidsr_temp, SMIDSR0);
++ smidsw_temp |= SMIDSW_WDREQ;
++ write_smi_reg(inst, smidsw_temp, SMIDSW0);
++ } else
++ smidc_temp &= ~SMIDC_DMAP;
++ if (settings->dma_enable)
++ smidc_temp |= SMIDC_DMAEN;
++ else
++ smidc_temp &= ~SMIDC_DMAEN;
++
++ write_smi_reg(inst, smidc_temp, SMIDC);
++
++ /* re-enable (if was previously enabled) */
++ write_smi_reg(inst, smics_temp, SMICS);
++ write_smi_reg(inst, smidcs_temp, SMIDCS);
++
++ spin_unlock(&inst->transaction_lock);
++}
++EXPORT_SYMBOL(bcm2835_smi_set_regs_from_settings);
++
++struct smi_settings *bcm2835_smi_get_settings_from_regs
++ (struct bcm2835_smi_instance *inst)
++{
++ struct smi_settings *settings = &inst->settings;
++ int smidsr, smidsw, smidc;
++
++ spin_lock(&inst->transaction_lock);
++
++ smidsr = read_smi_reg(inst, SMIDSR0);
++ smidsw = read_smi_reg(inst, SMIDSW0);
++ smidc = read_smi_reg(inst, SMIDC);
++
++ settings->pack_data = (read_smi_reg(inst, SMICS) & SMICS_PXLDAT) ?
++ true : false;
++
++ settings->data_width = GET_BIT_FIELD(smidsr, SMIDSR_RWIDTH);
++ settings->read_setup_time = GET_BIT_FIELD(smidsr, SMIDSR_RSETUP);
++ settings->read_hold_time = GET_BIT_FIELD(smidsr, SMIDSR_RHOLD);
++ settings->read_pace_time = GET_BIT_FIELD(smidsr, SMIDSR_RPACE);
++ settings->read_strobe_time = GET_BIT_FIELD(smidsr, SMIDSR_RSTROBE);
++
++ settings->write_setup_time = GET_BIT_FIELD(smidsw, SMIDSW_WSETUP);
++ settings->write_hold_time = GET_BIT_FIELD(smidsw, SMIDSW_WHOLD);
++ settings->write_pace_time = GET_BIT_FIELD(smidsw, SMIDSW_WPACE);
++ settings->write_strobe_time = GET_BIT_FIELD(smidsw, SMIDSW_WSTROBE);
++
++ settings->dma_read_thresh = GET_BIT_FIELD(smidc, SMIDC_REQR);
++ settings->dma_write_thresh = GET_BIT_FIELD(smidc, SMIDC_REQW);
++ settings->dma_panic_read_thresh = GET_BIT_FIELD(smidc, SMIDC_PANICR);
++ settings->dma_panic_write_thresh = GET_BIT_FIELD(smidc, SMIDC_PANICW);
++ settings->dma_passthrough_enable = (smidc & SMIDC_DMAP) ? true : false;
++ settings->dma_enable = (smidc & SMIDC_DMAEN) ? true : false;
++
++ spin_unlock(&inst->transaction_lock);
++
++ return settings;
++}
++EXPORT_SYMBOL(bcm2835_smi_get_settings_from_regs);
++
++static inline void smi_set_address(struct bcm2835_smi_instance *inst,
++ unsigned int address)
++{
++ int smia_temp = 0, smida_temp = 0;
++
++ SET_BIT_FIELD(smia_temp, SMIA_ADDR, address);
++ SET_BIT_FIELD(smida_temp, SMIDA_ADDR, address);
++
++ /* Write to both address registers - user doesn't care whether we're
++ doing programmed or direct transfers. */
++ write_smi_reg(inst, smia_temp, SMIA);
++ write_smi_reg(inst, smida_temp, SMIDA);
++}
++
++static void smi_setup_regs(struct bcm2835_smi_instance *inst)
++{
++
++ dev_dbg(inst->dev, "Initialising SMI registers...");
++ /* Disable the peripheral if already enabled */
++ write_smi_reg(inst, 0, SMICS);
++ write_smi_reg(inst, 0, SMIDCS);
++
++ smi_get_default_settings(inst);
++ bcm2835_smi_set_regs_from_settings(inst);
++ smi_set_address(inst, 0);
++
++ write_smi_reg(inst, read_smi_reg(inst, SMICS) | SMICS_ENABLE, SMICS);
++ write_smi_reg(inst, read_smi_reg(inst, SMIDCS) | SMIDCS_ENABLE,
++ SMIDCS);
++}
++
++/****************************************************************************
++*
++* Low-level SMI access functions
++* Other modules should use the exported higher-level functions e.g.
++* bcm2835_smi_write_buf() unless they have a good reason to use these
++*
++***************************************************************************/
++
++static inline uint32_t smi_read_single_word(struct bcm2835_smi_instance *inst)
++{
++ int timeout = 0;
++
++ write_smi_reg(inst, SMIDCS_ENABLE, SMIDCS);
++ write_smi_reg(inst, SMIDCS_ENABLE | SMIDCS_START, SMIDCS);
++ /* Make sure things happen in the right order...*/
++ mb();
++ while (!(read_smi_reg(inst, SMIDCS) & SMIDCS_DONE) &&
++ ++timeout < 10000)
++ ;
++ if (timeout < 10000)
++ return read_smi_reg(inst, SMIDD);
++
++ dev_err(inst->dev,
++ "SMI direct read timed out (is the clock set up correctly?)");
++ return 0;
++}
++
++static inline void smi_write_single_word(struct bcm2835_smi_instance *inst,
++ uint32_t data)
++{
++ int timeout = 0;
++
++ write_smi_reg(inst, SMIDCS_ENABLE | SMIDCS_WRITE, SMIDCS);
++ write_smi_reg(inst, data, SMIDD);
++ write_smi_reg(inst, SMIDCS_ENABLE | SMIDCS_WRITE | SMIDCS_START,
++ SMIDCS);
++
++ while (!(read_smi_reg(inst, SMIDCS) & SMIDCS_DONE) &&
++ ++timeout < 10000)
++ ;
++ if (timeout >= 10000)
++ dev_err(inst->dev,
++ "SMI direct write timed out (is the clock set up correctly?)");
++}
++
++/* Initiates a programmed read into the read FIFO. It is up to the caller to
++ * read data from the FIFO - either via paced DMA transfer,
++ * or polling SMICS_RXD to check whether data is available.
++ * SMICS_ACTIVE will go low upon completion. */
++static void smi_init_programmed_read(struct bcm2835_smi_instance *inst,
++ int num_transfers)
++{
++ int smics_temp;
++
++ /* Disable the peripheral: */
++ smics_temp = read_smi_reg(inst, SMICS) & ~(SMICS_ENABLE | SMICS_WRITE);
++ write_smi_reg(inst, smics_temp, SMICS);
++ while (read_smi_reg(inst, SMICS) & SMICS_ENABLE)
++ ;
++
++ /* Program the transfer count: */
++ write_smi_reg(inst, num_transfers, SMIL);
++
++ /* re-enable and start: */
++ smics_temp |= SMICS_ENABLE;
++ write_smi_reg(inst, smics_temp, SMICS);
++ smics_temp |= SMICS_CLEAR;
++ /* Just to be certain: */
++ mb();
++ while (read_smi_reg(inst, SMICS) & SMICS_ACTIVE)
++ ;
++ write_smi_reg(inst, smics_temp, SMICS);
++ smics_temp |= SMICS_START;
++ write_smi_reg(inst, smics_temp, SMICS);
++}
++
++/* Initiates a programmed write sequence, using data from the write FIFO.
++ * It is up to the caller to initiate a DMA transfer before calling,
++ * or use another method to keep the write FIFO topped up.
++ * SMICS_ACTIVE will go low upon completion.
++ */
++static void smi_init_programmed_write(struct bcm2835_smi_instance *inst,
++ int num_transfers)
++{
++ int smics_temp;
++
++ /* Disable the peripheral: */
++ smics_temp = read_smi_reg(inst, SMICS) & ~SMICS_ENABLE;
++ write_smi_reg(inst, smics_temp, SMICS);
++ while (read_smi_reg(inst, SMICS) & SMICS_ENABLE)
++ ;
++
++ /* Program the transfer count: */
++ write_smi_reg(inst, num_transfers, SMIL);
++
++ /* setup, re-enable and start: */
++ smics_temp |= SMICS_WRITE | SMICS_ENABLE;
++ write_smi_reg(inst, smics_temp, SMICS);
++ smics_temp |= SMICS_START;
++ write_smi_reg(inst, smics_temp, SMICS);
++}
++
++/* Initiate a read and then poll FIFO for data, reading out as it appears. */
++static void smi_read_fifo(struct bcm2835_smi_instance *inst,
++ uint32_t *dest, int n_bytes)
++{
++ if (read_smi_reg(inst, SMICS) & SMICS_RXD) {
++ smi_dump_context_labelled(inst,
++ "WARNING: read FIFO not empty at start of read call.");
++ while (read_smi_reg(inst, SMICS))
++ ;
++ }
++
++ /* Dispatch the read: */
++ if (inst->settings.data_width == SMI_WIDTH_8BIT)
++ smi_init_programmed_read(inst, n_bytes);
++ else if (inst->settings.data_width == SMI_WIDTH_16BIT)
++ smi_init_programmed_read(inst, n_bytes / 2);
++ else {
++ dev_err(inst->dev, "Unsupported data width for read.");
++ return;
++ }
++
++ /* Poll FIFO to keep it empty */
++ while (!(read_smi_reg(inst, SMICS) & SMICS_DONE))
++ if (read_smi_reg(inst, SMICS) & SMICS_RXD)
++ *dest++ = read_smi_reg(inst, SMID);
++
++ /* Ensure that the FIFO is emptied */
++ if (read_smi_reg(inst, SMICS) & SMICS_RXD) {
++ int fifo_count;
++
++ fifo_count = GET_BIT_FIELD(read_smi_reg(inst, SMIFD),
++ SMIFD_FCNT);
++ while (fifo_count--)
++ *dest++ = read_smi_reg(inst, SMID);
++ }
++
++ if (!(read_smi_reg(inst, SMICS) & SMICS_DONE))
++ smi_dump_context_labelled(inst,
++ "WARNING: transaction finished but done bit not set.");
++
++ if (read_smi_reg(inst, SMICS) & SMICS_RXD)
++ smi_dump_context_labelled(inst,
++ "WARNING: read FIFO not empty at end of read call.");
++
++}
++
++/* Initiate a write, and then keep the FIFO topped up. */
++static void smi_write_fifo(struct bcm2835_smi_instance *inst,
++ uint32_t *src, int n_bytes)
++{
++ int i, timeout = 0;
++
++ /* Empty FIFOs if not already so */
++ if (!(read_smi_reg(inst, SMICS) & SMICS_TXE)) {
++ smi_dump_context_labelled(inst,
++ "WARNING: write fifo not empty at start of write call.");
++ write_smi_reg(inst, read_smi_reg(inst, SMICS) | SMICS_CLEAR,
++ SMICS);
++ }
++
++ /* Initiate the transfer */
++ if (inst->settings.data_width == SMI_WIDTH_8BIT)
++ smi_init_programmed_write(inst, n_bytes);
++ else if (inst->settings.data_width == SMI_WIDTH_16BIT)
++ smi_init_programmed_write(inst, n_bytes / 2);
++ else {
++ dev_err(inst->dev, "Unsupported data width for write.");
++ return;
++ }
++ /* Fill the FIFO: */
++ for (i = 0; i < (n_bytes - 1) / 4 + 1; ++i) {
++ while (!(read_smi_reg(inst, SMICS) & SMICS_TXD))
++ ;
++ write_smi_reg(inst, *src++, SMID);
++ }
++ /* Busy wait... */
++ while (!(read_smi_reg(inst, SMICS) & SMICS_DONE) && ++timeout <
++ 1000000)
++ ;
++ if (timeout >= 1000000)
++ smi_dump_context_labelled(inst,
++ "Timed out on write operation!");
++ if (!(read_smi_reg(inst, SMICS) & SMICS_TXE))
++ smi_dump_context_labelled(inst,
++ "WARNING: FIFO not empty at end of write operation.");
++}
++
++/****************************************************************************
++*
++* SMI DMA operations
++*
++***************************************************************************/
++
++/* Disable SMI and put it into the correct direction before doing DMA setup.
++ Stops spurious DREQs during setup. Peripheral is re-enabled by init_*() */
++static void smi_disable(struct bcm2835_smi_instance *inst,
++ enum dma_transfer_direction direction)
++{
++ int smics_temp = read_smi_reg(inst, SMICS) & ~SMICS_ENABLE;
++
++ if (direction == DMA_DEV_TO_MEM)
++ smics_temp &= ~SMICS_WRITE;
++ else
++ smics_temp |= SMICS_WRITE;
++ write_smi_reg(inst, smics_temp, SMICS);
++ while (read_smi_reg(inst, SMICS) & SMICS_ACTIVE)
++ ;
++}
++
++static struct scatterlist *smi_scatterlist_from_buffer(
++ struct bcm2835_smi_instance *inst,
++ dma_addr_t buf,
++ size_t len,
++ struct scatterlist *sg)
++{
++ sg_init_table(sg, 1);
++ sg_dma_address(sg) = buf;
++ sg_dma_len(sg) = len;
++ return sg;
++}
++
++static void smi_dma_callback_user_copy(void *param)
++{
++ /* Notify the bottom half that a chunk is ready for user copy */
++ struct bcm2835_smi_instance *inst =
++ (struct bcm2835_smi_instance *)param;
++
++ up(&inst->bounce.callback_sem);
++}
++
++/* Creates a descriptor, assigns the given callback, and submits the
++ descriptor to dmaengine. Does not block - can queue up multiple
++ descriptors and then wait for them all to complete.
++ sg_len is the number of control blocks, NOT the number of bytes.
++ dir can be DMA_MEM_TO_DEV or DMA_DEV_TO_MEM.
++ callback can be NULL - in this case it is not called. */
++static inline struct dma_async_tx_descriptor *smi_dma_submit_sgl(
++ struct bcm2835_smi_instance *inst,
++ struct scatterlist *sgl,
++ size_t sg_len,
++ enum dma_transfer_direction dir,
++ dma_async_tx_callback callback)
++{
++ struct dma_async_tx_descriptor *desc;
++
++ desc = dmaengine_prep_slave_sg(inst->dma_chan,
++ sgl,
++ sg_len,
++ dir,
++ DMA_PREP_INTERRUPT | DMA_CTRL_ACK |
++ DMA_PREP_FENCE);
++ if (!desc) {
++ dev_err(inst->dev, "read_sgl: dma slave preparation failed!");
++ write_smi_reg(inst, read_smi_reg(inst, SMICS) & ~SMICS_ACTIVE,
++ SMICS);
++ while (read_smi_reg(inst, SMICS) & SMICS_ACTIVE)
++ cpu_relax();
++ write_smi_reg(inst, read_smi_reg(inst, SMICS) | SMICS_ACTIVE,
++ SMICS);
++ return NULL;
++ }
++ desc->callback = callback;
++ desc->callback_param = inst;
++ if (dmaengine_submit(desc) < 0)
++ return NULL;
++ return desc;
++}
++
++/* NB this function blocks until the transfer is complete */
++static void
++smi_dma_read_sgl(struct bcm2835_smi_instance *inst,
++ struct scatterlist *sgl, size_t sg_len, size_t n_bytes)
++{
++ struct dma_async_tx_descriptor *desc;
++
++ /* Disable SMI and set to read before dispatching DMA - if SMI is in
++ * write mode and TX fifo is empty, it will generate a DREQ which may
++ * cause the read DMA to complete before the SMI read command is even
++ * dispatched! We want to dispatch DMA before SMI read so that reading
++ * is gapless, for logic analyser.
++ */
++
++ smi_disable(inst, DMA_DEV_TO_MEM);
++
++ desc = smi_dma_submit_sgl(inst, sgl, sg_len, DMA_DEV_TO_MEM, NULL);
++ dma_async_issue_pending(inst->dma_chan);
++
++ if (inst->settings.data_width == SMI_WIDTH_8BIT)
++ smi_init_programmed_read(inst, n_bytes);
++ else
++ smi_init_programmed_read(inst, n_bytes / 2);
++
++ if (dma_wait_for_async_tx(desc) == DMA_ERROR)
++ smi_dump_context_labelled(inst, "DMA timeout!");
++}
++
++static void
++smi_dma_write_sgl(struct bcm2835_smi_instance *inst,
++ struct scatterlist *sgl, size_t sg_len, size_t n_bytes)
++{
++ struct dma_async_tx_descriptor *desc;
++
++ if (inst->settings.data_width == SMI_WIDTH_8BIT)
++ smi_init_programmed_write(inst, n_bytes);
++ else
++ smi_init_programmed_write(inst, n_bytes / 2);
++
++ desc = smi_dma_submit_sgl(inst, sgl, sg_len, DMA_MEM_TO_DEV, NULL);
++ dma_async_issue_pending(inst->dma_chan);
++
++ if (dma_wait_for_async_tx(desc) == DMA_ERROR)
++ smi_dump_context_labelled(inst, "DMA timeout!");
++ else
++ /* Wait for SMI to finish our writes */
++ while (!(read_smi_reg(inst, SMICS) & SMICS_DONE))
++ cpu_relax();
++}
++
++ssize_t bcm2835_smi_user_dma(
++ struct bcm2835_smi_instance *inst,
++ enum dma_transfer_direction dma_dir,
++ char __user *user_ptr, size_t count,
++ struct bcm2835_smi_bounce_info **bounce)
++{
++ int chunk_no = 0, chunk_size, count_left = count;
++ struct scatterlist *sgl;
++ void (*init_trans_func)(struct bcm2835_smi_instance *, int);
++
++ spin_lock(&inst->transaction_lock);
++
++ if (dma_dir == DMA_DEV_TO_MEM)
++ init_trans_func = smi_init_programmed_read;
++ else
++ init_trans_func = smi_init_programmed_write;
++
++ smi_disable(inst, dma_dir);
++
++ sema_init(&inst->bounce.callback_sem, 0);
++ if (bounce)
++ *bounce = &inst->bounce;
++ while (count_left) {
++ chunk_size = count_left > DMA_BOUNCE_BUFFER_SIZE ?
++ DMA_BOUNCE_BUFFER_SIZE : count_left;
++ if (chunk_size == DMA_BOUNCE_BUFFER_SIZE) {
++ sgl =
++ &inst->bounce.sgl[chunk_no % DMA_BOUNCE_BUFFER_COUNT];
++ } else {
++ sgl = smi_scatterlist_from_buffer(
++ inst,
++ inst->bounce.phys[
++ chunk_no % DMA_BOUNCE_BUFFER_COUNT],
++ chunk_size,
++ &inst->buffer_sgl);
++ }
++
++ if (!smi_dma_submit_sgl(inst, sgl, 1, dma_dir,
++ smi_dma_callback_user_copy
++ )) {
++ dev_err(inst->dev, "sgl submit failed");
++ count = 0;
++ goto out;
++ }
++ count_left -= chunk_size;
++ chunk_no++;
++ }
++ dma_async_issue_pending(inst->dma_chan);
++
++ if (inst->settings.data_width == SMI_WIDTH_8BIT)
++ init_trans_func(inst, count);
++ else if (inst->settings.data_width == SMI_WIDTH_16BIT)
++ init_trans_func(inst, count / 2);
++out:
++ spin_unlock(&inst->transaction_lock);
++ return count;
++}
++EXPORT_SYMBOL(bcm2835_smi_user_dma);
++
++
++/****************************************************************************
++*
++* High level buffer transfer functions - for use by other drivers
++*
++***************************************************************************/
++
++/* Buffer must be physically contiguous - i.e. kmalloc, not vmalloc! */
++void bcm2835_smi_write_buf(
++ struct bcm2835_smi_instance *inst,
++ const void *buf, size_t n_bytes)
++{
++ int odd_bytes = n_bytes & 0x3;
++
++ n_bytes -= odd_bytes;
++
++ spin_lock(&inst->transaction_lock);
++
++ if (n_bytes > DMA_THRESHOLD_BYTES) {
++ dma_addr_t phy_addr = dma_map_single(
++ inst->dev,
++ (void *)buf,
++ n_bytes,
++ DMA_MEM_TO_DEV);
++ struct scatterlist *sgl =
++ smi_scatterlist_from_buffer(inst, phy_addr, n_bytes,
++ &inst->buffer_sgl);
++
++ if (!sgl) {
++ smi_dump_context_labelled(inst,
++ "Error: could not create scatterlist for write!");
++ goto out;
++ }
++ smi_dma_write_sgl(inst, sgl, 1, n_bytes);
++
++ dma_unmap_single
++ (inst->dev, phy_addr, n_bytes, DMA_MEM_TO_DEV);
++ } else if (n_bytes) {
++ smi_write_fifo(inst, (uint32_t *) buf, n_bytes);
++ }
++ buf += n_bytes;
++
++ if (inst->settings.data_width == SMI_WIDTH_8BIT) {
++ while (odd_bytes--)
++ smi_write_single_word(inst, *(uint8_t *) (buf++));
++ } else {
++ while (odd_bytes >= 2) {
++ smi_write_single_word(inst, *(uint16_t *)buf);
++ buf += 2;
++ odd_bytes -= 2;
++ }
++ if (odd_bytes) {
++ /* Reading an odd number of bytes on a 16 bit bus is
++ a user bug. It's kinder to fail early and tell them
++ than to e.g. transparently give them the bottom byte
++ of a 16 bit transfer. */
++ dev_err(inst->dev,
++ "WARNING: odd number of bytes specified for wide transfer.");
++ dev_err(inst->dev,
++ "At least one byte dropped as a result.");
++ dump_stack();
++ }
++ }
++out:
++ spin_unlock(&inst->transaction_lock);
++}
++EXPORT_SYMBOL(bcm2835_smi_write_buf);
++
++void bcm2835_smi_read_buf(struct bcm2835_smi_instance *inst,
++ void *buf, size_t n_bytes)
++{
++
++ /* SMI is inherently 32-bit, which causes surprising amounts of mess
++ for bytes % 4 != 0. Easiest to avoid this mess altogether
++ by handling remainder separately. */
++ int odd_bytes = n_bytes & 0x3;
++
++ spin_lock(&inst->transaction_lock);
++ n_bytes -= odd_bytes;
++ if (n_bytes > DMA_THRESHOLD_BYTES) {
++ dma_addr_t phy_addr = dma_map_single(inst->dev,
++ buf, n_bytes,
++ DMA_DEV_TO_MEM);
++ struct scatterlist *sgl = smi_scatterlist_from_buffer(
++ inst, phy_addr, n_bytes,
++ &inst->buffer_sgl);
++ if (!sgl) {
++ smi_dump_context_labelled(inst,
++ "Error: could not create scatterlist for read!");
++ goto out;
++ }
++ smi_dma_read_sgl(inst, sgl, 1, n_bytes);
++ dma_unmap_single(inst->dev, phy_addr, n_bytes, DMA_DEV_TO_MEM);
++ } else if (n_bytes) {
++ smi_read_fifo(inst, (uint32_t *)buf, n_bytes);
++ }
++ buf += n_bytes;
++
++ if (inst->settings.data_width == SMI_WIDTH_8BIT) {
++ while (odd_bytes--)
++ *((uint8_t *) (buf++)) = smi_read_single_word(inst);
++ } else {
++ while (odd_bytes >= 2) {
++ *(uint16_t *) buf = smi_read_single_word(inst);
++ buf += 2;
++ odd_bytes -= 2;
++ }
++ if (odd_bytes) {
++ dev_err(inst->dev,
++ "WARNING: odd number of bytes specified for wide transfer.");
++ dev_err(inst->dev,
++ "At least one byte dropped as a result.");
++ dump_stack();
++ }
++ }
++out:
++ spin_unlock(&inst->transaction_lock);
++}
++EXPORT_SYMBOL(bcm2835_smi_read_buf);
++
++void bcm2835_smi_set_address(struct bcm2835_smi_instance *inst,
++ unsigned int address)
++{
++ spin_lock(&inst->transaction_lock);
++ smi_set_address(inst, address);
++ spin_unlock(&inst->transaction_lock);
++}
++EXPORT_SYMBOL(bcm2835_smi_set_address);
++
++struct bcm2835_smi_instance *bcm2835_smi_get(struct device_node *node)
++{
++ struct platform_device *pdev;
++
++ if (!node)
++ return NULL;
++
++ pdev = of_find_device_by_node(node);
++ if (!pdev)
++ return NULL;
++
++ return platform_get_drvdata(pdev);
++}
++EXPORT_SYMBOL(bcm2835_smi_get);
++
++/****************************************************************************
++*
++* bcm2835_smi_probe - called when the driver is loaded.
++*
++***************************************************************************/
++
++static int bcm2835_smi_dma_setup(struct bcm2835_smi_instance *inst)
++{
++ int i, rv = 0;
++
++ inst->dma_chan = dma_request_slave_channel(inst->dev, "rx-tx");
++
++ inst->dma_config.src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
++ inst->dma_config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES;
++ inst->dma_config.src_addr = inst->smi_regs_busaddr + SMID;
++ inst->dma_config.dst_addr = inst->dma_config.src_addr;
++ /* Direction unimportant - always overridden by prep_slave_sg */
++ inst->dma_config.direction = DMA_DEV_TO_MEM;
++ dmaengine_slave_config(inst->dma_chan, &inst->dma_config);
++ /* Alloc and map bounce buffers */
++ for (i = 0; i < DMA_BOUNCE_BUFFER_COUNT; ++i) {
++ inst->bounce.buffer[i] =
++ dmam_alloc_coherent(inst->dev, DMA_BOUNCE_BUFFER_SIZE,
++ &inst->bounce.phys[i],
++ GFP_KERNEL);
++ if (!inst->bounce.buffer[i]) {
++ dev_err(inst->dev, "Could not allocate buffer!");
++ rv = -ENOMEM;
++ break;
++ }
++ smi_scatterlist_from_buffer(
++ inst,
++ inst->bounce.phys[i],
++ DMA_BOUNCE_BUFFER_SIZE,
++ &inst->bounce.sgl[i]
++ );
++ }
++
++ return rv;
++}
++
++static int bcm2835_smi_probe(struct platform_device *pdev)
++{
++ int err;
++ struct device *dev = &pdev->dev;
++ struct device_node *node = dev->of_node;
++ struct resource *ioresource;
++ struct bcm2835_smi_instance *inst;
++
++ /* Allocate buffers and instance data */
++
++ inst = devm_kzalloc(dev, sizeof(struct bcm2835_smi_instance),
++ GFP_KERNEL);
++
++ if (!inst)
++ return -ENOMEM;
++
++ inst->dev = dev;
++ spin_lock_init(&inst->transaction_lock);
++
++ /* We require device tree support */
++ if (!node)
++ return -EINVAL;
++
++ ioresource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ inst->smi_regs_ptr = devm_ioremap_resource(dev, ioresource);
++ ioresource = platform_get_resource(pdev, IORESOURCE_MEM, 1);
++ inst->cm_smi_regs_ptr = devm_ioremap_resource(dev, ioresource);
++ inst->smi_regs_busaddr = be32_to_cpu(
++ *of_get_address(node, 0, NULL, NULL));
++ of_property_read_u32(node,
++ "brcm,smi-clock-source",
++ &inst->clock_source);
++ of_property_read_u32(node,
++ "brcm,smi-clock-divisor",
++ &inst->clock_divisor);
++
++ err = bcm2835_smi_dma_setup(inst);
++ if (err)
++ return err;
++
++ /* Finally, do peripheral setup */
++
++ smi_setup_clock(inst);
++ smi_setup_regs(inst);
++
++ platform_set_drvdata(pdev, inst);
++
++ dev_info(inst->dev, "initialised");
++
++ return 0;
++}
++
++/****************************************************************************
++*
++* bcm2835_smi_remove - called when the driver is unloaded.
++*
++***************************************************************************/
++
++static int bcm2835_smi_remove(struct platform_device *pdev)
++{
++ struct bcm2835_smi_instance *inst = platform_get_drvdata(pdev);
++ struct device *dev = inst->dev;
++
++ dev_info(dev, "SMI device removed - OK");
++ return 0;
++}
++
++/****************************************************************************
++*
++* Register the driver with device tree
++*
++***************************************************************************/
++
++static const struct of_device_id bcm2835_smi_of_match[] = {
++ {.compatible = "brcm,bcm2835-smi",},
++ { /* sentinel */ },
++};
++
++MODULE_DEVICE_TABLE(of, bcm2835_smi_of_match);
++
++static struct platform_driver bcm2835_smi_driver = {
++ .probe = bcm2835_smi_probe,
++ .remove = bcm2835_smi_remove,
++ .driver = {
++ .name = DRIVER_NAME,
++ .owner = THIS_MODULE,
++ .of_match_table = bcm2835_smi_of_match,
++ },
++};
++
++module_platform_driver(bcm2835_smi_driver);
++
++MODULE_ALIAS("platform:smi-bcm2835");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("Device driver for BCM2835's secondary memory interface");
++MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
+diff -Nur linux-4.1.10/drivers/misc/Kconfig linux-rpi/drivers/misc/Kconfig
+--- linux-4.1.10/drivers/misc/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/misc/Kconfig 2015-10-07 16:40:46.000000000 +0200
+@@ -10,6 +10,14 @@
+ select INPUT_POLLDEV
+ default n
+
++config BCM2835_SMI
++ tristate "Broadcom 283x Secondary Memory Interface driver"
++ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
++ default m
++ help
++ Driver for enabling and using Broadcom's Secondary/Slow Memory Interface.
++ Appears as /dev/bcm2835_smi. For ioctl interface see drivers/misc/bcm2835_smi.h
++
+ config AD525X_DPOT
+ tristate "Analog Devices Digital Potentiometers"
+ depends on (I2C || SPI) && SYSFS
+@@ -524,6 +532,7 @@
source "drivers/misc/altera-stapl/Kconfig"
source "drivers/misc/mei/Kconfig"
source "drivers/misc/vmw_vmci/Kconfig"
@@ -34957,10 +37073,18 @@ diff -Nur linux-4.1.6/drivers/misc/Kconfig linux-rpi/drivers/misc/Kconfig
source "drivers/misc/mic/Kconfig"
source "drivers/misc/genwqe/Kconfig"
source "drivers/misc/echo/Kconfig"
-diff -Nur linux-4.1.6/drivers/misc/Makefile linux-rpi/drivers/misc/Makefile
---- linux-4.1.6/drivers/misc/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/misc/Makefile 2015-08-26 10:26:08.285309826 +0200
-@@ -51,6 +51,7 @@
+diff -Nur linux-4.1.10/drivers/misc/Makefile linux-rpi/drivers/misc/Makefile
+--- linux-4.1.10/drivers/misc/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/misc/Makefile 2015-10-07 16:40:46.000000000 +0200
+@@ -9,6 +9,7 @@
+ obj-$(CONFIG_INTEL_MID_PTI) += pti.o
+ obj-$(CONFIG_ATMEL_SSC) += atmel-ssc.o
+ obj-$(CONFIG_ATMEL_TCLIB) += atmel_tclib.o
++obj-$(CONFIG_BCM2835_SMI) += bcm2835_smi.o
+ obj-$(CONFIG_BMP085) += bmp085.o
+ obj-$(CONFIG_BMP085_I2C) += bmp085-i2c.o
+ obj-$(CONFIG_BMP085_SPI) += bmp085-spi.o
+@@ -51,6 +52,7 @@
obj-$(CONFIG_VMWARE_VMCI) += vmw_vmci/
obj-$(CONFIG_LATTICE_ECP3_CONFIG) += lattice-ecp3-config.o
obj-$(CONFIG_SRAM) += sram.o
@@ -34968,40 +37092,9 @@ diff -Nur linux-4.1.6/drivers/misc/Makefile linux-rpi/drivers/misc/Makefile
obj-y += mic/
obj-$(CONFIG_GENWQE) += genwqe/
obj-$(CONFIG_ECHO) += echo/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/Kconfig linux-rpi/drivers/misc/vc04_services/Kconfig
---- linux-4.1.6/drivers/misc/vc04_services/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/Kconfig 2015-08-26 10:26:08.301310049 +0200
-@@ -0,0 +1,9 @@
-+config BCM2708_VCHIQ
-+ tristate "Videocore VCHIQ"
-+ depends on RASPBERRYPI_FIRMWARE
-+ default y
-+ help
-+ Kernel to VideoCore communication interface for the
-+ BCM2708 family of products.
-+ Defaults to Y when the Broadcom Videocore services
-+ are included in the build, N otherwise.
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/Makefile linux-rpi/drivers/misc/vc04_services/Makefile
---- linux-4.1.6/drivers/misc/vc04_services/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/Makefile 2015-08-26 10:26:08.301310049 +0200
-@@ -0,0 +1,14 @@
-+obj-$(CONFIG_BCM2708_VCHIQ) += vchiq.o
-+
-+vchiq-objs := \
-+ interface/vchiq_arm/vchiq_core.o \
-+ interface/vchiq_arm/vchiq_arm.o \
-+ interface/vchiq_arm/vchiq_kern_lib.o \
-+ interface/vchiq_arm/vchiq_2835_arm.o \
-+ interface/vchiq_arm/vchiq_debugfs.o \
-+ interface/vchiq_arm/vchiq_shim.o \
-+ interface/vchiq_arm/vchiq_util.o \
-+ interface/vchiq_arm/vchiq_connected.o \
-+
-+ccflags-y += -DVCOS_VERIFY_BKPTS=1 -Idrivers/misc/vc04_services -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000
-+
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/connections/connection.h linux-rpi/drivers/misc/vc04_services/interface/vchi/connections/connection.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/connections/connection.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/connections/connection.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/connections/connection.h linux-rpi/drivers/misc/vc04_services/interface/vchi/connections/connection.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/connections/connection.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/connections/connection.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,328 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -35331,9 +37424,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/connections/conn
+#endif /* CONNECTION_H_ */
+
+/****************************** End of file **********************************/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h linux-rpi/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h linux-rpi/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/message_drivers/message.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,204 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -35539,391 +37632,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/message_drivers/
+#endif // _VCHI_MESSAGE_H_
+
+/****************************** End of file ***********************************/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi.h 2015-08-26 10:26:08.301310049 +0200
-@@ -0,0 +1,378 @@
-+/**
-+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The names of the above-listed copyright holders may not be used
-+ * to endorse or promote products derived from this software without
-+ * specific prior written permission.
-+ *
-+ * ALTERNATIVELY, this software may be distributed under the terms of the
-+ * GNU General Public License ("GPL") version 2, as published by the Free
-+ * Software Foundation.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
-+
-+#ifndef VCHI_H_
-+#define VCHI_H_
-+
-+#include "interface/vchi/vchi_cfg.h"
-+#include "interface/vchi/vchi_common.h"
-+#include "interface/vchi/connections/connection.h"
-+#include "vchi_mh.h"
-+
-+
-+/******************************************************************************
-+ Global defs
-+ *****************************************************************************/
-+
-+#define VCHI_BULK_ROUND_UP(x) ((((unsigned long)(x))+VCHI_BULK_ALIGN-1) & ~(VCHI_BULK_ALIGN-1))
-+#define VCHI_BULK_ROUND_DOWN(x) (((unsigned long)(x)) & ~(VCHI_BULK_ALIGN-1))
-+#define VCHI_BULK_ALIGN_NBYTES(x) (VCHI_BULK_ALIGNED(x) ? 0 : (VCHI_BULK_ALIGN - ((unsigned long)(x) & (VCHI_BULK_ALIGN-1))))
-+
-+#ifdef USE_VCHIQ_ARM
-+#define VCHI_BULK_ALIGNED(x) 1
-+#else
-+#define VCHI_BULK_ALIGNED(x) (((unsigned long)(x) & (VCHI_BULK_ALIGN-1)) == 0)
-+#endif
-+
-+struct vchi_version {
-+ uint32_t version;
-+ uint32_t version_min;
-+};
-+#define VCHI_VERSION(v_) { v_, v_ }
-+#define VCHI_VERSION_EX(v_, m_) { v_, m_ }
-+
-+typedef enum
-+{
-+ VCHI_VEC_POINTER,
-+ VCHI_VEC_HANDLE,
-+ VCHI_VEC_LIST
-+} VCHI_MSG_VECTOR_TYPE_T;
-+
-+typedef struct vchi_msg_vector_ex {
-+
-+ VCHI_MSG_VECTOR_TYPE_T type;
-+ union
-+ {
-+ // a memory handle
-+ struct
-+ {
-+ VCHI_MEM_HANDLE_T handle;
-+ uint32_t offset;
-+ int32_t vec_len;
-+ } handle;
-+
-+ // an ordinary data pointer
-+ struct
-+ {
-+ const void *vec_base;
-+ int32_t vec_len;
-+ } ptr;
-+
-+ // a nested vector list
-+ struct
-+ {
-+ struct vchi_msg_vector_ex *vec;
-+ uint32_t vec_len;
-+ } list;
-+ } u;
-+} VCHI_MSG_VECTOR_EX_T;
-+
-+
-+// Construct an entry in a msg vector for a pointer (p) of length (l)
-+#define VCHI_VEC_POINTER(p,l) VCHI_VEC_POINTER, { { (VCHI_MEM_HANDLE_T)(p), (l) } }
-+
-+// Construct an entry in a msg vector for a message handle (h), starting at offset (o) of length (l)
-+#define VCHI_VEC_HANDLE(h,o,l) VCHI_VEC_HANDLE, { { (h), (o), (l) } }
-+
-+// Macros to manipulate 'FOURCC' values
-+#define MAKE_FOURCC(x) ((int32_t)( (x[0] << 24) | (x[1] << 16) | (x[2] << 8) | x[3] ))
-+#define FOURCC_TO_CHAR(x) (x >> 24) & 0xFF,(x >> 16) & 0xFF,(x >> 8) & 0xFF, x & 0xFF
-+
-+
-+// Opaque service information
-+struct opaque_vchi_service_t;
-+
-+// Descriptor for a held message. Allocated by client, initialised by vchi_msg_hold,
-+// vchi_msg_iter_hold or vchi_msg_iter_hold_next. Fields are for internal VCHI use only.
-+typedef struct
-+{
-+ struct opaque_vchi_service_t *service;
-+ void *message;
-+} VCHI_HELD_MSG_T;
-+
-+
-+
-+// structure used to provide the information needed to open a server or a client
-+typedef struct {
-+ struct vchi_version version;
-+ int32_t service_id;
-+ VCHI_CONNECTION_T *connection;
-+ uint32_t rx_fifo_size;
-+ uint32_t tx_fifo_size;
-+ VCHI_CALLBACK_T callback;
-+ void *callback_param;
-+ /* client intends to receive bulk transfers of
-+ odd lengths or into unaligned buffers */
-+ int32_t want_unaligned_bulk_rx;
-+ /* client intends to transmit bulk transfers of
-+ odd lengths or out of unaligned buffers */
-+ int32_t want_unaligned_bulk_tx;
-+ /* client wants to check CRCs on (bulk) xfers.
-+ Only needs to be set at 1 end - will do both directions. */
-+ int32_t want_crc;
-+} SERVICE_CREATION_T;
-+
-+// Opaque handle for a VCHI instance
-+typedef struct opaque_vchi_instance_handle_t *VCHI_INSTANCE_T;
-+
-+// Opaque handle for a server or client
-+typedef struct opaque_vchi_service_handle_t *VCHI_SERVICE_HANDLE_T;
-+
-+// Service registration & startup
-+typedef void (*VCHI_SERVICE_INIT)(VCHI_INSTANCE_T initialise_instance, VCHI_CONNECTION_T **connections, uint32_t num_connections);
-+
-+typedef struct service_info_tag {
-+ const char * const vll_filename; /* VLL to load to start this service. This is an empty string if VLL is "static" */
-+ VCHI_SERVICE_INIT init; /* Service initialisation function */
-+ void *vll_handle; /* VLL handle; NULL when unloaded or a "static VLL" in build */
-+} SERVICE_INFO_T;
-+
-+/******************************************************************************
-+ Global funcs - implementation is specific to which side you are on (local / remote)
-+ *****************************************************************************/
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+extern /*@observer@*/ VCHI_CONNECTION_T * vchi_create_connection( const VCHI_CONNECTION_API_T * function_table,
-+ const VCHI_MESSAGE_DRIVER_T * low_level);
-+
-+
-+// Routine used to initialise the vchi on both local + remote connections
-+extern int32_t vchi_initialise( VCHI_INSTANCE_T *instance_handle );
-+
-+extern int32_t vchi_exit( void );
-+
-+extern int32_t vchi_connect( VCHI_CONNECTION_T **connections,
-+ const uint32_t num_connections,
-+ VCHI_INSTANCE_T instance_handle );
-+
-+//When this is called, ensure that all services have no data pending.
-+//Bulk transfers can remain 'queued'
-+extern int32_t vchi_disconnect( VCHI_INSTANCE_T instance_handle );
-+
-+// Global control over bulk CRC checking
-+extern int32_t vchi_crc_control( VCHI_CONNECTION_T *connection,
-+ VCHI_CRC_CONTROL_T control );
-+
-+// helper functions
-+extern void * vchi_allocate_buffer(VCHI_SERVICE_HANDLE_T handle, uint32_t *length);
-+extern void vchi_free_buffer(VCHI_SERVICE_HANDLE_T handle, void *address);
-+extern uint32_t vchi_current_time(VCHI_INSTANCE_T instance_handle);
-+
-+
-+/******************************************************************************
-+ Global service API
-+ *****************************************************************************/
-+// Routine to create a named service
-+extern int32_t vchi_service_create( VCHI_INSTANCE_T instance_handle,
-+ SERVICE_CREATION_T *setup,
-+ VCHI_SERVICE_HANDLE_T *handle );
-+
-+// Routine to destory a service
-+extern int32_t vchi_service_destroy( const VCHI_SERVICE_HANDLE_T handle );
-+
-+// Routine to open a named service
-+extern int32_t vchi_service_open( VCHI_INSTANCE_T instance_handle,
-+ SERVICE_CREATION_T *setup,
-+ VCHI_SERVICE_HANDLE_T *handle);
-+
-+extern int32_t vchi_get_peer_version( const VCHI_SERVICE_HANDLE_T handle,
-+ short *peer_version );
-+
-+// Routine to close a named service
-+extern int32_t vchi_service_close( const VCHI_SERVICE_HANDLE_T handle );
-+
-+// Routine to increment ref count on a named service
-+extern int32_t vchi_service_use( const VCHI_SERVICE_HANDLE_T handle );
-+
-+// Routine to decrement ref count on a named service
-+extern int32_t vchi_service_release( const VCHI_SERVICE_HANDLE_T handle );
-+
-+// Routine to set a control option for a named service
-+extern int32_t vchi_service_set_option( const VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_SERVICE_OPTION_T option,
-+ int value);
-+
-+// Routine to send a message across a service
-+extern int32_t vchi_msg_queue( VCHI_SERVICE_HANDLE_T handle,
-+ const void *data,
-+ uint32_t data_size,
-+ VCHI_FLAGS_T flags,
-+ void *msg_handle );
-+
-+// scatter-gather (vector) and send message
-+int32_t vchi_msg_queuev_ex( VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_MSG_VECTOR_EX_T *vector,
-+ uint32_t count,
-+ VCHI_FLAGS_T flags,
-+ void *msg_handle );
-+
-+// legacy scatter-gather (vector) and send message, only handles pointers
-+int32_t vchi_msg_queuev( VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_MSG_VECTOR_T *vector,
-+ uint32_t count,
-+ VCHI_FLAGS_T flags,
-+ void *msg_handle );
-+
-+// Routine to receive a msg from a service
-+// Dequeue is equivalent to hold, copy into client buffer, release
-+extern int32_t vchi_msg_dequeue( VCHI_SERVICE_HANDLE_T handle,
-+ void *data,
-+ uint32_t max_data_size_to_read,
-+ uint32_t *actual_msg_size,
-+ VCHI_FLAGS_T flags );
-+
-+// Routine to look at a message in place.
-+// The message is not dequeued, so a subsequent call to peek or dequeue
-+// will return the same message.
-+extern int32_t vchi_msg_peek( VCHI_SERVICE_HANDLE_T handle,
-+ void **data,
-+ uint32_t *msg_size,
-+ VCHI_FLAGS_T flags );
-+
-+// Routine to remove a message after it has been read in place with peek
-+// The first message on the queue is dequeued.
-+extern int32_t vchi_msg_remove( VCHI_SERVICE_HANDLE_T handle );
-+
-+// Routine to look at a message in place.
-+// The message is dequeued, so the caller is left holding it; the descriptor is
-+// filled in and must be released when the user has finished with the message.
-+extern int32_t vchi_msg_hold( VCHI_SERVICE_HANDLE_T handle,
-+ void **data, // } may be NULL, as info can be
-+ uint32_t *msg_size, // } obtained from HELD_MSG_T
-+ VCHI_FLAGS_T flags,
-+ VCHI_HELD_MSG_T *message_descriptor );
-+
-+// Initialise an iterator to look through messages in place
-+extern int32_t vchi_msg_look_ahead( VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_MSG_ITER_T *iter,
-+ VCHI_FLAGS_T flags );
-+
-+/******************************************************************************
-+ Global service support API - operations on held messages and message iterators
-+ *****************************************************************************/
-+
-+// Routine to get the address of a held message
-+extern void *vchi_held_msg_ptr( const VCHI_HELD_MSG_T *message );
-+
-+// Routine to get the size of a held message
-+extern int32_t vchi_held_msg_size( const VCHI_HELD_MSG_T *message );
-+
-+// Routine to get the transmit timestamp as written into the header by the peer
-+extern uint32_t vchi_held_msg_tx_timestamp( const VCHI_HELD_MSG_T *message );
-+
-+// Routine to get the reception timestamp, written as we parsed the header
-+extern uint32_t vchi_held_msg_rx_timestamp( const VCHI_HELD_MSG_T *message );
-+
-+// Routine to release a held message after it has been processed
-+extern int32_t vchi_held_msg_release( VCHI_HELD_MSG_T *message );
-+
-+// Indicates whether the iterator has a next message.
-+extern int32_t vchi_msg_iter_has_next( const VCHI_MSG_ITER_T *iter );
-+
-+// Return the pointer and length for the next message and advance the iterator.
-+extern int32_t vchi_msg_iter_next( VCHI_MSG_ITER_T *iter,
-+ void **data,
-+ uint32_t *msg_size );
-+
-+// Remove the last message returned by vchi_msg_iter_next.
-+// Can only be called once after each call to vchi_msg_iter_next.
-+extern int32_t vchi_msg_iter_remove( VCHI_MSG_ITER_T *iter );
-+
-+// Hold the last message returned by vchi_msg_iter_next.
-+// Can only be called once after each call to vchi_msg_iter_next.
-+extern int32_t vchi_msg_iter_hold( VCHI_MSG_ITER_T *iter,
-+ VCHI_HELD_MSG_T *message );
-+
-+// Return information for the next message, and hold it, advancing the iterator.
-+extern int32_t vchi_msg_iter_hold_next( VCHI_MSG_ITER_T *iter,
-+ void **data, // } may be NULL
-+ uint32_t *msg_size, // }
-+ VCHI_HELD_MSG_T *message );
-+
-+
-+/******************************************************************************
-+ Global bulk API
-+ *****************************************************************************/
-+
-+// Routine to prepare interface for a transfer from the other side
-+extern int32_t vchi_bulk_queue_receive( VCHI_SERVICE_HANDLE_T handle,
-+ void *data_dst,
-+ uint32_t data_size,
-+ VCHI_FLAGS_T flags,
-+ void *transfer_handle );
-+
-+
-+// Prepare interface for a transfer from the other side into relocatable memory.
-+int32_t vchi_bulk_queue_receive_reloc( const VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_MEM_HANDLE_T h_dst,
-+ uint32_t offset,
-+ uint32_t data_size,
-+ const VCHI_FLAGS_T flags,
-+ void * const bulk_handle );
-+
-+// Routine to queue up data ready for transfer to the other (once they have signalled they are ready)
-+extern int32_t vchi_bulk_queue_transmit( VCHI_SERVICE_HANDLE_T handle,
-+ const void *data_src,
-+ uint32_t data_size,
-+ VCHI_FLAGS_T flags,
-+ void *transfer_handle );
-+
-+
-+/******************************************************************************
-+ Configuration plumbing
-+ *****************************************************************************/
-+
-+// function prototypes for the different mid layers (the state info gives the different physical connections)
-+extern const VCHI_CONNECTION_API_T *single_get_func_table( void );
-+//extern const VCHI_CONNECTION_API_T *local_server_get_func_table( void );
-+//extern const VCHI_CONNECTION_API_T *local_client_get_func_table( void );
-+
-+// declare all message drivers here
-+const VCHI_MESSAGE_DRIVER_T *vchi_mphi_message_driver_func_table( void );
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+extern int32_t vchi_bulk_queue_transmit_reloc( VCHI_SERVICE_HANDLE_T handle,
-+ VCHI_MEM_HANDLE_T h_src,
-+ uint32_t offset,
-+ uint32_t data_size,
-+ VCHI_FLAGS_T flags,
-+ void *transfer_handle );
-+#endif /* VCHI_H_ */
-+
-+/****************************** End of file **********************************/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,224 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -36149,9 +37860,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg.h linux
+#endif /* VCHI_CFG_H_ */
+
+/****************************** End of file **********************************/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_cfg_internal.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -36224,9 +37935,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_cfg_interna
+//#define VCHI_RX_NANOLOCKS
+
+#endif /*VCHI_CFG_INTERNAL_H_*/
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_common.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_common.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_common.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_common.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_common.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_common.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,175 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -36403,10 +38114,10 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_common.h li
+
+
+#endif // VCHI_COMMON_H_
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_mh.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_mh.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_mh.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_mh.h 2015-08-26 10:26:08.301310049 +0200
-@@ -0,0 +1,42 @@
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi.h 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,378 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
+ *
@@ -36440,62 +38151,354 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchi/vchi_mh.h linux-
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
-+#ifndef VCHI_MH_H_
-+#define VCHI_MH_H_
++#ifndef VCHI_H_
++#define VCHI_H_
+
-+#include <linux/types.h>
++#include "interface/vchi/vchi_cfg.h"
++#include "interface/vchi/vchi_common.h"
++#include "interface/vchi/connections/connection.h"
++#include "vchi_mh.h"
+
-+typedef int32_t VCHI_MEM_HANDLE_T;
-+#define VCHI_MEM_HANDLE_INVALID 0
+
++/******************************************************************************
++ Global defs
++ *****************************************************************************/
++
++#define VCHI_BULK_ROUND_UP(x) ((((unsigned long)(x))+VCHI_BULK_ALIGN-1) & ~(VCHI_BULK_ALIGN-1))
++#define VCHI_BULK_ROUND_DOWN(x) (((unsigned long)(x)) & ~(VCHI_BULK_ALIGN-1))
++#define VCHI_BULK_ALIGN_NBYTES(x) (VCHI_BULK_ALIGNED(x) ? 0 : (VCHI_BULK_ALIGN - ((unsigned long)(x) & (VCHI_BULK_ALIGN-1))))
++
++#ifdef USE_VCHIQ_ARM
++#define VCHI_BULK_ALIGNED(x) 1
++#else
++#define VCHI_BULK_ALIGNED(x) (((unsigned long)(x) & (VCHI_BULK_ALIGN-1)) == 0)
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h 2015-08-26 10:26:08.301310049 +0200
-@@ -0,0 +1,40 @@
-+/**
-+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
-+ *
-+ * Redistribution and use in source and binary forms, with or without
-+ * modification, are permitted provided that the following conditions
-+ * are met:
-+ * 1. Redistributions of source code must retain the above copyright
-+ * notice, this list of conditions, and the following disclaimer,
-+ * without modification.
-+ * 2. Redistributions in binary form must reproduce the above copyright
-+ * notice, this list of conditions and the following disclaimer in the
-+ * documentation and/or other materials provided with the distribution.
-+ * 3. The names of the above-listed copyright holders may not be used
-+ * to endorse or promote products derived from this software without
-+ * specific prior written permission.
-+ *
-+ * ALTERNATIVELY, this software may be distributed under the terms of the
-+ * GNU General Public License ("GPL") version 2, as published by the Free
-+ * Software Foundation.
-+ *
-+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
-+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ */
+
-+#ifndef VCHIQ_VCHIQ_H
-+#define VCHIQ_VCHIQ_H
++struct vchi_version {
++ uint32_t version;
++ uint32_t version_min;
++};
++#define VCHI_VERSION(v_) { v_, v_ }
++#define VCHI_VERSION_EX(v_, m_) { v_, m_ }
+
-+#include "vchiq_if.h"
-+#include "vchiq_util.h"
++typedef enum
++{
++ VCHI_VEC_POINTER,
++ VCHI_VEC_HANDLE,
++ VCHI_VEC_LIST
++} VCHI_MSG_VECTOR_TYPE_T;
++
++typedef struct vchi_msg_vector_ex {
+
++ VCHI_MSG_VECTOR_TYPE_T type;
++ union
++ {
++ // a memory handle
++ struct
++ {
++ VCHI_MEM_HANDLE_T handle;
++ uint32_t offset;
++ int32_t vec_len;
++ } handle;
++
++ // an ordinary data pointer
++ struct
++ {
++ const void *vec_base;
++ int32_t vec_len;
++ } ptr;
++
++ // a nested vector list
++ struct
++ {
++ struct vchi_msg_vector_ex *vec;
++ uint32_t vec_len;
++ } list;
++ } u;
++} VCHI_MSG_VECTOR_EX_T;
++
++
++// Construct an entry in a msg vector for a pointer (p) of length (l)
++#define VCHI_VEC_POINTER(p,l) VCHI_VEC_POINTER, { { (VCHI_MEM_HANDLE_T)(p), (l) } }
++
++// Construct an entry in a msg vector for a message handle (h), starting at offset (o) of length (l)
++#define VCHI_VEC_HANDLE(h,o,l) VCHI_VEC_HANDLE, { { (h), (o), (l) } }
++
++// Macros to manipulate 'FOURCC' values
++#define MAKE_FOURCC(x) ((int32_t)( (x[0] << 24) | (x[1] << 16) | (x[2] << 8) | x[3] ))
++#define FOURCC_TO_CHAR(x) (x >> 24) & 0xFF,(x >> 16) & 0xFF,(x >> 8) & 0xFF, x & 0xFF
++
++
++// Opaque service information
++struct opaque_vchi_service_t;
++
++// Descriptor for a held message. Allocated by client, initialised by vchi_msg_hold,
++// vchi_msg_iter_hold or vchi_msg_iter_hold_next. Fields are for internal VCHI use only.
++typedef struct
++{
++ struct opaque_vchi_service_t *service;
++ void *message;
++} VCHI_HELD_MSG_T;
++
++
++
++// structure used to provide the information needed to open a server or a client
++typedef struct {
++ struct vchi_version version;
++ int32_t service_id;
++ VCHI_CONNECTION_T *connection;
++ uint32_t rx_fifo_size;
++ uint32_t tx_fifo_size;
++ VCHI_CALLBACK_T callback;
++ void *callback_param;
++ /* client intends to receive bulk transfers of
++ odd lengths or into unaligned buffers */
++ int32_t want_unaligned_bulk_rx;
++ /* client intends to transmit bulk transfers of
++ odd lengths or out of unaligned buffers */
++ int32_t want_unaligned_bulk_tx;
++ /* client wants to check CRCs on (bulk) xfers.
++ Only needs to be set at 1 end - will do both directions. */
++ int32_t want_crc;
++} SERVICE_CREATION_T;
++
++// Opaque handle for a VCHI instance
++typedef struct opaque_vchi_instance_handle_t *VCHI_INSTANCE_T;
++
++// Opaque handle for a server or client
++typedef struct opaque_vchi_service_handle_t *VCHI_SERVICE_HANDLE_T;
++
++// Service registration & startup
++typedef void (*VCHI_SERVICE_INIT)(VCHI_INSTANCE_T initialise_instance, VCHI_CONNECTION_T **connections, uint32_t num_connections);
++
++typedef struct service_info_tag {
++ const char * const vll_filename; /* VLL to load to start this service. This is an empty string if VLL is "static" */
++ VCHI_SERVICE_INIT init; /* Service initialisation function */
++ void *vll_handle; /* VLL handle; NULL when unloaded or a "static VLL" in build */
++} SERVICE_INFO_T;
++
++/******************************************************************************
++ Global funcs - implementation is specific to which side you are on (local / remote)
++ *****************************************************************************/
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++extern /*@observer@*/ VCHI_CONNECTION_T * vchi_create_connection( const VCHI_CONNECTION_API_T * function_table,
++ const VCHI_MESSAGE_DRIVER_T * low_level);
++
++
++// Routine used to initialise the vchi on both local + remote connections
++extern int32_t vchi_initialise( VCHI_INSTANCE_T *instance_handle );
++
++extern int32_t vchi_exit( void );
++
++extern int32_t vchi_connect( VCHI_CONNECTION_T **connections,
++ const uint32_t num_connections,
++ VCHI_INSTANCE_T instance_handle );
++
++//When this is called, ensure that all services have no data pending.
++//Bulk transfers can remain 'queued'
++extern int32_t vchi_disconnect( VCHI_INSTANCE_T instance_handle );
++
++// Global control over bulk CRC checking
++extern int32_t vchi_crc_control( VCHI_CONNECTION_T *connection,
++ VCHI_CRC_CONTROL_T control );
++
++// helper functions
++extern void * vchi_allocate_buffer(VCHI_SERVICE_HANDLE_T handle, uint32_t *length);
++extern void vchi_free_buffer(VCHI_SERVICE_HANDLE_T handle, void *address);
++extern uint32_t vchi_current_time(VCHI_INSTANCE_T instance_handle);
++
++
++/******************************************************************************
++ Global service API
++ *****************************************************************************/
++// Routine to create a named service
++extern int32_t vchi_service_create( VCHI_INSTANCE_T instance_handle,
++ SERVICE_CREATION_T *setup,
++ VCHI_SERVICE_HANDLE_T *handle );
++
++// Routine to destory a service
++extern int32_t vchi_service_destroy( const VCHI_SERVICE_HANDLE_T handle );
++
++// Routine to open a named service
++extern int32_t vchi_service_open( VCHI_INSTANCE_T instance_handle,
++ SERVICE_CREATION_T *setup,
++ VCHI_SERVICE_HANDLE_T *handle);
++
++extern int32_t vchi_get_peer_version( const VCHI_SERVICE_HANDLE_T handle,
++ short *peer_version );
++
++// Routine to close a named service
++extern int32_t vchi_service_close( const VCHI_SERVICE_HANDLE_T handle );
++
++// Routine to increment ref count on a named service
++extern int32_t vchi_service_use( const VCHI_SERVICE_HANDLE_T handle );
++
++// Routine to decrement ref count on a named service
++extern int32_t vchi_service_release( const VCHI_SERVICE_HANDLE_T handle );
++
++// Routine to set a control option for a named service
++extern int32_t vchi_service_set_option( const VCHI_SERVICE_HANDLE_T handle,
++ VCHI_SERVICE_OPTION_T option,
++ int value);
++
++// Routine to send a message across a service
++extern int32_t vchi_msg_queue( VCHI_SERVICE_HANDLE_T handle,
++ const void *data,
++ uint32_t data_size,
++ VCHI_FLAGS_T flags,
++ void *msg_handle );
++
++// scatter-gather (vector) and send message
++int32_t vchi_msg_queuev_ex( VCHI_SERVICE_HANDLE_T handle,
++ VCHI_MSG_VECTOR_EX_T *vector,
++ uint32_t count,
++ VCHI_FLAGS_T flags,
++ void *msg_handle );
++
++// legacy scatter-gather (vector) and send message, only handles pointers
++int32_t vchi_msg_queuev( VCHI_SERVICE_HANDLE_T handle,
++ VCHI_MSG_VECTOR_T *vector,
++ uint32_t count,
++ VCHI_FLAGS_T flags,
++ void *msg_handle );
++
++// Routine to receive a msg from a service
++// Dequeue is equivalent to hold, copy into client buffer, release
++extern int32_t vchi_msg_dequeue( VCHI_SERVICE_HANDLE_T handle,
++ void *data,
++ uint32_t max_data_size_to_read,
++ uint32_t *actual_msg_size,
++ VCHI_FLAGS_T flags );
++
++// Routine to look at a message in place.
++// The message is not dequeued, so a subsequent call to peek or dequeue
++// will return the same message.
++extern int32_t vchi_msg_peek( VCHI_SERVICE_HANDLE_T handle,
++ void **data,
++ uint32_t *msg_size,
++ VCHI_FLAGS_T flags );
++
++// Routine to remove a message after it has been read in place with peek
++// The first message on the queue is dequeued.
++extern int32_t vchi_msg_remove( VCHI_SERVICE_HANDLE_T handle );
++
++// Routine to look at a message in place.
++// The message is dequeued, so the caller is left holding it; the descriptor is
++// filled in and must be released when the user has finished with the message.
++extern int32_t vchi_msg_hold( VCHI_SERVICE_HANDLE_T handle,
++ void **data, // } may be NULL, as info can be
++ uint32_t *msg_size, // } obtained from HELD_MSG_T
++ VCHI_FLAGS_T flags,
++ VCHI_HELD_MSG_T *message_descriptor );
++
++// Initialise an iterator to look through messages in place
++extern int32_t vchi_msg_look_ahead( VCHI_SERVICE_HANDLE_T handle,
++ VCHI_MSG_ITER_T *iter,
++ VCHI_FLAGS_T flags );
++
++/******************************************************************************
++ Global service support API - operations on held messages and message iterators
++ *****************************************************************************/
++
++// Routine to get the address of a held message
++extern void *vchi_held_msg_ptr( const VCHI_HELD_MSG_T *message );
++
++// Routine to get the size of a held message
++extern int32_t vchi_held_msg_size( const VCHI_HELD_MSG_T *message );
++
++// Routine to get the transmit timestamp as written into the header by the peer
++extern uint32_t vchi_held_msg_tx_timestamp( const VCHI_HELD_MSG_T *message );
++
++// Routine to get the reception timestamp, written as we parsed the header
++extern uint32_t vchi_held_msg_rx_timestamp( const VCHI_HELD_MSG_T *message );
++
++// Routine to release a held message after it has been processed
++extern int32_t vchi_held_msg_release( VCHI_HELD_MSG_T *message );
++
++// Indicates whether the iterator has a next message.
++extern int32_t vchi_msg_iter_has_next( const VCHI_MSG_ITER_T *iter );
++
++// Return the pointer and length for the next message and advance the iterator.
++extern int32_t vchi_msg_iter_next( VCHI_MSG_ITER_T *iter,
++ void **data,
++ uint32_t *msg_size );
++
++// Remove the last message returned by vchi_msg_iter_next.
++// Can only be called once after each call to vchi_msg_iter_next.
++extern int32_t vchi_msg_iter_remove( VCHI_MSG_ITER_T *iter );
++
++// Hold the last message returned by vchi_msg_iter_next.
++// Can only be called once after each call to vchi_msg_iter_next.
++extern int32_t vchi_msg_iter_hold( VCHI_MSG_ITER_T *iter,
++ VCHI_HELD_MSG_T *message );
++
++// Return information for the next message, and hold it, advancing the iterator.
++extern int32_t vchi_msg_iter_hold_next( VCHI_MSG_ITER_T *iter,
++ void **data, // } may be NULL
++ uint32_t *msg_size, // }
++ VCHI_HELD_MSG_T *message );
++
++
++/******************************************************************************
++ Global bulk API
++ *****************************************************************************/
++
++// Routine to prepare interface for a transfer from the other side
++extern int32_t vchi_bulk_queue_receive( VCHI_SERVICE_HANDLE_T handle,
++ void *data_dst,
++ uint32_t data_size,
++ VCHI_FLAGS_T flags,
++ void *transfer_handle );
++
++
++// Prepare interface for a transfer from the other side into relocatable memory.
++int32_t vchi_bulk_queue_receive_reloc( const VCHI_SERVICE_HANDLE_T handle,
++ VCHI_MEM_HANDLE_T h_dst,
++ uint32_t offset,
++ uint32_t data_size,
++ const VCHI_FLAGS_T flags,
++ void * const bulk_handle );
++
++// Routine to queue up data ready for transfer to the other (once they have signalled they are ready)
++extern int32_t vchi_bulk_queue_transmit( VCHI_SERVICE_HANDLE_T handle,
++ const void *data_src,
++ uint32_t data_size,
++ VCHI_FLAGS_T flags,
++ void *transfer_handle );
++
++
++/******************************************************************************
++ Configuration plumbing
++ *****************************************************************************/
++
++// function prototypes for the different mid layers (the state info gives the different physical connections)
++extern const VCHI_CONNECTION_API_T *single_get_func_table( void );
++//extern const VCHI_CONNECTION_API_T *local_server_get_func_table( void );
++//extern const VCHI_CONNECTION_API_T *local_client_get_func_table( void );
++
++// declare all message drivers here
++const VCHI_MESSAGE_DRIVER_T *vchi_mphi_message_driver_func_table( void );
++
++#ifdef __cplusplus
++}
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h 2015-08-26 10:26:08.301310049 +0200
++
++extern int32_t vchi_bulk_queue_transmit_reloc( VCHI_SERVICE_HANDLE_T handle,
++ VCHI_MEM_HANDLE_T h_src,
++ uint32_t offset,
++ uint32_t data_size,
++ VCHI_FLAGS_T flags,
++ void *transfer_handle );
++#endif /* VCHI_H_ */
++
++/****************************** End of file **********************************/
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_mh.h linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_mh.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchi/vchi_mh.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchi/vchi_mh.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,42 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -36530,18 +38533,18 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
-+#ifndef VCHIQ_2835_H
-+#define VCHIQ_2835_H
++#ifndef VCHI_MH_H_
++#define VCHI_MH_H_
+
-+#include "vchiq_pagelist.h"
++#include <linux/types.h>
+
-+#define VCHIQ_PLATFORM_FRAGMENTS_OFFSET_IDX 0
-+#define VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX 1
++typedef int32_t VCHI_MEM_HANDLE_T;
++#define VCHI_MEM_HANDLE_INVALID 0
+
-+#endif /* VCHIQ_2835_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c 2015-08-26 10:26:08.301310049 +0200
++#endif
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_arm.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,580 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -37123,9 +39126,55 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835_
+
+ kfree(pagelist);
+}
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_2835.h 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,42 @@
++/**
++ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef VCHIQ_2835_H
++#define VCHIQ_2835_H
++
++#include "vchiq_pagelist.h"
++
++#define VCHIQ_PLATFORM_FRAGMENTS_OFFSET_IDX 0
++#define VCHIQ_PLATFORM_FRAGMENTS_COUNT_IDX 1
++
++#endif /* VCHIQ_2835_H */
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,2903 @@
+/**
+ * Copyright (c) 2014 Raspberry Pi (Trading) Ltd. All rights reserved.
@@ -40030,9 +42079,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.c
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Broadcom Corporation");
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,220 @@
+/**
+ * Copyright (c) 2014 Raspberry Pi (Trading) Ltd. All rights reserved.
@@ -40254,9 +42303,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_arm.h
+
+
+#endif /* VCHIQ_ARM_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build_info.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,37 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -40295,9 +42344,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_build
+const char *vchiq_get_build_version(void);
+const char *vchiq_get_build_time(void);
+const char *vchiq_get_build_date(void);
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2010-2014 Broadcom. All rights reserved.
@@ -40368,9 +42417,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_cfg.h
+#endif
+
+#endif /* VCHIQ_CFG_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -40492,9 +42541,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_conne
+ mutex_unlock(&g_connected_mutex);
+}
+EXPORT_SYMBOL(vchiq_add_connected_callback);
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_connected.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,50 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -40546,9 +42595,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_conne
+void vchiq_call_connected_callbacks(void);
+
+#endif /* VCHIQ_CONNECTED_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,3934 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -44484,9 +46533,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.
+ numBytes = 0;
+ }
+}
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,712 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -45200,9 +47249,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_core.
+ size_t numBytes);
+
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,383 @@
+/**
+ * Copyright (c) 2014 Raspberry Pi (Trading) Ltd. All rights reserved.
@@ -45587,9 +47636,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debug
+}
+
+#endif /* CONFIG_DEBUG_FS */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debugfs.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2014 Raspberry Pi (Trading) Ltd. All rights reserved.
@@ -45643,9 +47692,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_debug
+void vchiq_debugfs_remove_instance(VCHIQ_INSTANCE_T instance);
+
+#endif /* VCHIQ_DEBUGFS_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genversion 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,87 @@
+#!/usr/bin/perl -w
+
@@ -45734,9 +47783,53 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_genve
+ return vchiq_build_time;
+}
+EOF
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq.h 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,40 @@
++/**
++ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef VCHIQ_VCHIQ_H
++#define VCHIQ_VCHIQ_H
++
++#include "vchiq_if.h"
++#include "vchiq_util.h"
++
++#endif
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,189 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -45927,9 +48020,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_if.h
+ short *peer_version);
+
+#endif /* VCHIQ_IF_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,131 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -46062,9 +48155,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_ioctl
+#define VCHIQ_IOC_MAX 17
+
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_lib.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,458 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -46524,9 +48617,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_kern_
+
+ return status;
+}
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killable.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,69 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -46597,9 +48690,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_killa
+#define mutex_lock_interruptible mutex_lock_interruptible_killable
+
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdrv.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,71 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -46672,9 +48765,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_memdr
+ const VCHIQ_PLATFORM_DATA_T * platform_data);
+
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h 2015-08-26 10:26:08.301310049 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagelist.h 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,58 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -46734,9 +48827,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_pagel
+} FRAGMENTS_T;
+
+#endif /* VCHIQ_PAGELIST_H */
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c 2015-08-26 10:26:08.305310104 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,860 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -47598,10 +49691,10 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_shim.
+ return ret;
+}
+EXPORT_SYMBOL(vchi_service_release);
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c 2015-08-26 10:26:08.305310104 +0200
-@@ -0,0 +1,152 @@
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.c 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,156 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
+ *
@@ -47650,6 +49743,7 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.
+ queue->size = size;
+ queue->read = 0;
+ queue->write = 0;
++ queue->initialized = 1;
+
+ sema_init(&queue->pop, 0);
+ sema_init(&queue->push, 0);
@@ -47680,6 +49774,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.
+
+void vchiu_queue_push(VCHIU_QUEUE_T *queue, VCHIQ_HEADER_T *header)
+{
++ if (!queue->initialized)
++ return;
++
+ while (queue->write == queue->read + queue->size) {
+ if (down_interruptible(&queue->pop) != 0) {
+ flush_signals(current);
@@ -47754,10 +49851,10 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.
+
+ return header;
+}
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h 2015-08-26 10:26:08.305310104 +0200
-@@ -0,0 +1,81 @@
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.h 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,82 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
+ *
@@ -47820,6 +49917,7 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.
+ int size;
+ int read;
+ int write;
++ int initialized;
+
+ struct semaphore pop;
+ struct semaphore push;
@@ -47839,9 +49937,9 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_util.
+extern VCHIQ_HEADER_T *vchiu_queue_pop(VCHIU_QUEUE_T *queue);
+
+#endif
-diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c
---- linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c 2015-08-26 10:26:08.305310104 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c
+--- linux-4.1.10/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_version.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,59 @@
+/**
+ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
@@ -47902,9 +50000,40 @@ diff -Nur linux-4.1.6/drivers/misc/vc04_services/interface/vchiq_arm/vchiq_versi
+{
+ return vchiq_build_time;
+}
-diff -Nur linux-4.1.6/drivers/mmc/card/block.c linux-rpi/drivers/mmc/card/block.c
---- linux-4.1.6/drivers/mmc/card/block.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/card/block.c 2015-08-26 10:26:08.305310104 +0200
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/Kconfig linux-rpi/drivers/misc/vc04_services/Kconfig
+--- linux-4.1.10/drivers/misc/vc04_services/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/Kconfig 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,9 @@
++config BCM2708_VCHIQ
++ tristate "Videocore VCHIQ"
++ depends on RASPBERRYPI_FIRMWARE
++ default y
++ help
++ Kernel to VideoCore communication interface for the
++ BCM2708 family of products.
++ Defaults to Y when the Broadcom Videocore services
++ are included in the build, N otherwise.
+diff -Nur linux-4.1.10/drivers/misc/vc04_services/Makefile linux-rpi/drivers/misc/vc04_services/Makefile
+--- linux-4.1.10/drivers/misc/vc04_services/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/misc/vc04_services/Makefile 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,14 @@
++obj-$(CONFIG_BCM2708_VCHIQ) += vchiq.o
++
++vchiq-objs := \
++ interface/vchiq_arm/vchiq_core.o \
++ interface/vchiq_arm/vchiq_arm.o \
++ interface/vchiq_arm/vchiq_kern_lib.o \
++ interface/vchiq_arm/vchiq_2835_arm.o \
++ interface/vchiq_arm/vchiq_debugfs.o \
++ interface/vchiq_arm/vchiq_shim.o \
++ interface/vchiq_arm/vchiq_util.o \
++ interface/vchiq_arm/vchiq_connected.o \
++
++ccflags-y += -DVCOS_VERIFY_BKPTS=1 -Idrivers/misc/vc04_services -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000
++
+diff -Nur linux-4.1.10/drivers/mmc/card/block.c linux-rpi/drivers/mmc/card/block.c
+--- linux-4.1.10/drivers/mmc/card/block.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/card/block.c 2015-10-07 16:40:46.000000000 +0200
@@ -1415,6 +1415,7 @@
brq->data.blocks = card->host->ops->multi_io_quirk(card,
(rq_data_dir(req) == READ) ?
@@ -47913,9 +50042,9 @@ diff -Nur linux-4.1.6/drivers/mmc/card/block.c linux-rpi/drivers/mmc/card/block.
brq->data.blocks);
}
-diff -Nur linux-4.1.6/drivers/mmc/core/quirks.c linux-rpi/drivers/mmc/core/quirks.c
---- linux-4.1.6/drivers/mmc/core/quirks.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/core/quirks.c 2015-08-26 10:26:08.309310160 +0200
+diff -Nur linux-4.1.10/drivers/mmc/core/quirks.c linux-rpi/drivers/mmc/core/quirks.c
+--- linux-4.1.10/drivers/mmc/core/quirks.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/core/quirks.c 2015-10-07 16:40:46.000000000 +0200
@@ -71,6 +71,7 @@
void mmc_fixup_device(struct mmc_card *card, const struct mmc_fixup *table)
@@ -47935,71 +50064,10 @@ diff -Nur linux-4.1.6/drivers/mmc/core/quirks.c linux-rpi/drivers/mmc/core/quirk
+ card->quirks |= MMC_QUIRK_BLK_NO_CMD23;
}
EXPORT_SYMBOL(mmc_fixup_device);
-diff -Nur linux-4.1.6/drivers/mmc/host/Kconfig linux-rpi/drivers/mmc/host/Kconfig
---- linux-4.1.6/drivers/mmc/host/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/host/Kconfig 2015-08-26 10:26:08.309310160 +0200
-@@ -4,6 +4,45 @@
-
- comment "MMC/SD/SDIO Host Controller Drivers"
-
-+config MMC_BCM2835
-+ tristate "MMC support on BCM2835"
-+ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
-+ help
-+ This selects the MMC Interface on BCM2835.
-+
-+ If you have a controller with this interface, say Y or M here.
-+
-+ If unsure, say N.
-+
-+config MMC_BCM2835_DMA
-+ bool "DMA support on BCM2835 Arasan controller"
-+ depends on MMC_BCM2835
-+ help
-+ Enable DMA support on the Arasan SDHCI controller in Broadcom 2708
-+ based chips.
-+
-+ If unsure, say N.
-+
-+config MMC_BCM2835_PIO_DMA_BARRIER
-+ int "Block count limit for PIO transfers"
-+ depends on MMC_BCM2835 && MMC_BCM2835_DMA
-+ range 0 256
-+ default 2
-+ help
-+ The inclusive limit in bytes under which PIO will be used instead of DMA
-+
-+ If unsure, say 2 here.
-+
-+config MMC_BCM2835_SDHOST
-+ tristate "Support for the SDHost controller on BCM2708/9"
-+ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
-+ help
-+ This selects the SDHost controller on BCM2835/6.
-+
-+ If you have a controller with this interface, say Y or M here.
-+
-+ If unsure, say N.
-+
- config MMC_ARMMMCI
- tristate "ARM AMBA Multimedia Card Interface support"
- depends on ARM_AMBA
-diff -Nur linux-4.1.6/drivers/mmc/host/Makefile linux-rpi/drivers/mmc/host/Makefile
---- linux-4.1.6/drivers/mmc/host/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/host/Makefile 2015-08-26 10:26:08.309310160 +0200
-@@ -18,6 +18,8 @@
- obj-$(CONFIG_MMC_SDHCI_SIRF) += sdhci-sirf.o
- obj-$(CONFIG_MMC_SDHCI_F_SDH30) += sdhci_f_sdh30.o
- obj-$(CONFIG_MMC_SDHCI_SPEAR) += sdhci-spear.o
-+obj-$(CONFIG_MMC_BCM2835_SDHOST) += bcm2835-sdhost.o
-+obj-$(CONFIG_MMC_BCM2835) += bcm2835-mmc.o
- obj-$(CONFIG_MMC_WBSD) += wbsd.o
- obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
- obj-$(CONFIG_MMC_OMAP) += omap.o
-diff -Nur linux-4.1.6/drivers/mmc/host/bcm2835-mmc.c linux-rpi/drivers/mmc/host/bcm2835-mmc.c
---- linux-4.1.6/drivers/mmc/host/bcm2835-mmc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/mmc/host/bcm2835-mmc.c 2015-08-26 10:26:08.309310160 +0200
-@@ -0,0 +1,1558 @@
+diff -Nur linux-4.1.10/drivers/mmc/host/bcm2835-mmc.c linux-rpi/drivers/mmc/host/bcm2835-mmc.c
+--- linux-4.1.10/drivers/mmc/host/bcm2835-mmc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/mmc/host/bcm2835-mmc.c 2015-10-07 16:40:46.000000000 +0200
+@@ -0,0 +1,1559 @@
+/*
+ * BCM2835 MMC host driver.
+ *
@@ -49329,8 +51397,9 @@ diff -Nur linux-4.1.6/drivers/mmc/host/bcm2835-mmc.c linux-rpi/drivers/mmc/host/
+ mmc->max_busy_timeout = (1 << 27) / host->timeout_clk;
+#endif
+ /* host controller capabilities */
-+ mmc->caps = MMC_CAP_CMD23 | MMC_CAP_ERASE | MMC_CAP_NEEDS_POLL | MMC_CAP_SDIO_IRQ |
-+ MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_4_BIT_DATA;
++ mmc->caps |= MMC_CAP_CMD23 | MMC_CAP_ERASE | MMC_CAP_NEEDS_POLL |
++ MMC_CAP_SDIO_IRQ | MMC_CAP_SD_HIGHSPEED |
++ MMC_CAP_MMC_HIGHSPEED | MMC_CAP_4_BIT_DATA;
+
+ host->flags = SDHCI_AUTO_CMD23;
+
@@ -49558,9 +51627,9 @@ diff -Nur linux-4.1.6/drivers/mmc/host/bcm2835-mmc.c linux-rpi/drivers/mmc/host/
+MODULE_DESCRIPTION("BCM2835 SDHCI driver");
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Gellert Weisz");
-diff -Nur linux-4.1.6/drivers/mmc/host/bcm2835-sdhost.c linux-rpi/drivers/mmc/host/bcm2835-sdhost.c
---- linux-4.1.6/drivers/mmc/host/bcm2835-sdhost.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/mmc/host/bcm2835-sdhost.c 2015-08-26 10:26:08.309310160 +0200
+diff -Nur linux-4.1.10/drivers/mmc/host/bcm2835-sdhost.c linux-rpi/drivers/mmc/host/bcm2835-sdhost.c
+--- linux-4.1.10/drivers/mmc/host/bcm2835-sdhost.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/mmc/host/bcm2835-sdhost.c 2015-10-07 16:40:46.000000000 +0200
@@ -0,0 +1,1930 @@
+/*
+ * BCM2835 SD host driver.
@@ -51492,9 +53561,70 @@ diff -Nur linux-4.1.6/drivers/mmc/host/bcm2835-sdhost.c linux-rpi/drivers/mmc/ho
+MODULE_DESCRIPTION("BCM2835 SDHost driver");
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Phil Elwell");
-diff -Nur linux-4.1.6/drivers/mmc/host/omap_hsmmc.c linux-rpi/drivers/mmc/host/omap_hsmmc.c
---- linux-4.1.6/drivers/mmc/host/omap_hsmmc.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/host/omap_hsmmc.c 2015-08-26 10:26:08.313310215 +0200
+diff -Nur linux-4.1.10/drivers/mmc/host/Kconfig linux-rpi/drivers/mmc/host/Kconfig
+--- linux-4.1.10/drivers/mmc/host/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/host/Kconfig 2015-10-07 16:40:46.000000000 +0200
+@@ -4,6 +4,45 @@
+
+ comment "MMC/SD/SDIO Host Controller Drivers"
+
++config MMC_BCM2835
++ tristate "MMC support on BCM2835"
++ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
++ help
++ This selects the MMC Interface on BCM2835.
++
++ If you have a controller with this interface, say Y or M here.
++
++ If unsure, say N.
++
++config MMC_BCM2835_DMA
++ bool "DMA support on BCM2835 Arasan controller"
++ depends on MMC_BCM2835
++ help
++ Enable DMA support on the Arasan SDHCI controller in Broadcom 2708
++ based chips.
++
++ If unsure, say N.
++
++config MMC_BCM2835_PIO_DMA_BARRIER
++ int "Block count limit for PIO transfers"
++ depends on MMC_BCM2835 && MMC_BCM2835_DMA
++ range 0 256
++ default 2
++ help
++ The inclusive limit in bytes under which PIO will be used instead of DMA
++
++ If unsure, say 2 here.
++
++config MMC_BCM2835_SDHOST
++ tristate "Support for the SDHost controller on BCM2708/9"
++ depends on MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835
++ help
++ This selects the SDHost controller on BCM2835/6.
++
++ If you have a controller with this interface, say Y or M here.
++
++ If unsure, say N.
++
+ config MMC_ARMMMCI
+ tristate "ARM AMBA Multimedia Card Interface support"
+ depends on ARM_AMBA
+diff -Nur linux-4.1.10/drivers/mmc/host/Makefile linux-rpi/drivers/mmc/host/Makefile
+--- linux-4.1.10/drivers/mmc/host/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/host/Makefile 2015-10-07 16:40:46.000000000 +0200
+@@ -18,6 +18,8 @@
+ obj-$(CONFIG_MMC_SDHCI_SIRF) += sdhci-sirf.o
+ obj-$(CONFIG_MMC_SDHCI_F_SDH30) += sdhci_f_sdh30.o
+ obj-$(CONFIG_MMC_SDHCI_SPEAR) += sdhci-spear.o
++obj-$(CONFIG_MMC_BCM2835_SDHOST) += bcm2835-sdhost.o
++obj-$(CONFIG_MMC_BCM2835) += bcm2835-mmc.o
+ obj-$(CONFIG_MMC_WBSD) += wbsd.o
+ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
+ obj-$(CONFIG_MMC_OMAP) += omap.o
+diff -Nur linux-4.1.10/drivers/mmc/host/omap_hsmmc.c linux-rpi/drivers/mmc/host/omap_hsmmc.c
+--- linux-4.1.10/drivers/mmc/host/omap_hsmmc.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/host/omap_hsmmc.c 2015-10-07 16:40:46.000000000 +0200
@@ -1749,7 +1749,9 @@
}
@@ -51506,9 +53636,9 @@ diff -Nur linux-4.1.6/drivers/mmc/host/omap_hsmmc.c linux-rpi/drivers/mmc/host/o
{
/* This controller can't do multiblock reads due to hw bugs */
if (direction == MMC_DATA_READ)
-diff -Nur linux-4.1.6/drivers/mmc/host/sh_mobile_sdhi.c linux-rpi/drivers/mmc/host/sh_mobile_sdhi.c
---- linux-4.1.6/drivers/mmc/host/sh_mobile_sdhi.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/host/sh_mobile_sdhi.c 2015-08-26 10:26:08.317310271 +0200
+diff -Nur linux-4.1.10/drivers/mmc/host/sh_mobile_sdhi.c linux-rpi/drivers/mmc/host/sh_mobile_sdhi.c
+--- linux-4.1.10/drivers/mmc/host/sh_mobile_sdhi.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/host/sh_mobile_sdhi.c 2015-10-07 16:40:46.000000000 +0200
@@ -170,7 +170,9 @@
}
@@ -51520,9 +53650,9 @@ diff -Nur linux-4.1.6/drivers/mmc/host/sh_mobile_sdhi.c linux-rpi/drivers/mmc/ho
{
/*
* In Renesas controllers, when performing a
-diff -Nur linux-4.1.6/drivers/mmc/host/tmio_mmc_pio.c linux-rpi/drivers/mmc/host/tmio_mmc_pio.c
---- linux-4.1.6/drivers/mmc/host/tmio_mmc_pio.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/mmc/host/tmio_mmc_pio.c 2015-08-26 10:26:08.317310271 +0200
+diff -Nur linux-4.1.10/drivers/mmc/host/tmio_mmc_pio.c linux-rpi/drivers/mmc/host/tmio_mmc_pio.c
+--- linux-4.1.10/drivers/mmc/host/tmio_mmc_pio.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mmc/host/tmio_mmc_pio.c 2015-10-07 16:40:46.000000000 +0200
@@ -1001,7 +1001,9 @@
}
@@ -51534,9 +53664,309 @@ diff -Nur linux-4.1.6/drivers/mmc/host/tmio_mmc_pio.c linux-rpi/drivers/mmc/host
{
struct tmio_mmc_host *host = mmc_priv(card->host);
-diff -Nur linux-4.1.6/drivers/net/ethernet/microchip/enc28j60.c linux-rpi/drivers/net/ethernet/microchip/enc28j60.c
---- linux-4.1.6/drivers/net/ethernet/microchip/enc28j60.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/net/ethernet/microchip/enc28j60.c 2015-08-26 10:26:08.525313161 +0200
+diff -Nur linux-4.1.10/drivers/mtd/nand/bcm2835_smi_nand.c linux-rpi/drivers/mtd/nand/bcm2835_smi_nand.c
+--- linux-4.1.10/drivers/mtd/nand/bcm2835_smi_nand.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/mtd/nand/bcm2835_smi_nand.c 2015-10-07 16:40:47.000000000 +0200
+@@ -0,0 +1,268 @@
++/**
++ * NAND flash driver for Broadcom Secondary Memory Interface
++ *
++ * Written by Luke Wren <luke@raspberrypi.org>
++ * Copyright (c) 2015, Raspberry Pi (Trading) Ltd.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of.h>
++#include <linux/platform_device.h>
++#include <linux/slab.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/partitions.h>
++
++#include <linux/broadcom/bcm2835_smi.h>
++
++#define DEVICE_NAME "bcm2835-smi-nand"
++#define DRIVER_NAME "smi-nand-bcm2835"
++
++struct bcm2835_smi_nand_host {
++ struct bcm2835_smi_instance *smi_inst;
++ struct nand_chip nand_chip;
++ struct mtd_info mtd;
++ struct device *dev;
++};
++
++/****************************************************************************
++*
++* NAND functionality implementation
++*
++****************************************************************************/
++
++#define SMI_NAND_CLE_PIN 0x01
++#define SMI_NAND_ALE_PIN 0x02
++
++static inline void bcm2835_smi_nand_cmd_ctrl(struct mtd_info *mtd, int cmd,
++ unsigned int ctrl)
++{
++ uint32_t cmd32 = cmd;
++ uint32_t addr = ~(SMI_NAND_CLE_PIN | SMI_NAND_ALE_PIN);
++ struct bcm2835_smi_nand_host *host = dev_get_drvdata(mtd->dev.parent);
++ struct bcm2835_smi_instance *inst = host->smi_inst;
++
++ if (ctrl & NAND_CLE)
++ addr |= SMI_NAND_CLE_PIN;
++ if (ctrl & NAND_ALE)
++ addr |= SMI_NAND_ALE_PIN;
++ /* Lower ALL the CS pins! */
++ if (ctrl & NAND_NCE)
++ addr &= (SMI_NAND_CLE_PIN | SMI_NAND_ALE_PIN);
++
++ bcm2835_smi_set_address(inst, addr);
++
++ if (cmd != NAND_CMD_NONE)
++ bcm2835_smi_write_buf(inst, &cmd32, 1);
++}
++
++static inline uint8_t bcm2835_smi_nand_read_byte(struct mtd_info *mtd)
++{
++ uint8_t byte;
++ struct bcm2835_smi_nand_host *host = dev_get_drvdata(mtd->dev.parent);
++ struct bcm2835_smi_instance *inst = host->smi_inst;
++
++ bcm2835_smi_read_buf(inst, &byte, 1);
++ return byte;
++}
++
++static inline void bcm2835_smi_nand_write_byte(struct mtd_info *mtd,
++ uint8_t byte)
++{
++ struct bcm2835_smi_nand_host *host = dev_get_drvdata(mtd->dev.parent);
++ struct bcm2835_smi_instance *inst = host->smi_inst;
++
++ bcm2835_smi_write_buf(inst, &byte, 1);
++}
++
++static inline void bcm2835_smi_nand_write_buf(struct mtd_info *mtd,
++ const uint8_t *buf, int len)
++{
++ struct bcm2835_smi_nand_host *host = dev_get_drvdata(mtd->dev.parent);
++ struct bcm2835_smi_instance *inst = host->smi_inst;
++
++ bcm2835_smi_write_buf(inst, buf, len);
++}
++
++static inline void bcm2835_smi_nand_read_buf(struct mtd_info *mtd,
++ uint8_t *buf, int len)
++{
++ struct bcm2835_smi_nand_host *host = dev_get_drvdata(mtd->dev.parent);
++ struct bcm2835_smi_instance *inst = host->smi_inst;
++
++ bcm2835_smi_read_buf(inst, buf, len);
++}
++
++/****************************************************************************
++*
++* Probe and remove functions
++*
++***************************************************************************/
++
++static int bcm2835_smi_nand_probe(struct platform_device *pdev)
++{
++ struct bcm2835_smi_nand_host *host;
++ struct nand_chip *this;
++ struct mtd_info *mtd;
++ struct device *dev = &pdev->dev;
++ struct device_node *node = dev->of_node, *smi_node;
++ struct mtd_part_parser_data ppdata;
++ struct smi_settings *smi_settings;
++ struct bcm2835_smi_instance *smi_inst;
++ int ret = -ENXIO;
++
++ if (!node) {
++ dev_err(dev, "No device tree node supplied!");
++ return -EINVAL;
++ }
++
++ smi_node = of_parse_phandle(node, "smi_handle", 0);
++
++ /* Request use of SMI peripheral: */
++ smi_inst = bcm2835_smi_get(smi_node);
++
++ if (!smi_inst) {
++ dev_err(dev, "Could not register with SMI.");
++ return -EPROBE_DEFER;
++ }
++
++ /* Set SMI timing and bus width */
++
++ smi_settings = bcm2835_smi_get_settings_from_regs(smi_inst);
++
++ smi_settings->data_width = SMI_WIDTH_8BIT;
++ smi_settings->read_setup_time = 2;
++ smi_settings->read_hold_time = 1;
++ smi_settings->read_pace_time = 1;
++ smi_settings->read_strobe_time = 3;
++
++ smi_settings->write_setup_time = 2;
++ smi_settings->write_hold_time = 1;
++ smi_settings->write_pace_time = 1;
++ smi_settings->write_strobe_time = 3;
++
++ bcm2835_smi_set_regs_from_settings(smi_inst);
++
++ host = devm_kzalloc(dev, sizeof(struct bcm2835_smi_nand_host),
++ GFP_KERNEL);
++ if (!host)
++ return -ENOMEM;
++
++ host->dev = dev;
++ host->smi_inst = smi_inst;
++
++ platform_set_drvdata(pdev, host);
++
++ /* Link the structures together */
++
++ this = &host->nand_chip;
++ mtd = &host->mtd;
++ mtd->priv = this;
++ mtd->owner = THIS_MODULE;
++ mtd->dev.parent = dev;
++ mtd->name = DRIVER_NAME;
++ ppdata.of_node = node;
++
++ /* 20 us command delay time... */
++ this->chip_delay = 20;
++
++ this->priv = host;
++ this->cmd_ctrl = bcm2835_smi_nand_cmd_ctrl;
++ this->read_byte = bcm2835_smi_nand_read_byte;
++ this->write_byte = bcm2835_smi_nand_write_byte;
++ this->write_buf = bcm2835_smi_nand_write_buf;
++ this->read_buf = bcm2835_smi_nand_read_buf;
++
++ this->ecc.mode = NAND_ECC_SOFT;
++
++ /* Should never be accessed directly: */
++
++ this->IO_ADDR_R = (void *)0xdeadbeef;
++ this->IO_ADDR_W = (void *)0xdeadbeef;
++
++ /* First scan to find the device and get the page size */
++
++ if (nand_scan_ident(mtd, 1, NULL))
++ return -ENXIO;
++
++ /* Second phase scan */
++
++ if (nand_scan_tail(mtd))
++ return -ENXIO;
++
++ ret = mtd_device_parse_register(mtd, NULL, &ppdata, NULL, 0);
++ if (!ret)
++ return 0;
++
++ nand_release(mtd);
++ return -EINVAL;
++}
++
++static int bcm2835_smi_nand_remove(struct platform_device *pdev)
++{
++ struct bcm2835_smi_nand_host *host = platform_get_drvdata(pdev);
++
++ nand_release(&host->mtd);
++
++ return 0;
++}
++
++/****************************************************************************
++*
++* Register the driver with device tree
++*
++***************************************************************************/
++
++static const struct of_device_id bcm2835_smi_nand_of_match[] = {
++ {.compatible = "brcm,bcm2835-smi-nand",},
++ { /* sentinel */ }
++};
++
++MODULE_DEVICE_TABLE(of, bcm2835_smi_nand_of_match);
++
++static struct platform_driver bcm2835_smi_nand_driver = {
++ .probe = bcm2835_smi_nand_probe,
++ .remove = bcm2835_smi_nand_remove,
++ .driver = {
++ .name = DRIVER_NAME,
++ .owner = THIS_MODULE,
++ .of_match_table = bcm2835_smi_nand_of_match,
++ },
++};
++
++module_platform_driver(bcm2835_smi_nand_driver);
++
++MODULE_ALIAS("platform:smi-nand-bcm2835");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION
++ ("Driver for NAND chips using Broadcom Secondary Memory Interface");
++MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
+diff -Nur linux-4.1.10/drivers/mtd/nand/Kconfig linux-rpi/drivers/mtd/nand/Kconfig
+--- linux-4.1.10/drivers/mtd/nand/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mtd/nand/Kconfig 2015-10-07 16:40:47.000000000 +0200
+@@ -41,6 +41,13 @@
+ tristate
+ default n
+
++config MTD_NAND_BCM2835_SMI
++ tristate "Use Broadcom's Secondary Memory Interface as a NAND controller (BCM283x)"
++ depends on (MACH_BCM2708 || MACH_BCM2709 || ARCH_BCM2835) && BCM2835_SMI && MTD_NAND
++ default m
++ help
++ Uses the BCM2835's SMI peripheral as a NAND controller.
++
+ config MTD_NAND_DENALI
+ tristate "Support Denali NAND controller"
+ depends on HAS_DMA
+diff -Nur linux-4.1.10/drivers/mtd/nand/Makefile linux-rpi/drivers/mtd/nand/Makefile
+--- linux-4.1.10/drivers/mtd/nand/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/mtd/nand/Makefile 2015-10-07 16:40:47.000000000 +0200
+@@ -14,6 +14,7 @@
+ obj-$(CONFIG_MTD_NAND_DENALI_PCI) += denali_pci.o
+ obj-$(CONFIG_MTD_NAND_DENALI_DT) += denali_dt.o
+ obj-$(CONFIG_MTD_NAND_AU1550) += au1550nd.o
++obj-$(CONFIG_MTD_NAND_BCM2835_SMI) += bcm2835_smi_nand.o
+ obj-$(CONFIG_MTD_NAND_BF5XX) += bf5xx_nand.o
+ obj-$(CONFIG_MTD_NAND_S3C2410) += s3c2410.o
+ obj-$(CONFIG_MTD_NAND_DAVINCI) += davinci_nand.o
+diff -Nur linux-4.1.10/drivers/net/ethernet/microchip/enc28j60.c linux-rpi/drivers/net/ethernet/microchip/enc28j60.c
+--- linux-4.1.10/drivers/net/ethernet/microchip/enc28j60.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/net/ethernet/microchip/enc28j60.c 2015-10-07 16:40:48.000000000 +0200
@@ -1630,10 +1630,21 @@
return 0;
}
@@ -51559,9 +53989,9 @@ diff -Nur linux-4.1.6/drivers/net/ethernet/microchip/enc28j60.c linux-rpi/driver
},
.probe = enc28j60_probe,
.remove = enc28j60_remove,
-diff -Nur linux-4.1.6/drivers/net/usb/smsc95xx.c linux-rpi/drivers/net/usb/smsc95xx.c
---- linux-4.1.6/drivers/net/usb/smsc95xx.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/net/usb/smsc95xx.c 2015-08-26 10:26:08.605314274 +0200
+diff -Nur linux-4.1.10/drivers/net/usb/smsc95xx.c linux-rpi/drivers/net/usb/smsc95xx.c
+--- linux-4.1.10/drivers/net/usb/smsc95xx.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/net/usb/smsc95xx.c 2015-10-07 16:40:49.000000000 +0200
@@ -59,6 +59,7 @@
#define SUSPEND_SUSPEND3 (0x08)
#define SUSPEND_ALLMODES (SUSPEND_SUSPEND0 | SUSPEND_SUSPEND1 | \
@@ -51662,9 +54092,9 @@ diff -Nur linux-4.1.6/drivers/net/usb/smsc95xx.c linux-rpi/drivers/net/usb/smsc9
usbnet_skb_return(dev, ax_skb);
}
-diff -Nur linux-4.1.6/drivers/net/wireless/Kconfig linux-rpi/drivers/net/wireless/Kconfig
---- linux-4.1.6/drivers/net/wireless/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/net/wireless/Kconfig 2015-08-26 10:26:08.617314440 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/Kconfig linux-rpi/drivers/net/wireless/Kconfig
+--- linux-4.1.10/drivers/net/wireless/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/net/wireless/Kconfig 2015-10-07 16:40:49.000000000 +0200
@@ -277,7 +277,9 @@
source "drivers/net/wireless/orinoco/Kconfig"
source "drivers/net/wireless/p54/Kconfig"
@@ -51676,9 +54106,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/Kconfig linux-rpi/drivers/net/wireles
source "drivers/net/wireless/ti/Kconfig"
source "drivers/net/wireless/zd1211rw/Kconfig"
source "drivers/net/wireless/mwifiex/Kconfig"
-diff -Nur linux-4.1.6/drivers/net/wireless/Makefile linux-rpi/drivers/net/wireless/Makefile
---- linux-4.1.6/drivers/net/wireless/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/net/wireless/Makefile 2015-08-26 10:26:08.617314440 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/Makefile linux-rpi/drivers/net/wireless/Makefile
+--- linux-4.1.10/drivers/net/wireless/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/net/wireless/Makefile 2015-10-07 16:40:49.000000000 +0200
@@ -24,7 +24,8 @@
obj-$(CONFIG_ZD1211RW) += zd1211rw/
obj-$(CONFIG_RTL8180) += rtl818x/
@@ -51698,9 +54128,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/Makefile linux-rpi/drivers/net/wirele
obj-$(CONFIG_P54_COMMON) += p54/
obj-$(CONFIG_ATH_CARDS) += ath/
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/Kconfig linux-rpi/drivers/net/wireless/mediatek/Kconfig
---- linux-4.1.6/drivers/net/wireless/mediatek/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/Kconfig 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/Kconfig linux-rpi/drivers/net/wireless/mediatek/Kconfig
+--- linux-4.1.10/drivers/net/wireless/mediatek/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/Kconfig 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,10 @@
+menuconfig WL_MEDIATEK
+ bool "Mediatek Wireless LAN support"
@@ -51712,37 +54142,14 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/Kconfig linux-rpi/drivers/ne
+if WL_MEDIATEK
+source "drivers/net/wireless/mediatek/mt7601u/Kconfig"
+endif # WL_MEDIATEK
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/Makefile linux-rpi/drivers/net/wireless/mediatek/Makefile
---- linux-4.1.6/drivers/net/wireless/mediatek/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/Makefile 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/Makefile linux-rpi/drivers/net/wireless/mediatek/Makefile
+--- linux-4.1.10/drivers/net/wireless/mediatek/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/Makefile 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1 @@
+obj-$(CONFIG_MT7601U) += mt7601u/
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/Kconfig linux-rpi/drivers/net/wireless/mediatek/mt7601u/Kconfig
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/Kconfig 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,6 @@
-+config MT7601U
-+ tristate "MediaTek MT7601U (USB) support"
-+ depends on MAC80211
-+ depends on USB
-+ ---help---
-+ This adds support for MT7601U-based wireless USB dongles.
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/Makefile linux-rpi/drivers/net/wireless/mediatek/mt7601u/Makefile
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/Makefile 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,9 @@
-+ccflags-y += -D__CHECK_ENDIAN__
-+
-+obj-$(CONFIG_MT7601U) += mt7601u.o
-+
-+mt7601u-objs = \
-+ usb.o init.o main.o mcu.o trace.o dma.o core.o eeprom.o phy.o \
-+ mac.o util.o debugfs.o tx.o
-+
-+CFLAGS_trace.o := -I$(src)
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/core.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/core.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/core.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/core.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/core.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/core.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/core.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -51822,9 +54229,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/core.c linux-rpi/dri
+
+ return false;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/debugfs.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/debugfs.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/debugfs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/debugfs.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/debugfs.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/debugfs.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/debugfs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/debugfs.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,172 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -51998,10 +54405,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/debugfs.c linux-rpi/
+ debugfs_create_file("eeprom_param", S_IRUSR, dir, dev,
+ &fops_eeprom_param);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.c 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,505 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/dma.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,529 @@
+/*
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
+ *
@@ -52116,7 +54523,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/driv
+ if (!skb)
+ return;
+
-+ ieee80211_rx_ni(dev->hw, skb);
++ spin_lock(&dev->mac_lock);
++ ieee80211_rx(dev->hw, skb);
++ spin_unlock(&dev->mac_lock);
+}
+
+static u16 mt7601u_rx_next_seg_len(u8 *data, u32 data_len)
@@ -52240,23 +54649,42 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/driv
+ skb = q->e[q->start].skb;
+ trace_mt_tx_dma_done(dev, skb);
+
-+ mt7601u_tx_status(dev, skb);
++ __skb_queue_tail(&dev->tx_skb_done, skb);
++ tasklet_schedule(&dev->tx_tasklet);
+
+ if (q->used == q->entries - q->entries / 8)
+ ieee80211_wake_queue(dev->hw, skb_get_queue_mapping(skb));
+
+ q->start = (q->start + 1) % q->entries;
+ q->used--;
++out:
++ spin_unlock_irqrestore(&dev->tx_lock, flags);
++}
+
-+ if (urb->status)
-+ goto out;
++static void mt7601u_tx_tasklet(unsigned long data)
++{
++ struct mt7601u_dev *dev = (struct mt7601u_dev *) data;
++ struct sk_buff_head skbs;
++ unsigned long flags;
++
++ __skb_queue_head_init(&skbs);
++
++ spin_lock_irqsave(&dev->tx_lock, flags);
+
+ set_bit(MT7601U_STATE_MORE_STATS, &dev->state);
+ if (!test_and_set_bit(MT7601U_STATE_READING_STATS, &dev->state))
+ queue_delayed_work(dev->stat_wq, &dev->stat_work,
+ msecs_to_jiffies(10));
-+out:
++
++ skb_queue_splice_init(&dev->tx_skb_done, &skbs);
++
+ spin_unlock_irqrestore(&dev->tx_lock, flags);
++
++ while (!skb_queue_empty(&skbs)) {
++ struct sk_buff *skb = __skb_dequeue(&skbs);
++
++ mt7601u_tx_status(dev, skb);
++ }
+}
+
+static int mt7601u_dma_submit_tx(struct mt7601u_dev *dev,
@@ -52479,6 +54907,7 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/driv
+{
+ int ret = -ENOMEM;
+
++ tasklet_init(&dev->tx_tasklet, mt7601u_tx_tasklet, (unsigned long) dev);
+ tasklet_init(&dev->rx_tasklet, mt7601u_rx_tasklet, (unsigned long) dev);
+
+ ret = mt7601u_alloc_tx(dev);
@@ -52506,10 +54935,12 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.c linux-rpi/driv
+
+ mt7601u_free_rx(dev);
+ mt7601u_free_tx(dev);
++
++ tasklet_kill(&dev->tx_tasklet);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/dma.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/dma.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/dma.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -52638,9 +55069,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/dma.h linux-rpi/driv
+};
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/eeprom.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/eeprom.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,418 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -53060,9 +55491,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.c linux-rpi/d
+ kfree(eeprom);
+ return ret;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/eeprom.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/eeprom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/eeprom.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,151 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -53215,10 +55646,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/eeprom.h linux-rpi/d
+}
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/init.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/init.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/init.c 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,628 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/init.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/init.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/init.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/init.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,630 @@
+/*
+ * (c) Copyright 2002-2010, Ralink Technology, Inc.
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -53675,8 +56106,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/init.c linux-rpi/dri
+ spin_lock_init(&dev->tx_lock);
+ spin_lock_init(&dev->rx_lock);
+ spin_lock_init(&dev->lock);
++ spin_lock_init(&dev->mac_lock);
+ spin_lock_init(&dev->con_mon_lock);
+ atomic_set(&dev->avg_ampdu_len, 1);
++ skb_queue_head_init(&dev->tx_skb_done);
+
+ dev->stat_wq = alloc_workqueue("mt7601u", WQ_UNBOUND, 0);
+ if (!dev->stat_wq) {
@@ -53847,9 +56280,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/init.c linux-rpi/dri
+
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/initvals.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/initvals.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,164 @@
+/*
+ * (c) Copyright 2002-2010, Ralink Technology, Inc.
@@ -54015,9 +56448,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals.h linux-rpi
+};
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,291 @@
+/*
+ * (c) Copyright 2002-2010, Ralink Technology, Inc.
@@ -54310,10 +56743,20 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/initvals_phy.h linux
+};
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.c 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,573 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/Kconfig linux-rpi/drivers/net/wireless/mediatek/mt7601u/Kconfig
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/Kconfig 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,6 @@
++config MT7601U
++ tristate "MediaTek MT7601U (USB) support"
++ depends on MAC80211
++ depends on USB
++ ---help---
++ This adds support for MT7601U-based wireless USB dongles.
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mac.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mac.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,577 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
@@ -54497,7 +56940,11 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.c linux-rpi/driv
+ }
+
+ mt76_mac_fill_tx_status(dev, &info, stat);
++
++ spin_lock_bh(&dev->mac_lock);
+ ieee80211_tx_status_noskb(dev->hw, sta, &info);
++ spin_unlock_bh(&dev->mac_lock);
++
+ rcu_read_unlock();
+}
+
@@ -54887,9 +57334,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.c linux-rpi/driv
+
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mac.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mac.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mac.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -55069,9 +57516,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mac.h linux-rpi/driv
+void mt76_send_tx_status(struct mt7601u_dev *dev, struct mt76_tx_status *stat);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/main.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/main.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/main.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/main.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/main.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/main.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/main.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/main.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,413 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -55486,9 +57933,22 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/main.c linux-rpi/dri
+ .sta_rate_tbl_update = mt76_sta_rate_tbl_update,
+ .set_rts_threshold = mt7601u_set_rts_threshold,
+};
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/Makefile linux-rpi/drivers/net/wireless/mediatek/mt7601u/Makefile
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/Makefile 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,9 @@
++ccflags-y += -D__CHECK_ENDIAN__
++
++obj-$(CONFIG_MT7601U) += mt7601u.o
++
++mt7601u-objs = \
++ usb.o init.o main.o mcu.o trace.o dma.o core.o eeprom.o phy.o \
++ mac.o util.o debugfs.o tx.o
++
++CFLAGS_trace.o := -I$(src)
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mcu.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mcu.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,534 @@
+/*
+ * (c) Copyright 2002-2010, Ralink Technology, Inc.
@@ -56024,9 +58484,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.c linux-rpi/driv
+ usb_kill_urb(dev->mcu.resp.urb);
+ mt7601u_usb_free_buf(dev, &dev->mcu.resp);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mcu.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mcu.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mcu.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -56122,10 +58582,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mcu.h linux-rpi/driv
+int mt7601u_mcu_tssi_read_kick(struct mt7601u_dev *dev, int use_hvga);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mt7601u.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mt7601u.h 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,390 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/mt7601u.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/mt7601u.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/mt7601u.h 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,396 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
@@ -56269,12 +58729,13 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/
+/**
+ * struct mt7601u_dev - adapter structure
+ * @lock: protects @wcid->tx_rate.
++ * @mac_lock: locks out mac80211's tx status and rx paths.
+ * @tx_lock: protects @tx_q and changes of MT7601U_STATE_*_STATS
-+ flags in @state.
++ * flags in @state.
+ * @rx_lock: protects @rx_q.
+ * @con_mon_lock: protects @ap_bssid, @bcn_*, @avg_rssi.
+ * @mutex: ensures exclusive access from mac80211 callbacks.
-+ * @vendor_req_mutex: ensures atomicity of vendor requests.
++ * @vendor_req_mutex: protects @vend_buf, ensures atomicity of split writes.
+ * @reg_atomic_mutex: ensures atomicity of indirect register accesses
+ * (accesses to RF and BBP).
+ * @hw_atomic_mutex: ensures exclusive access to HW during critical
@@ -56305,6 +58766,7 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/
+ struct mt76_wcid __rcu *wcid[N_WCIDS];
+
+ spinlock_t lock;
++ spinlock_t mac_lock;
+
+ const u16 *beacon_offsets;
+
@@ -56312,6 +58774,8 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/
+ struct mt7601u_eeprom_params *ee;
+
+ struct mutex vendor_req_mutex;
++ void *vend_buf;
++
+ struct mutex reg_atomic_mutex;
+ struct mutex hw_atomic_mutex;
+
@@ -56325,7 +58789,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/
+
+ /* TX */
+ spinlock_t tx_lock;
++ struct tasklet_struct tx_tasklet;
+ struct mt7601u_tx_queue *tx_q;
++ struct sk_buff_head tx_skb_done;
+
+ atomic_t avg_ampdu_len;
+
@@ -56516,9 +58982,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/mt7601u.h linux-rpi/
+ struct mt76_wcid *wcid, int hw_q);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/phy.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/phy.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/phy.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/phy.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/phy.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/phy.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/phy.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/phy.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1251 @@
+/*
+ * (c) Copyright 2002-2010, Ralink Technology, Inc.
@@ -57771,9 +60237,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/phy.c linux-rpi/driv
+
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/regs.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/regs.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/regs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/regs.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/regs.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/regs.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/regs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/regs.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,636 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -58411,9 +60877,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/regs.h linux-rpi/dri
+};
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/trace.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/trace.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -58436,9 +60902,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.c linux-rpi/dr
+#include "trace.h"
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/trace.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/trace.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/trace.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -58840,10 +61306,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/trace.h linux-rpi/dr
+#define TRACE_INCLUDE_FILE trace
+
+#include <trace/define_trace.h>
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/tx.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/tx.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/tx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/tx.c 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,319 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/tx.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/tx.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/tx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/tx.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
@@ -58962,7 +61428,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/tx.c linux-rpi/drive
+ ieee80211_tx_info_clear_status(info);
+ info->status.rates[0].idx = -1;
+ info->flags |= IEEE80211_TX_STAT_ACK;
++
++ spin_lock(&dev->mac_lock);
+ ieee80211_tx_status(dev->hw, skb);
++ spin_unlock(&dev->mac_lock);
+}
+
+static int mt7601u_skb_rooms(struct mt7601u_dev *dev, struct sk_buff *skb)
@@ -59163,10 +61632,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/tx.c linux-rpi/drive
+
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.c 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,367 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/usb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,362 @@
+/*
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
+ *
@@ -59261,10 +61730,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+ complete(cmpl);
+}
+
-+static int
-+__mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req,
-+ const u8 direction, const u16 val, const u16 offset,
-+ void *buf, const size_t buflen)
++int mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req,
++ const u8 direction, const u16 val, const u16 offset,
++ void *buf, const size_t buflen)
+{
+ int i, ret;
+ struct usb_device *usb_dev = mt7601u_to_usb_dev(dev);
@@ -59279,6 +61747,8 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+ trace_mt_vend_req(dev, pipe, req, req_type, val, offset,
+ buf, buflen, ret);
+
++ if (ret == -ENODEV)
++ set_bit(MT7601U_STATE_REMOVED, &dev->state);
+ if (ret >= 0 || ret == -ENODEV)
+ return ret;
+
@@ -59291,25 +61761,6 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+ return ret;
+}
+
-+int
-+mt7601u_vendor_request(struct mt7601u_dev *dev, const u8 req,
-+ const u8 direction, const u16 val, const u16 offset,
-+ void *buf, const size_t buflen)
-+{
-+ int ret;
-+
-+ mutex_lock(&dev->vendor_req_mutex);
-+
-+ ret = __mt7601u_vendor_request(dev, req, direction, val, offset,
-+ buf, buflen);
-+ if (ret == -ENODEV)
-+ set_bit(MT7601U_STATE_REMOVED, &dev->state);
-+
-+ mutex_unlock(&dev->vendor_req_mutex);
-+
-+ return ret;
-+}
-+
+void mt7601u_vendor_reset(struct mt7601u_dev *dev)
+{
+ mt7601u_vendor_request(dev, MT_VEND_DEV_MODE, USB_DIR_OUT,
@@ -59319,19 +61770,21 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+u32 mt7601u_rr(struct mt7601u_dev *dev, u32 offset)
+{
+ int ret;
-+ __le32 reg;
-+ u32 val;
++ u32 val = ~0;
+
+ WARN_ONCE(offset > USHRT_MAX, "read high off:%08x", offset);
+
++ mutex_lock(&dev->vendor_req_mutex);
++
+ ret = mt7601u_vendor_request(dev, MT_VEND_MULTI_READ, USB_DIR_IN,
-+ 0, offset, &reg, sizeof(reg));
-+ val = le32_to_cpu(reg);
-+ if (ret > 0 && ret != sizeof(reg)) {
++ 0, offset, dev->vend_buf, MT_VEND_BUF);
++ if (ret == MT_VEND_BUF)
++ val = get_unaligned_le32(dev->vend_buf);
++ else if (ret > 0)
+ dev_err(dev->dev, "Error: wrong size read:%d off:%08x\n",
+ ret, offset);
-+ val = ~0;
-+ }
++
++ mutex_unlock(&dev->vendor_req_mutex);
+
+ trace_reg_read(dev, offset, val);
+ return val;
@@ -59342,12 +61795,17 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+{
+ int ret;
+
++ mutex_lock(&dev->vendor_req_mutex);
++
+ ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT,
+ val & 0xffff, offset, NULL, 0);
-+ if (ret)
-+ return ret;
-+ return mt7601u_vendor_request(dev, req, USB_DIR_OUT,
-+ val >> 16, offset + 2, NULL, 0);
++ if (!ret)
++ ret = mt7601u_vendor_request(dev, req, USB_DIR_OUT,
++ val >> 16, offset + 2, NULL, 0);
++
++ mutex_unlock(&dev->vendor_req_mutex);
++
++ return ret;
+}
+
+void mt7601u_wr(struct mt7601u_dev *dev, u32 offset, u32 val)
@@ -59444,6 +61902,12 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+
+ usb_set_intfdata(usb_intf, dev);
+
++ dev->vend_buf = devm_kmalloc(dev->dev, MT_VEND_BUF, GFP_KERNEL);
++ if (!dev->vend_buf) {
++ ret = -ENOMEM;
++ goto err;
++ }
++
+ ret = mt7601u_assign_pipes(usb_intf, dev);
+ if (ret)
+ goto err;
@@ -59534,10 +61998,10 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.c linux-rpi/driv
+ .disable_hub_initiated_lpm = 1,
+};
+module_usb_driver(mt7601u_driver);
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.h 2015-08-26 10:26:08.721315886 +0200
-@@ -0,0 +1,77 @@
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/usb.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/usb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/usb.h 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2015 Jakub Kicinski <kubakici@wp.pl>
+ *
@@ -59563,6 +62027,8 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.h linux-rpi/driv
+
+#define MT_VEND_DEV_MODE_RESET 1
+
++#define MT_VEND_BUF sizeof(__le32)
++
+enum mt_vendor_req {
+ MT_VEND_DEV_MODE = 1,
+ MT_VEND_WRITE = 2,
@@ -59615,9 +62081,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/usb.h linux-rpi/driv
+ const u16 offset, const u32 val);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.c
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.c 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/util.c linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.c
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -59661,9 +62127,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.c linux-rpi/dri
+ skb->data[len + 1] = 0;
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.h
---- linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.h 2015-08-26 10:26:08.721315886 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/util.h linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.h
+--- linux-4.1.10/drivers/net/wireless/mediatek/mt7601u/util.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/mediatek/mt7601u/util.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2014 Felix Fietkau <nbd@openwrt.org>
@@ -59742,650 +62208,18 @@ diff -Nur linux-4.1.6/drivers/net/wireless/mediatek/mt7601u/util.h linux-rpi/dri
+ })
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/Kconfig linux-rpi/drivers/net/wireless/rtl8192cu/Kconfig
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/Kconfig 2015-08-26 10:26:08.745316219 +0200
-@@ -0,0 +1,9 @@
-+config RTL8192CU
-+ tristate "Realtek 8192C USB WiFi"
-+ depends on MAC80211 && USB
-+ select CFG80211_WEXT
-+ select WIRELESS_EXT
-+ select WEXT_PRIV
-+ ---help---
-+ This option adds the Realtek RTL8192CU USB device such as Edimax EW-7811Un.
-+
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/Makefile linux-rpi/drivers/net/wireless/rtl8192cu/Makefile
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/Makefile 2015-08-26 10:26:08.745316219 +0200
-@@ -0,0 +1,615 @@
-+EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS)
-+EXTRA_CFLAGS += -O1
-+#EXTRA_CFLAGS += -O3
-+#EXTRA_CFLAGS += -Wall
-+#EXTRA_CFLAGS += -Wextra
-+#EXTRA_CFLAGS += -Werror
-+#EXTRA_CFLAGS += -pedantic
-+#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
-+
-+EXTRA_CFLAGS += -Wno-unused-variable
-+EXTRA_CFLAGS += -Wno-unused-value
-+EXTRA_CFLAGS += -Wno-unused-label
-+EXTRA_CFLAGS += -Wno-unused-parameter
-+EXTRA_CFLAGS += -Wno-unused-function
-+EXTRA_CFLAGS += -Wno-unused
-+
-+EXTRA_CFLAGS += -Wno-uninitialized
-+
-+EXTRA_CFLAGS += -I$(src)/include
-+
-+CONFIG_AUTOCFG_CP = n
-+
-+CONFIG_RTL8192C = y
-+CONFIG_RTL8192D = n
-+CONFIG_RTL8723A = n
-+
-+CONFIG_USB_HCI = y
-+CONFIG_PCI_HCI = n
-+CONFIG_SDIO_HCI = n
-+
-+CONFIG_MP_INCLUDED = n
-+CONFIG_POWER_SAVING = y
-+CONFIG_USB_AUTOSUSPEND = n
-+CONFIG_HW_PWRP_DETECTION = n
-+CONFIG_WIFI_TEST = n
-+CONFIG_BT_COEXISTENCE = n
-+CONFIG_RTL8192CU_REDEFINE_1X1 = n
-+CONFIG_INTEL_WIDI = n
-+CONFIG_WAKE_ON_WLAN = n
-+
-+CONFIG_PLATFORM_I386_PC = y
-+CONFIG_PLATFORM_TI_AM3517 = n
-+CONFIG_PLATFORM_ANDROID_X86 = n
-+CONFIG_PLATFORM_JB_X86 = n
-+CONFIG_PLATFORM_ARM_S3C2K4 = n
-+CONFIG_PLATFORM_ARM_PXA2XX = n
-+CONFIG_PLATFORM_ARM_S3C6K4 = n
-+CONFIG_PLATFORM_MIPS_RMI = n
-+CONFIG_PLATFORM_RTD2880B = n
-+CONFIG_PLATFORM_MIPS_AR9132 = n
-+CONFIG_PLATFORM_RTK_DMP = n
-+CONFIG_PLATFORM_MIPS_PLM = n
-+CONFIG_PLATFORM_MSTAR389 = n
-+CONFIG_PLATFORM_MT53XX = n
-+CONFIG_PLATFORM_ARM_MX51_241H = n
-+CONFIG_PLATFORM_FS_MX61 = n
-+CONFIG_PLATFORM_ACTIONS_ATJ227X = n
-+CONFIG_PLATFORM_TEGRA3_CARDHU = n
-+CONFIG_PLATFORM_TEGRA4_DALMORE = n
-+CONFIG_PLATFORM_ARM_TCC8900 = n
-+CONFIG_PLATFORM_ARM_TCC8920 = n
-+CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
-+CONFIG_PLATFORM_ARM_RK2818 = n
-+CONFIG_PLATFORM_ARM_TI_PANDA = n
-+CONFIG_PLATFORM_MIPS_JZ4760 = n
-+CONFIG_PLATFORM_DMP_PHILIPS = n
-+CONFIG_PLATFORM_TI_DM365 = n
-+CONFIG_PLATFORM_MN10300 = n
-+CONFIG_PLATFORM_MSTAR_TITANIA12 = n
-+CONFIG_PLATFORM_MSTAR_A3 = n
-+CONFIG_PLATFORM_ARM_SUNxI = n
-+CONFIG_PLATFORM_ARM_SUN6I = n
-+
-+CONFIG_DRVEXT_MODULE = n
-+
-+export TopDIR ?= $(shell pwd)
-+
-+
-+ifeq ($(CONFIG_RTL8192C), y)
-+
-+RTL871X = rtl8192c
-+
-+ifeq ($(CONFIG_USB_HCI), y)
-+MODULE_NAME = 8192cu
-+FW_FILES := hal/$(RTL871X)/usb/Hal8192CUHWImg.o
-+ifneq ($(CONFIG_WAKE_ON_WLAN), n)
-+FW_FILES += hal/$(RTL871X)/usb/Hal8192CUHWImg_wowlan.o
-+endif
-+endif
-+ifeq ($(CONFIG_PCI_HCI), y)
-+MODULE_NAME = 8192ce
-+FW_FILES := hal/$(RTL871X)/pci/Hal8192CEHWImg.o
-+endif
-+
-+CHIP_FILES := \
-+ hal/$(RTL871X)/$(RTL871X)_sreset.o \
-+ hal/$(RTL871X)/$(RTL871X)_xmit.o
-+CHIP_FILES += $(FW_FILES)
-+endif
-+
-+ifeq ($(CONFIG_RTL8192D), y)
-+
-+RTL871X = rtl8192d
-+
-+ifeq ($(CONFIG_USB_HCI), y)
-+MODULE_NAME = 8192du
-+FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o
-+ifneq ($(CONFIG_WAKE_ON_WLAN), n)
-+FW_FILES += hal/$(RTL871X)/usb/Hal8192DUHWImg_wowlan.o
-+endif
-+endif
-+ifeq ($(CONFIG_PCI_HCI), y)
-+MODULE_NAME = 8192de
-+FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o
-+endif
-+
-+CHIP_FILES := \
-+ hal/$(RTL871X)/$(RTL871X)_xmit.o
-+CHIP_FILES += $(FW_FILES)
-+endif
-+
-+ifeq ($(CONFIG_RTL8723A), y)
-+
-+RTL871X = rtl8723a
-+
-+ifeq ($(CONFIG_SDIO_HCI), y)
-+MODULE_NAME = 8723as
-+FW_FILES := hal/$(RTL871X)/sdio/Hal8723SHWImg.o
-+endif
-+
-+ifeq ($(CONFIG_USB_HCI), y)
-+MODULE_NAME = 8723au
-+FW_FILES := hal/$(RTL871X)/usb/Hal8723UHWImg.o
-+endif
-+
-+ifeq ($(CONFIG_PCI_HCI), y)
-+MODULE_NAME = 8723ae
-+FW_FILES := hal/$(RTL871X)/pci/Hal8723EHWImg.o
-+endif
-+
-+PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
-+ hal/$(RTL871X)/Hal8723PwrSeq.o
-+
-+CHIP_FILES += $(FW_FILES) $(PWRSEQ_FILES)
-+
-+endif
-+
-+ifeq ($(CONFIG_SDIO_HCI), y)
-+HCI_NAME = sdio
-+endif
-+
-+ifeq ($(CONFIG_USB_HCI), y)
-+HCI_NAME = usb
-+endif
-+
-+ifeq ($(CONFIG_PCI_HCI), y)
-+HCI_NAME = pci
-+endif
-+
-+
-+_OS_INTFS_FILES := os_dep/osdep_service.o \
-+ os_dep/linux/os_intfs.o \
-+ os_dep/linux/$(HCI_NAME)_intf.o \
-+ os_dep/linux/$(HCI_NAME)_ops_linux.o \
-+ os_dep/linux/ioctl_linux.o \
-+ os_dep/linux/xmit_linux.o \
-+ os_dep/linux/mlme_linux.o \
-+ os_dep/linux/recv_linux.o \
-+ os_dep/linux/ioctl_cfg80211.o \
-+ os_dep/linux/rtw_android.o
-+
-+
-+_HAL_INTFS_FILES := hal/hal_intf.o \
-+ hal/hal_com.o \
-+ hal/dm.o \
-+ hal/$(RTL871X)/$(RTL871X)_hal_init.o \
-+ hal/$(RTL871X)/$(RTL871X)_phycfg.o \
-+ hal/$(RTL871X)/$(RTL871X)_rf6052.o \
-+ hal/$(RTL871X)/$(RTL871X)_dm.o \
-+ hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
-+ hal/$(RTL871X)/$(RTL871X)_cmd.o \
-+ hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
-+ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
-+ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
-+ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
-+
-+ifeq ($(CONFIG_SDIO_HCI), y)
-+_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
-+else
-+_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
-+endif
-+
-+ifeq ($(CONFIG_MP_INCLUDED), y)
-+_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
-+endif
-+
-+_HAL_INTFS_FILES += $(CHIP_FILES)
-+
-+
-+ifeq ($(CONFIG_AUTOCFG_CP), y)
-+$(shell cp $(TopDIR)/autoconf_$(RTL871X)_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
-+endif
-+
-+
-+ifeq ($(CONFIG_USB_HCI), y)
-+ifeq ($(CONFIG_USB_AUTOSUSPEND), y)
-+EXTRA_CFLAGS += -DCONFIG_USB_AUTOSUSPEND
-+endif
-+endif
-+
-+ifeq ($(CONFIG_POWER_SAVING), y)
-+EXTRA_CFLAGS += -DCONFIG_POWER_SAVING
-+endif
-+
-+ifeq ($(CONFIG_HW_PWRP_DETECTION), y)
-+EXTRA_CFLAGS += -DCONFIG_HW_PWRP_DETECTION
-+endif
-+
-+ifeq ($(CONFIG_WIFI_TEST), y)
-+EXTRA_CFLAGS += -DCONFIG_WIFI_TEST
-+endif
-+
-+ifeq ($(CONFIG_BT_COEXISTENCE), y)
-+EXTRA_CFLAGS += -DCONFIG_BT_COEXISTENCE
-+endif
-+
-+ifeq ($(CONFIG_RTL8192CU_REDEFINE_1X1), y)
-+EXTRA_CFLAGS += -DRTL8192C_RECONFIG_TO_1T1R
-+endif
-+
-+ifeq ($(CONFIG_WAKE_ON_WLAN), y)
-+EXTRA_CFLAGS += -DCONFIG_WAKE_ON_WLAN
-+endif
-+
-+ifeq ($(CONFIG_INTEL_WIDI), y)
-+EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_I386_PC), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
-+ARCH ?= $(SUBARCH)
-+CROSS_COMPILE ?=
-+KVER := $(shell uname -r)
-+KSRC := /lib/modules/$(KVER)/build
-+MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
-+INSTALL_PREFIX :=
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_TI_AM3517), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_SHUTTLE
-+CROSS_COMPILE := arm-eabi-
-+KSRC := $(shell pwd)/../../../Android/kernel
-+ARCH := arm
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MSTAR_TITANIA12), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_TITANIA12
-+ARCH:=mips
-+CROSS_COMPILE:= /usr/src/Mstar_kernel/mips-4.3/bin/mips-linux-gnu-
-+KVER:= 2.6.28.9
-+KSRC:= /usr/src/Mstar_kernel/2.6.28.9/
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MSTAR_A3), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_A3
-+ARCH:=arm
-+CROSS_COMPILE:= arm-none-linux-gnueabi-
-+KVER:= 2.6.35.11
-+KSRC:= /home/gary/PERFORCE/THEALE/RedLion/2.6.35.11/
-+MODULE_NAME = wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
-+ARCH := $(SUBARCH)
-+CROSS_COMPILE := /media/DATA-2/android-x86/ics-x86_20120130/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin/i686-unknown-linux-gnu-
-+KSRC := /media/DATA-2/android-x86/ics-x86_20120130/out/target/product/generic_x86/obj/kernel
-+MODULE_NAME :=wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_JB_X86), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
-+SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
-+ARCH := $(SUBARCH)
-+CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
-+KSRC := /home/android_sdk/android-x86_JB/out/target/product/x86/obj/kernel/
-+MODULE_NAME :=wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_PXA2XX), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := arm-none-linux-gnueabi-
-+KVER := 2.6.34.1
-+KSRC ?= /usr/src/linux-2.6.34.1
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_S3C2K4), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := arm-linux-
-+KVER := 2.6.24.7_$(ARCH)
-+KSRC := /usr/src/kernels/linux-$(KVER)
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := arm-none-linux-gnueabi-
-+KVER := 2.6.34.1
-+KSRC ?= /usr/src/linux-2.6.34.1
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_RTD2880B), y)
-+EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN -DCONFIG_PLATFORM_RTD2880B
-+ARCH:=
-+CROSS_COMPILE:=
-+KVER:=
-+KSRC:=
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MIPS_RMI), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH:=mips
-+CROSS_COMPILE:=mipsisa32r2-uclibc-
-+KVER:=
-+KSRC:= /root/work/kernel_realtek
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MIPS_PLM), y)
-+EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
-+ARCH:=mips
-+CROSS_COMPILE:=mipsisa32r2-uclibc-
-+KVER:=
-+KSRC:= /root/work/kernel_realtek
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MSTAR389), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR389
-+ARCH:=mips
-+CROSS_COMPILE:= mips-linux-gnu-
-+KVER:= 2.6.28.10
-+KSRC:= /home/mstar/mstar_linux/2.6.28.9/
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MIPS_AR9132), y)
-+EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
-+ARCH := mips
-+CROSS_COMPILE := mips-openwrt-linux-
-+KSRC := /home/alex/test_openwrt/tmp/linux-2.6.30.9
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_DMP_PHILIPS), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
-+ARCH := mips
-+#CROSS_COMPILE:=/usr/local/msdk-4.3.6-mips-EL-2.6.12.6-0.9.30.3/bin/mipsel-linux-
-+CROSS_COMPILE:=/usr/local/toolchain_mipsel/bin/mipsel-linux-
-+KSRC ?=/usr/local/Jupiter/linux-2.6.12
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_RTK_DMP), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
-+ARCH:=mips
-+CROSS_COMPILE:=mipsel-linux-
-+KVER:=
-+KSRC ?= /usr/src/DMP_Kernel/jupiter/linux-2.6.12
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MT53XX), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MT53XX
-+ARCH:= arm
-+CROSS_COMPILE:= arm11_mtk_le-
-+KVER:= 2.6.27
-+KSRC?= /proj/mtk00802/BD_Compare/BDP/Dev/BDP_V301/BDP_Linux/linux-2.6.27
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_MX51_241H), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_WISTRON_PLATFORM
-+ARCH := arm
-+CROSS_COMPILE := /opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-
-+KVER := 2.6.31
-+KSRC ?= /lib/modules/2.6.31-770-g0e46b52/source
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_FS_MX61), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := /home/share/CusEnv/FreeScale/arm-eabi-4.4.3/bin/arm-eabi-
-+KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env
-+endif
-+
-+
-+
-+ifeq ($(CONFIG_PLATFORM_ACTIONS_ATJ227X), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATJ227X
-+ARCH := mips
-+CROSS_COMPILE := /home/cnsd4/project/actions/tools-2.6.27/bin/mipsel-linux-gnu-
-+KVER := 2.6.27
-+KSRC := /home/cnsd4/project/actions/linux-2.6.27.28
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_TI_DM365), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_TI_DM365
-+ARCH := arm
-+CROSS_COMPILE := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-
-+KVER := 2.6.18
-+KSRC := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-dm365
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_TEGRA3_CARDHU), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+# default setting for Android 4.1, 4.2
-+EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
-+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
-+ARCH := arm
-+CROSS_COMPILE := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
-+KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_TEGRA4_DALMORE), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+# default setting for Android 4.1, 4.2
-+EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
-+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
-+ARCH := arm
-+CROSS_COMPILE := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
-+KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_TCC8900), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := /home/android_sdk/Telechips/SDK_2304_20110613/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
-+KSRC := /home/android_sdk/Telechips/SDK_2304_20110613/kernel
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_TCC8920), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+ARCH := arm
-+CROSS_COMPILE := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
-+KSRC := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/kernel
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_TCC8920_JB42), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+# default setting for Android 4.1, 4.2
-+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
-+ARCH := arm
-+CROSS_COMPILE := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
-+KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_RK2818), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS -DCONFIG_MINIMAL_MEMORY_USAGE
-+ARCH := arm
-+CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
-+KSRC := /usr/src/release_fae_version/kernel25_A7_281x
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_TI_PANDA), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
-+ARCH := arm
-+#CROSS_COMPILE := /media/DATA-1/aosp/ics-aosp_20111227/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
-+#KSRC := /media/DATA-1/aosp/android-omap-panda-3.0_20120104
-+CROSS_COMPILE := /media/DATA-1/android-4.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
-+KSRC := /media/DATA-1/android-4.0/panda_kernel/omap
-+MODULE_NAME := wlan
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_MIPS_JZ4760), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_MINIMAL_MEMORY_USAGE
-+ARCH ?= mips
-+CROSS_COMPILE ?= /mnt/sdb5/Ingenic/Umido/mips-4.3/bin/mips-linux-gnu-
-+KSRC ?= /mnt/sdb5/Ingenic/Umido/kernel
-+endif
-+
-+#Add setting for MN10300
-+ifeq ($(CONFIG_PLATFORM_MN10300), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MN10300
-+ARCH := mn10300
-+CROSS_COMPILE := mn10300-linux-
-+KVER := 2.6.32.2
-+KSRC := /home/winuser/work/Plat_sLD2T_V3010/usr/src/linux-2.6.32.2
-+INSTALL_PREFIX :=
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_SUNxI), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ARM_SUNxI
-+ARCH := arm
-+CROSS_COMPILE := arm-none-linux-gnueabi-
-+KVER := 3.0.8
-+#KSRC:= ../lichee/linux-3.0/
-+endif
-+
-+ifeq ($(CONFIG_PLATFORM_ARM_SUN6I), y)
-+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
-+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
-+EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
-+EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
-+# default setting for Android 4.1, 4.2
-+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
-+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
-+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
-+ARCH := arm
-+CROSS_COMPILE := arm-none-linux-gnueabi-
-+KVER := 3.3.0
-+#KSRC:= ../lichee/linux-3.3/
-+endif
-+
-+ifneq ($(USER_MODULE_NAME),)
-+MODULE_NAME := $(USER_MODULE_NAME)
-+endif
-+
-+ifeq ($(CONFIG_MP_INCLUDED), y)
-+MODULE_NAME := $(MODULE_NAME)_mp
-+EXTRA_CFLAGS += -DCONFIG_MP_INCLUDED
-+endif
-+
-+
-+ifneq ($(KERNELRELEASE),)
-+
-+
-+rtk_core := core/rtw_cmd.o \
-+ core/rtw_security.o \
-+ core/rtw_debug.o \
-+ core/rtw_io.o \
-+ core/rtw_ioctl_query.o \
-+ core/rtw_ioctl_set.o \
-+ core/rtw_ieee80211.o \
-+ core/rtw_mlme.o \
-+ core/rtw_mlme_ext.o \
-+ core/rtw_wlan_util.o \
-+ core/rtw_pwrctrl.o \
-+ core/rtw_rf.o \
-+ core/rtw_recv.o \
-+ core/rtw_sta_mgt.o \
-+ core/rtw_ap.o \
-+ core/rtw_xmit.o \
-+ core/rtw_p2p.o \
-+ core/rtw_tdls.o \
-+ core/rtw_br_ext.o \
-+ core/rtw_iol.o \
-+ core/rtw_sreset.o
-+
-+$(MODULE_NAME)-y += $(rtk_core)
-+
-+$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
-+
-+$(MODULE_NAME)-y += core/efuse/rtw_efuse.o
-+
-+$(MODULE_NAME)-y += $(_HAL_INTFS_FILES)
-+
-+$(MODULE_NAME)-y += $(_OS_INTFS_FILES)
-+
-+$(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
-+ core/rtw_mp_ioctl.o
-+
-+obj-$(CONFIG_RTL8192CU) := $(MODULE_NAME).o
-+
-+else
-+
-+export CONFIG_RTL8192CU = m
-+
-+all: modules
-+
-+modules:
-+ $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) modules
-+
-+strip:
-+ $(CROSS_COMPILE)strip $(MODULE_NAME).ko --strip-unneeded
-+
-+install:
-+ install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR)
-+ /sbin/depmod -a ${KVER}
-+
-+uninstall:
-+ rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
-+ /sbin/depmod -a ${KVER}
-+
-+
-+config_r:
-+ @echo "make config"
-+ /bin/bash script/Configure script/config.in
-+
-+.PHONY: modules clean
-+
-+clean:
-+ rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
-+ rm .tmp_versions -fr ; rm Module.symvers -fr
-+ rm -fr Module.markers ; rm -fr modules.order
-+ cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+ cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
-+endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/clean linux-rpi/drivers/net/wireless/rtl8192cu/clean
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/clean 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/clean 2015-08-26 10:26:08.745316219 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/clean linux-rpi/drivers/net/wireless/rtl8192cu/clean
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/clean 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/clean 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,5 @@
+#!/bin/bash
+rmmod 8192cu
+rmmod 8192ce
+rmmod 8192du
+rmmod 8192de
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c linux-rpi/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c 2015-08-26 10:26:08.745316219 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c linux-rpi/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1145 @@
+/******************************************************************************
+ *
@@ -61532,9 +63366,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/efuse/rtw_efuse.c linu
+}
+#endif //CONFIG_ADAPTOR_INFO_CACHING_FILE
+#endif //PLATFORM_LINUX
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ap.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ap.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ap.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ap.c 2015-08-26 10:26:08.745316219 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ap.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ap.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ap.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ap.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,2939 @@
+/******************************************************************************
+ *
@@ -64475,9 +66309,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ap.c linux-rpi/dri
+
+#endif //CONFIG_NATIVEAP_MLME
+#endif //CONFIG_AP_MODE
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c 2015-08-26 10:26:08.745316219 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1699 @@
+/******************************************************************************
+ *
@@ -66178,9 +68012,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_br_ext.c linux-rpi
+}
+
+#endif // CONFIG_BR_EXT
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,3034 @@
+/******************************************************************************
+ *
@@ -69216,9 +71050,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_cmd.c linux-rpi/dr
+_func_exit_;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_debug.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_debug.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_debug.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_debug.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_debug.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_debug.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_debug.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1336 @@
+/******************************************************************************
+ *
@@ -70556,9 +72390,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_debug.c linux-rpi/
+#endif /* CONFIG_DM_ADAPTIVITY */
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,422 @@
+/******************************************************************************
+ *
@@ -70982,9 +72816,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_eeprom.c linux-rpi
+
+_func_exit_;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1914 @@
+/******************************************************************************
+ *
@@ -72900,9 +74734,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ieee80211.c linux-
+ action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action;
+ return _action_public_str[action];
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_io.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_io.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_io.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_io.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_io.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_io.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_io.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_io.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,462 @@
+/******************************************************************************
+ *
@@ -73366,9 +75200,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_io.c linux-rpi/dri
+ return _rtw_writeN(adapter, addr, length, data);
+}
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,195 @@
+/******************************************************************************
+ *
@@ -73565,9 +75399,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_query.c linu
+ return _TRUE;
+}
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1031 @@
+/******************************************************************************
+ *
@@ -74600,9 +76434,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_rtl.c linux-
+ return status;
+}
+//************** oid_rtl_seg_03_00 section end **************
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1493 @@
+/******************************************************************************
+ *
@@ -76097,9 +77931,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_ioctl_set.c linux-
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" band:%d fail\n", FUNC_ADPT_ARG(adapter), band);
+ return _FAIL;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_iol.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_iol.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_iol.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_iol.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_iol.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_iol.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_iol.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,262 @@
+/******************************************************************************
+ *
@@ -76363,9 +78197,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_iol.c linux-rpi/dr
+}
+
+#endif //CONFIG_IOL
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,3966 @@
+/******************************************************************************
+ *
@@ -80333,9 +82167,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme.c linux-rpi/d
+ return _FALSE;
+}
+#endif //CONFIG_CONCURRENT_MODE
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,13599 @@
+/******************************************************************************
+ *
@@ -93936,9 +95770,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mlme_ext.c linux-r
+#endif //CONFIG_TDLS
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mp.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1323 @@
+/******************************************************************************
+ *
@@ -95263,9 +97097,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp.c linux-rpi/dri
+}
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,2953 @@
+/******************************************************************************
+ *
@@ -98220,9 +100054,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_mp_ioctl.c linux-r
+ return 0;
+#endif
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,5293 @@
+/******************************************************************************
+ *
@@ -103517,9 +105351,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_p2p.c linux-rpi/dr
+}
+
+#endif //CONFIG_P2P
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1538 @@
+/******************************************************************************
+ *
@@ -105059,9 +106893,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_pwrctrl.c linux-rp
+ }
+ return 0;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_recv.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_recv.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_recv.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_recv.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_recv.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_recv.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_recv.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,4286 @@
+/******************************************************************************
+ *
@@ -109349,9 +111183,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_recv.c linux-rpi/d
+
+}
+#endif //CONFIG_NEW_SIGNAL_STAT_PROCESS
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_rf.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_rf.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_rf.c 2015-08-26 10:26:08.749316275 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_rf.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_rf.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_rf.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_rf.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,94 @@
+/******************************************************************************
+ *
@@ -109447,9 +111281,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_rf.c linux-rpi/dri
+
+ return ch;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_security.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_security.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_security.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_security.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_security.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_security.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_security.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_security.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,3114 @@
+/******************************************************************************
+ *
@@ -112565,9 +114399,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_security.c linux-r
+
+ return status;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,351 @@
+/******************************************************************************
+ *
@@ -112920,9 +114754,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sreset.c linux-rpi
+ DBG_871X("%s done in %d ms\n", __FUNCTION__, rtw_get_passing_time_ms(start));
+#endif
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,847 @@
+/******************************************************************************
+ *
@@ -113771,9 +115605,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_sta_mgt.c linux-rp
+ return res;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,2940 @@
+/******************************************************************************
+ *
@@ -116715,9 +118549,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_tdls.c linux-rpi/d
+}
+
+#endif //CONFIG_TDLS
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,2304 @@
+/******************************************************************************
+ *
@@ -119023,9 +120857,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_wlan_util.c linux-
+exit:
+ return status;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,4155 @@
+/******************************************************************************
+ *
@@ -123182,188 +125016,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/core/rtw_xmit.c linux-rpi/d
+ }
+}
+#endif //CONFIG_XMIT_ACK
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c 2015-08-26 10:26:08.753316330 +0200
-@@ -0,0 +1,175 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+/*++
-+Copyright (c) Realtek Semiconductor Corp. All rights reserved.
-+
-+Module Name:
-+ HalPwrSeqCmd.c
-+
-+Abstract:
-+ Implement HW Power sequence configuration CMD handling routine for Realtek devices.
-+
-+Major Change History:
-+ When Who What
-+ ---------- --------------- -------------------------------
-+ 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
-+ 2011-07-07 Roger Create.
-+
-+--*/
-+#include <HalPwrSeqCmd.h>
-+#include <sdio_ops.h>
-+
-+
-+//
-+// Description:
-+// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
-+//
-+// Assumption:
-+// We should follow specific format which was released from HW SD.
-+//
-+// 2011.07.07, added by Roger.
-+//
-+u8 HalPwrSeqCmdParsing(
-+ PADAPTER padapter,
-+ u8 CutVersion,
-+ u8 FabVersion,
-+ u8 InterfaceType,
-+ WLAN_PWR_CFG PwrSeqCmd[])
-+{
-+ WLAN_PWR_CFG PwrCfgCmd = {0};
-+ u8 bPollingBit = _FALSE;
-+ u32 AryIdx = 0;
-+ u8 value = 0;
-+ u32 offset = 0;
-+ u32 pollingCount = 0; // polling autoload done.
-+ u32 maxPollingCnt = 5000;
-+
-+ do {
-+ PwrCfgCmd = PwrSeqCmd[AryIdx];
-+
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_,
-+ ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
-+ GET_PWR_CFG_OFFSET(PwrCfgCmd),
-+ GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
-+ GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
-+ GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
-+ GET_PWR_CFG_BASE(PwrCfgCmd),
-+ GET_PWR_CFG_CMD(PwrCfgCmd),
-+ GET_PWR_CFG_MASK(PwrCfgCmd),
-+ GET_PWR_CFG_VALUE(PwrCfgCmd)));
-+
-+ //2 Only Handle the command whose FAB, CUT, and Interface are matched
-+ if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
-+ (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
-+ (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
-+ {
-+ switch (GET_PWR_CFG_CMD(PwrCfgCmd))
-+ {
-+ case PWR_CMD_READ:
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
-+ break;
-+
-+ case PWR_CMD_WRITE:
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
-+ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-+
-+#ifdef CONFIG_SDIO_HCI
-+ //
-+ // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
-+ // 2011.07.07.
-+ //
-+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
-+ {
-+ // Read Back SDIO Local value
-+ value = SdioLocalCmd52Read1Byte(padapter, offset);
-+
-+ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
-+ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
-+
-+ // Write Back SDIO Local value
-+ SdioLocalCmd52Write1Byte(padapter, offset, value);
-+ }
-+ else
-+#endif
-+ {
-+ // Read the value from system register
-+ value = rtw_read8(padapter, offset);
-+
-+ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
-+ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
-+
-+ // Write the value back to sytem register
-+ rtw_write8(padapter, offset, value);
-+ }
-+ break;
-+
-+ case PWR_CMD_POLLING:
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
-+
-+ bPollingBit = _FALSE;
-+ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-+
-+ do {
-+#ifdef CONFIG_SDIO_HCI
-+ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
-+ value = SdioLocalCmd52Read1Byte(padapter, offset);
-+ else
-+#endif
-+ value = rtw_read8(padapter, offset);
-+
-+ value &= GET_PWR_CFG_MASK(PwrCfgCmd);
-+ if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
-+ bPollingBit = _TRUE;
-+ else
-+ rtw_udelay_os(10);
-+
-+ if (pollingCount++ > maxPollingCnt) {
-+ RT_TRACE(_module_hal_init_c_ , _drv_err_, ("Fail to polling Offset[%#x]\n", offset));
-+ return _FALSE;
-+ }
-+ } while (!bPollingBit);
-+
-+ break;
-+
-+ case PWR_CMD_DELAY:
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
-+ if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
-+ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
-+ else
-+ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
-+ break;
-+
-+ case PWR_CMD_END:
-+ // When this command is parsed, end the process
-+ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
-+ return _TRUE;
-+ break;
-+
-+ default:
-+ RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
-+ break;
-+ }
-+ }
-+
-+ AryIdx++;//Add Array Index
-+ }while(1);
-+
-+ return _TRUE;
-+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/dm.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/dm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,313 @@
+/******************************************************************************
+ *
@@ -123678,9 +125333,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.c linux-rpi/drivers/
+ return;
+#endif /* CONFIG_DM_ADAPTIVITY */
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.h linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.h 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/dm.h linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/dm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/dm.h 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,30 @@
+/******************************************************************************
+ *
@@ -123712,9 +125367,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/dm.h linux-rpi/drivers/
+void dm_adaptivity(_adapter *pAdapter);
+
+#endif /* __DM_H__ */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_com.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_com.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_com.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_com.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/hal_com.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_com.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/hal_com.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_com.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,370 @@
+/******************************************************************************
+ *
@@ -124086,9 +125741,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_com.c linux-rpi/dri
+exit:
+ return ret;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_intf.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_intf.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_intf.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/hal_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_intf.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/hal_intf.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/hal_intf.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,545 @@
+/******************************************************************************
+ *
@@ -124635,9 +126290,188 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/hal_intf.c linux-rpi/dr
+{
+ return adapter->HalFunc.c2h_id_filter_ccx;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/HalPwrSeqCmd.c 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,175 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++/*++
++Copyright (c) Realtek Semiconductor Corp. All rights reserved.
++
++Module Name:
++ HalPwrSeqCmd.c
++
++Abstract:
++ Implement HW Power sequence configuration CMD handling routine for Realtek devices.
++
++Major Change History:
++ When Who What
++ ---------- --------------- -------------------------------
++ 2011-10-26 Lucas Modify to be compatible with SD4-CE driver.
++ 2011-07-07 Roger Create.
++
++--*/
++#include <HalPwrSeqCmd.h>
++#include <sdio_ops.h>
++
++
++//
++// Description:
++// This routine deal with the Power Configuration CMDs parsing for RTL8723/RTL8188E Series IC.
++//
++// Assumption:
++// We should follow specific format which was released from HW SD.
++//
++// 2011.07.07, added by Roger.
++//
++u8 HalPwrSeqCmdParsing(
++ PADAPTER padapter,
++ u8 CutVersion,
++ u8 FabVersion,
++ u8 InterfaceType,
++ WLAN_PWR_CFG PwrSeqCmd[])
++{
++ WLAN_PWR_CFG PwrCfgCmd = {0};
++ u8 bPollingBit = _FALSE;
++ u32 AryIdx = 0;
++ u8 value = 0;
++ u32 offset = 0;
++ u32 pollingCount = 0; // polling autoload done.
++ u32 maxPollingCnt = 5000;
++
++ do {
++ PwrCfgCmd = PwrSeqCmd[AryIdx];
++
++ RT_TRACE(_module_hal_init_c_ , _drv_info_,
++ ("HalPwrSeqCmdParsing: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
++ GET_PWR_CFG_OFFSET(PwrCfgCmd),
++ GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
++ GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
++ GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
++ GET_PWR_CFG_BASE(PwrCfgCmd),
++ GET_PWR_CFG_CMD(PwrCfgCmd),
++ GET_PWR_CFG_MASK(PwrCfgCmd),
++ GET_PWR_CFG_VALUE(PwrCfgCmd)));
++
++ //2 Only Handle the command whose FAB, CUT, and Interface are matched
++ if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
++ (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
++ (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType))
++ {
++ switch (GET_PWR_CFG_CMD(PwrCfgCmd))
++ {
++ case PWR_CMD_READ:
++ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_READ\n"));
++ break;
++
++ case PWR_CMD_WRITE:
++ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_WRITE\n"));
++ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
++
++#ifdef CONFIG_SDIO_HCI
++ //
++ // <Roger_Notes> We should deal with interface specific address mapping for some interfaces, e.g., SDIO interface
++ // 2011.07.07.
++ //
++ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
++ {
++ // Read Back SDIO Local value
++ value = SdioLocalCmd52Read1Byte(padapter, offset);
++
++ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
++ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
++
++ // Write Back SDIO Local value
++ SdioLocalCmd52Write1Byte(padapter, offset, value);
++ }
++ else
++#endif
++ {
++ // Read the value from system register
++ value = rtw_read8(padapter, offset);
++
++ value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
++ value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd));
++
++ // Write the value back to sytem register
++ rtw_write8(padapter, offset, value);
++ }
++ break;
++
++ case PWR_CMD_POLLING:
++ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_POLLING\n"));
++
++ bPollingBit = _FALSE;
++ offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
++
++ do {
++#ifdef CONFIG_SDIO_HCI
++ if (GET_PWR_CFG_BASE(PwrCfgCmd) == PWR_BASEADDR_SDIO)
++ value = SdioLocalCmd52Read1Byte(padapter, offset);
++ else
++#endif
++ value = rtw_read8(padapter, offset);
++
++ value &= GET_PWR_CFG_MASK(PwrCfgCmd);
++ if (value == (GET_PWR_CFG_VALUE(PwrCfgCmd) & GET_PWR_CFG_MASK(PwrCfgCmd)))
++ bPollingBit = _TRUE;
++ else
++ rtw_udelay_os(10);
++
++ if (pollingCount++ > maxPollingCnt) {
++ RT_TRACE(_module_hal_init_c_ , _drv_err_, ("Fail to polling Offset[%#x]\n", offset));
++ return _FALSE;
++ }
++ } while (!bPollingBit);
++
++ break;
++
++ case PWR_CMD_DELAY:
++ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_DELAY\n"));
++ if (GET_PWR_CFG_VALUE(PwrCfgCmd) == PWRSEQ_DELAY_US)
++ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd));
++ else
++ rtw_udelay_os(GET_PWR_CFG_OFFSET(PwrCfgCmd)*1000);
++ break;
++
++ case PWR_CMD_END:
++ // When this command is parsed, end the process
++ RT_TRACE(_module_hal_init_c_ , _drv_info_, ("HalPwrSeqCmdParsing: PWR_CMD_END\n"));
++ return _TRUE;
++ break;
++
++ default:
++ RT_TRACE(_module_hal_init_c_ , _drv_err_, ("HalPwrSeqCmdParsing: Unknown CMD!!\n"));
++ break;
++ }
++ }
++
++ AryIdx++;//Add Array Index
++ }while(1);
++
++ return _TRUE;
++}
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1154 @@
+/******************************************************************************
+ *
@@ -125793,9 +127627,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_cmd.c
+}
+
+#endif //CONFIG_WOWLAN
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,5055 @@
+/******************************************************************************
+ *
@@ -130852,9 +132686,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_dm.c
+ }
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_init.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,3627 @@
+/******************************************************************************
+ *
@@ -134483,9 +136317,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_hal_i
+ pHalFunc->c2h_handler = c2h_handler_8192c;
+ pHalFunc->c2h_id_filter_ccx = c2h_id_filter_ccx_8192c;
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1207 @@
+/******************************************************************************
+ *
@@ -135694,9 +137528,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_mp.c
+}
+
+#endif // CONFIG_MP_INCLUDE
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycfg.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,4840 @@
+/******************************************************************************
+ *
@@ -140538,9 +142372,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_phycf
+ _PHY_SetRFPathSwitch(pAdapter, bMain, _FALSE);
+ }
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,1030 @@
+/******************************************************************************
+ *
@@ -141572,9 +143406,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rf605
+} /* PHY_RFShadowRead */
+
+/* End of HalRf6052.c */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdesc.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,874 @@
+/******************************************************************************
+ *
@@ -142450,9 +144284,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_rxdes
+ //Offset 20
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_sreset.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,93 @@
+/******************************************************************************
+ *
@@ -142547,9 +144381,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_srese
+ }
+}
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c 2015-08-26 10:26:08.753316330 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.c 2015-10-07 16:40:50.000000000 +0200
@@ -0,0 +1,62 @@
+/******************************************************************************
+ *
@@ -142613,9 +144447,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/rtl8192c_xmit.
+ }
+}
+#endif //CONFIG_XMIT_ACK
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,8757 @@
+/******************************************************************************
+ *
@@ -151374,9 +153208,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUH
+0xc78,0x621e001e,
+0xc78,0x621f001e,
+};
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUHWImg_wowlan.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,2557 @@
+/******************************************************************************
+ *
@@ -153935,9 +155769,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/Hal8192CUH
+0x94,0x01,0x40,0x1e,0x90,0xfd,0x11,0xe0,0xb5,0x05,0x14,0x90,0x01,0x17,0xe0,0xb5,
+0x05,0x07,0x90,0xfd,0x11,0xe4,0xf0,0x80,0x06,0xed,0x04,0x90,0xfd,0x11,0xf0,0xe4,
+0x2f,0xff,0x22,0x00,0x18,0x58,};
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_led.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,2674 @@
+/******************************************************************************
+ *
@@ -156613,9 +158447,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_
+ DeInitLed871x( &(ledpriv->SwLed0) );
+ DeInitLed871x( &(ledpriv->SwLed1) );
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_recv.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,227 @@
+/******************************************************************************
+ *
@@ -156844,9 +158678,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_
+#endif
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_xmit.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1149 @@
+/******************************************************************************
+ *
@@ -157997,9 +159831,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/rtl8192cu_
+
+}
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halinit.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,6260 @@
+/******************************************************************************
+ *
@@ -164261,9 +166095,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_halini
+_func_exit_;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1205 @@
+/******************************************************************************
+ *
@@ -165470,9 +167304,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_ce
+ return ret;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1535 @@
+/******************************************************************************
+ *
@@ -167009,9 +168843,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_li
+ _func_exit_;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1264 @@
+/******************************************************************************
+ *
@@ -168277,18 +170111,2581 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/hal/rtl8192c/usb/usb_ops_xp
+ return ret;
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 linux-rpi/drivers/net/wireless/rtl8192cu/ifcfg-wlan0
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 linux-rpi/drivers/net/wireless/rtl8192cu/ifcfg-wlan0
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/ifcfg-wlan0 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,4 @@
+#DHCP client
+DEVICE=wlan0
+BOOTPROTO=dhcp
+ONBOOT=yes
\ No newline at end of file
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/autoconf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/autoconf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/autoconf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/autoconf.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,336 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++
++/*
++ * Public General Config
++ */
++#define AUTOCONF_INCLUDED
++#define RTL871X_MODULE_NAME "92CU"
++#define DRV_NAME "rtl8192cu"
++
++#define CONFIG_USB_HCI 1
++
++#define CONFIG_RTL8192C 1
++
++#define PLATFORM_LINUX 1
++
++//#define CONFIG_IOCTL_CFG80211 1
++#ifdef CONFIG_IOCTL_CFG80211
++ //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
++ #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
++ //#define CONFIG_DEBUG_CFG80211 1
++ //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
++ #define CONFIG_SET_SCAN_DENY_TIMER
++#endif
++
++/*
++ * Internal General Config
++ */
++//#define CONFIG_PWRCTRL
++//#define CONFIG_H2CLBK
++
++#define CONFIG_EMBEDDED_FWIMG 1
++//#define CONFIG_FILE_FWIMG
++
++#ifdef CONFIG_WAKE_ON_WLAN
++#define CONFIG_WOWLAN 1
++#endif //CONFIG_WAKE_ON_WLAN
++
++#define CONFIG_R871X_TEST 1
++
++#define CONFIG_XMIT_ACK
++#ifdef CONFIG_XMIT_ACK
++ #define CONFIG_XMIT_ACK_POLLING
++ #define CONFIG_ACTIVE_KEEP_ALIVE_CHECK
++#endif
++
++#define CONFIG_80211N_HT 1
++
++#define CONFIG_RECV_REORDERING_CTRL 1
++
++//#define CONFIG_TCP_CSUM_OFFLOAD_RX 1
++
++//#define CONFIG_BEFORE_LINKED_DIG
++//#define CONFIG_DRVEXT_MODULE 1
++
++#ifndef CONFIG_MP_INCLUDED
++ #define CONFIG_IPS 1
++ #ifdef CONFIG_IPS
++ //#define CONFIG_IPS_LEVEL_2 1 //enable this to set default IPS mode to IPS_LEVEL_2
++ #endif
++
++ #define SUPPORT_HW_RFOFF_DETECTED 1
++
++ #define CONFIG_LPS 1
++ #define CONFIG_BT_COEXIST 1
++
++ //befor link
++ #define CONFIG_ANTENNA_DIVERSITY
++
++ //after link
++ #ifdef CONFIG_ANTENNA_DIVERSITY
++ #define CONFIG_SW_ANTENNA_DIVERSITY
++ //#define CONFIG_HW_ANTENNA_DIVERSITY
++ #endif
++
++ #define CONFIG_IOL
++#else //#ifndef CONFIG_MP_INCLUDED
++ #define CONFIG_MP_IWPRIV_SUPPORT 1
++#endif //#ifndef CONFIG_MP_INCLUDED
++
++#define CONFIG_AP_MODE 1
++#ifdef CONFIG_AP_MODE
++ #define CONFIG_NATIVEAP_MLME 1
++ #ifndef CONFIG_NATIVEAP_MLME
++ #define CONFIG_HOSTAPD_MLME 1
++ #endif
++ #define CONFIG_FIND_BEST_CHANNEL 1
++ //#define CONFIG_NO_WIRELESS_HANDLERS 1
++#endif
++
++// Added by Albert 20110314
++#define CONFIG_P2P 1
++#ifdef CONFIG_P2P
++ //Added by Albert 20110812
++ //The CONFIG_WFD is for supporting the Wi-Fi display
++ #define CONFIG_WFD
++
++ #ifndef CONFIG_WIFI_TEST
++ #define CONFIG_P2P_REMOVE_GROUP_INFO
++ #endif
++ //#define CONFIG_DBG_P2P
++
++ //#define CONFIG_P2P_PS
++ //#define CONFIG_P2P_IPS
++
++ #define P2P_OP_CHECK_SOCIAL_CH
++ // Added comment by Borg 2013/06/21
++ // Issue: Nexus 4 is hard to do miracast.
++ // Root Cause: After group formation,
++ // Nexus 4 is possible to be not at OP channel of Invitation Resp/Nego Confirm but at social channel.
++ // Patch: While scan OP channel,
++ // not only scan OP channel of Invitation Resp/Nego Confirm,
++ // but also scan social channel(1, 6, 11)
++#endif
++
++// Added by Kurt 20110511
++//#define CONFIG_TDLS 1
++#ifdef CONFIG_TDLS
++// #ifndef CONFIG_WFD
++// #define CONFIG_WFD 1
++// #endif
++// #define CONFIG_TDLS_AUTOSETUP 1
++// #define CONFIG_TDLS_AUTOCHECKALIVE 1
++#endif
++
++#define CONFIG_SKB_COPY 1//for amsdu
++
++#define CONFIG_LED
++#ifdef CONFIG_LED
++ #define CONFIG_SW_LED
++ #ifdef CONFIG_SW_LED
++ //#define CONFIG_LED_HANDLED_BY_CMD_THREAD
++ #endif
++#endif // CONFIG_LED
++
++
++
++#define USB_INTERFERENCE_ISSUE // this should be checked in all usb interface
++#define CONFIG_GLOBAL_UI_PID
++
++#define CONFIG_LAYER2_ROAMING
++#define CONFIG_LAYER2_ROAMING_RESUME
++//#define CONFIG_ADAPTOR_INFO_CACHING_FILE // now just applied on 8192cu only, should make it general...
++//#define CONFIG_RESUME_IN_WORKQUEUE
++//#define CONFIG_SET_SCAN_DENY_TIMER
++#define CONFIG_LONG_DELAY_ISSUE
++#define CONFIG_NEW_SIGNAL_STAT_PROCESS
++//#define CONFIG_SIGNAL_DISPLAY_DBM //display RX signal with dbm
++#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable */
++#define CONFIG_DEAUTH_BEFORE_CONNECT
++
++#ifdef CONFIG_IOL
++ #define CONFIG_IOL_LLT
++ #define CONFIG_IOL_MAC
++ #define CONFIG_IOL_BB_PHY_REG
++ #define CONFIG_IOL_BB_AGC_TAB
++ #define CONFIG_IOL_RF_RF90_PATH_A
++ #define CONFIG_IOL_RF_RF90_PATH_B
++#endif
++
++#define CONFIG_BR_EXT 1 // Enable NAT2.5 support for STA mode interface with a L2 Bridge
++#ifdef CONFIG_BR_EXT
++#define CONFIG_BR_EXT_BRNAME "br0"
++#endif // CONFIG_BR_EXT
++
++#define CONFIG_TX_MCAST2UNI 1 // Support IP multicast->unicast
++//#define CONFIG_DM_ADAPTIVITY
++//#define CONFIG_CHECK_AC_LIFETIME 1 // Check packet lifetime of 4 ACs.
++
++//#define CONFIG_CONCURRENT_MODE 1
++#ifdef CONFIG_CONCURRENT_MODE
++ #define CONFIG_TSF_RESET_OFFLOAD 1 // For 2 PORT TSF SYNC.
++ //#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
++ //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
++ //#define CONFIG_MULTI_VIR_IFACES //besides primary&secondary interfaces, extend to support more interfaces
++#endif // CONFIG_CONCURRENT_MODE
++
++#define CONFIG_80211D
++
++/*
++ * Interface Related Config
++ */
++
++//#define CONFIG_USB_ONE_OUT_EP
++//#define CONFIG_USB_INTERRUPT_IN_PIPE 1
++
++#ifndef CONFIG_MINIMAL_MEMORY_USAGE
++ #define CONFIG_USB_TX_AGGREGATION 1
++ #define CONFIG_USB_RX_AGGREGATION 1
++#endif
++
++#define CONFIG_PREALLOC_RECV_SKB 1
++//#define CONFIG_REDUCE_USB_TX_INT 1 // Trade-off: Improve performance, but may cause TX URBs blocked by USB Host/Bus driver on few platforms.
++//#define CONFIG_EASY_REPLACEMENT 1
++
++/*
++ * CONFIG_USE_USB_BUFFER_ALLOC_XX uses Linux USB Buffer alloc API and is for Linux platform only now!
++ */
++//#define CONFIG_USE_USB_BUFFER_ALLOC_TX 1 // Trade-off: For TX path, improve stability on some platforms, but may cause performance degrade on other platforms.
++//#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1 // For RX path
++#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
++#undef CONFIG_PREALLOC_RECV_SKB
++#endif
++
++/*
++ * USB VENDOR REQ BUFFER ALLOCATION METHOD
++ * if not set we'll use function local variable (stack memory)
++ */
++//#define CONFIG_USB_VENDOR_REQ_BUFFER_DYNAMIC_ALLOCATE
++#define CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
++
++#define CONFIG_USB_VENDOR_REQ_MUTEX
++#define CONFIG_VENDOR_REQ_RETRY
++
++//#define CONFIG_USB_SUPPORT_ASYNC_VDN_REQ 1
++
++
++/*
++ * HAL Related Config
++ */
++
++#define RTL8192C_RX_PACKET_NO_INCLUDE_CRC 1
++
++#define SUPPORTED_BLOCK_IO
++
++
++
++#define RTL8192CU_FW_DOWNLOAD_ENABLE 1
++
++#define CONFIG_ONLY_ONE_OUT_EP_TO_LOW 0
++
++#define CONFIG_OUT_EP_WIFI_MODE 0
++
++#define ENABLE_USB_DROP_INCORRECT_OUT 0
++
++#define RTL8192CU_ASIC_VERIFICATION 0 // For ASIC verification.
++
++#define RTL8192CU_ADHOC_WORKAROUND_SETTING 1
++
++#define DISABLE_BB_RF 0
++
++#define RTL8191C_FPGA_NETWORKTYPE_ADHOC 0
++
++#ifdef CONFIG_MP_INCLUDED
++ #define MP_DRIVER 1
++ #undef CONFIG_USB_TX_AGGREGATION
++ #undef CONFIG_USB_RX_AGGREGATION
++#else
++ #define MP_DRIVER 0
++#endif
++
++
++/*
++ * Platform Related Config
++ */
++#ifdef CONFIG_PLATFORM_MN10300
++#define CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
++
++#if defined (CONFIG_SW_ANTENNA_DIVERSITY)
++ #undef CONFIG_SW_ANTENNA_DIVERSITY
++ #define CONFIG_HW_ANTENNA_DIVERSITY
++#endif
++
++#endif
++
++#ifdef CONFIG_WISTRON_PLATFORM
++
++#endif
++
++#ifdef CONFIG_PLATFORM_TI_DM365
++#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1
++#endif
++
++#define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
++
++/*
++ * Debug Related Config
++ */
++//#define CONFIG_DEBUG_RTL871X
++
++#define DBG 0
++//#define CONFIG_DEBUG_RTL819X
++
++//#define CONFIG_PROC_DEBUG 1
++
++//#define DBG_IO
++//#define DBG_DELAY_OS
++//#define DBG_MEM_ALLOC
++//#define DBG_IOCTL
++
++//#define DBG_TX
++//#define DBG_XMIT_BUF
++//#define DBG_TX_DROP_FRAME
++
++//#define DBG_RX_DROP_FRAME
++//#define DBG_RX_SEQ
++//#define DBG_RX_SIGNAL_DISPLAY_PROCESSING
++//#define DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED "jeff-ap"
++
++//#define DBG_EXPIRATION_CHK
++
++
++//#define DBG_SHOW_MCUFWDL_BEFORE_51_ENABLE
++//#define DBG_ROAMING_TEST
++
++//#define DBG_HAL_INIT_PROFILING
++
++//#define DBG_MEMORY_LEAK 1
++
++#define DBG_CONFIG_ERROR_DETECT
++//#define DBG_CONFIG_ERROR_RESET
++
++//TX use 1 urb
++//#define CONFIG_SINGLE_XMIT_BUF
++//RX use 1 urb
++//#define CONFIG_SINGLE_RECV_BUF
++
++//turn off power tracking when traffic is busy
++//#define CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/basic_types.h linux-rpi/drivers/net/wireless/rtl8192cu/include/basic_types.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/basic_types.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/basic_types.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,320 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __BASIC_TYPES_H__
++#define __BASIC_TYPES_H__
++
++#include <drv_conf.h>
++
++
++#define SUCCESS 0
++#define FAIL (-1)
++
++#ifndef TRUE
++ #define _TRUE 1
++#else
++ #define _TRUE TRUE
++#endif
++
++#ifndef FALSE
++ #define _FALSE 0
++#else
++ #define _FALSE FALSE
++#endif
++
++#ifdef PLATFORM_WINDOWS
++
++ typedef signed char s8;
++ typedef unsigned char u8;
++
++ typedef signed short s16;
++ typedef unsigned short u16;
++
++ typedef signed long s32;
++ typedef unsigned long u32;
++
++ typedef unsigned int uint;
++ typedef signed int sint;
++
++
++ typedef signed long long s64;
++ typedef unsigned long long u64;
++
++ #ifdef NDIS50_MINIPORT
++
++ #define NDIS_MAJOR_VERSION 5
++ #define NDIS_MINOR_VERSION 0
++
++ #endif
++
++ #ifdef NDIS51_MINIPORT
++
++ #define NDIS_MAJOR_VERSION 5
++ #define NDIS_MINOR_VERSION 1
++
++ #endif
++
++ typedef NDIS_PROC proc_t;
++
++ typedef LONG atomic_t;
++
++#endif
++
++
++#ifdef PLATFORM_LINUX
++
++ #include <linux/types.h>
++ #define IN
++ #define OUT
++ #define VOID void
++ #define NDIS_OID uint
++ #define NDIS_STATUS uint
++
++ typedef signed int sint;
++
++ #ifndef PVOID
++ typedef void * PVOID;
++ //#define PVOID (void *)
++ #endif
++
++ #define UCHAR u8
++ #define USHORT u16
++ #define UINT u32
++ #define ULONG u32
++
++ typedef void (*proc_t)(void*);
++
++ typedef __kernel_size_t SIZE_T;
++ typedef __kernel_ssize_t SSIZE_T;
++ #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
++
++#endif
++
++
++#ifdef PLATFORM_FREEBSD
++
++ typedef signed char s8;
++ typedef unsigned char u8;
++
++ typedef signed short s16;
++ typedef unsigned short u16;
++
++ typedef signed int s32;
++ typedef unsigned int u32;
++
++ typedef unsigned int uint;
++ typedef signed int sint;
++ typedef long atomic_t;
++
++ typedef signed long long s64;
++ typedef unsigned long long u64;
++ #define IN
++ #define OUT
++ #define VOID void
++ #define NDIS_OID uint
++ #define NDIS_STATUS uint
++
++ #ifndef PVOID
++ typedef void * PVOID;
++ //#define PVOID (void *)
++ #endif
++ typedef u32 dma_addr_t;
++ #define UCHAR u8
++ #define USHORT u16
++ #define UINT u32
++ #define ULONG u32
++
++ typedef void (*proc_t)(void*);
++
++ typedef unsigned int __kernel_size_t;
++ typedef int __kernel_ssize_t;
++
++ typedef __kernel_size_t SIZE_T;
++ typedef __kernel_ssize_t SSIZE_T;
++ #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
++
++#endif
++
++#define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T))
++#define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1)
++
++#define SIZE_PTR SIZE_T
++#define SSIZE_PTR SSIZE_T
++
++//port from fw by thomas
++// TODO: Belows are Sync from SD7-Driver. It is necessary to check correctness
++
++/*
++ * Call endian free function when
++ * 1. Read/write packet content.
++ * 2. Before write integer to IO.
++ * 3. After read integer from IO.
++*/
++
++//
++// Byte Swapping routine.
++//
++#define EF1Byte
++#define EF2Byte le16_to_cpu
++#define EF4Byte le32_to_cpu
++
++//
++// Read LE format data from memory
++//
++#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr)))
++#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr)))
++#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr)))
++
++//
++// Write LE data to memory
++//
++#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val)
++#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val)
++#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val)
++
++//
++// Example:
++// BIT_LEN_MASK_32(0) => 0x00000000
++// BIT_LEN_MASK_32(1) => 0x00000001
++// BIT_LEN_MASK_32(2) => 0x00000003
++// BIT_LEN_MASK_32(32) => 0xFFFFFFFF
++//
++#define BIT_LEN_MASK_32(__BitLen) \
++ (0xFFFFFFFF >> (32 - (__BitLen)))
++//
++// Example:
++// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
++// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
++//
++#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \
++ (BIT_LEN_MASK_32(__BitLen) << (__BitOffset))
++
++//
++// Description:
++// Return 4-byte value in host byte ordering from
++// 4-byte pointer in litten-endian system.
++//
++#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
++ (EF4Byte(*((u32 *)(__pStart))))
++
++//
++// Description:
++// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to
++// 4-byte value in host byte ordering.
++//
++#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \
++ & \
++ BIT_LEN_MASK_32(__BitLen) \
++ )
++
++//
++// Description:
++// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering
++// and return the result in 4-byte value in host byte ordering.
++//
++#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
++ & \
++ ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \
++ )
++
++//
++// Description:
++// Set subfield of little-endian 4-byte value to specified value.
++//
++#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
++ *((u32 *)(__pStart)) = \
++ EF4Byte( \
++ LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
++ | \
++ ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \
++ );
++
++
++#define BIT_LEN_MASK_16(__BitLen) \
++ (0xFFFF >> (16 - (__BitLen)))
++
++#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \
++ (BIT_LEN_MASK_16(__BitLen) << (__BitOffset))
++
++#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
++ (EF2Byte(*((u16 *)(__pStart))))
++
++#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \
++ & \
++ BIT_LEN_MASK_16(__BitLen) \
++ )
++
++#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
++ & \
++ ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \
++ )
++
++#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
++ *((u16 *)(__pStart)) = \
++ EF2Byte( \
++ LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
++ | \
++ ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \
++ );
++
++#define BIT_LEN_MASK_8(__BitLen) \
++ (0xFF >> (8 - (__BitLen)))
++
++#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \
++ (BIT_LEN_MASK_8(__BitLen) << (__BitOffset))
++
++#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
++ (EF1Byte(*((u8 *)(__pStart))))
++
++#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \
++ & \
++ BIT_LEN_MASK_8(__BitLen) \
++ )
++
++#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
++ ( \
++ LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
++ & \
++ ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \
++ )
++
++#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
++ *((u8 *)(__pStart)) = \
++ EF1Byte( \
++ LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
++ | \
++ ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \
++ );
++
++// Get the N-bytes aligment offset from the current length
++#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
++
++typedef unsigned char BOOLEAN,*PBOOLEAN;
++
++#endif //__BASIC_TYPES_H__
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,87 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _LINUX_BYTEORDER_BIG_ENDIAN_H
++#define _LINUX_BYTEORDER_BIG_ENDIAN_H
++
++#ifndef __BIG_ENDIAN
++#define __BIG_ENDIAN 4321
++#endif
++#ifndef __BIG_ENDIAN_BITFIELD
++#define __BIG_ENDIAN_BITFIELD
++#endif
++
++#include <byteorder/swab.h>
++
++#define __constant_htonl(x) ((__u32)(x))
++#define __constant_ntohl(x) ((__u32)(x))
++#define __constant_htons(x) ((__u16)(x))
++#define __constant_ntohs(x) ((__u16)(x))
++#define __constant_cpu_to_le64(x) ___constant_swab64((x))
++#define __constant_le64_to_cpu(x) ___constant_swab64((x))
++#define __constant_cpu_to_le32(x) ___constant_swab32((x))
++#define __constant_le32_to_cpu(x) ___constant_swab32((x))
++#define __constant_cpu_to_le16(x) ___constant_swab16((x))
++#define __constant_le16_to_cpu(x) ___constant_swab16((x))
++#define __constant_cpu_to_be64(x) ((__u64)(x))
++#define __constant_be64_to_cpu(x) ((__u64)(x))
++#define __constant_cpu_to_be32(x) ((__u32)(x))
++#define __constant_be32_to_cpu(x) ((__u32)(x))
++#define __constant_cpu_to_be16(x) ((__u16)(x))
++#define __constant_be16_to_cpu(x) ((__u16)(x))
++#define __cpu_to_le64(x) __swab64((x))
++#define __le64_to_cpu(x) __swab64((x))
++#define __cpu_to_le32(x) __swab32((x))
++#define __le32_to_cpu(x) __swab32((x))
++#define __cpu_to_le16(x) __swab16((x))
++#define __le16_to_cpu(x) __swab16((x))
++#define __cpu_to_be64(x) ((__u64)(x))
++#define __be64_to_cpu(x) ((__u64)(x))
++#define __cpu_to_be32(x) ((__u32)(x))
++#define __be32_to_cpu(x) ((__u32)(x))
++#define __cpu_to_be16(x) ((__u16)(x))
++#define __be16_to_cpu(x) ((__u16)(x))
++#define __cpu_to_le64p(x) __swab64p((x))
++#define __le64_to_cpup(x) __swab64p((x))
++#define __cpu_to_le32p(x) __swab32p((x))
++#define __le32_to_cpup(x) __swab32p((x))
++#define __cpu_to_le16p(x) __swab16p((x))
++#define __le16_to_cpup(x) __swab16p((x))
++#define __cpu_to_be64p(x) (*(__u64*)(x))
++#define __be64_to_cpup(x) (*(__u64*)(x))
++#define __cpu_to_be32p(x) (*(__u32*)(x))
++#define __be32_to_cpup(x) (*(__u32*)(x))
++#define __cpu_to_be16p(x) (*(__u16*)(x))
++#define __be16_to_cpup(x) (*(__u16*)(x))
++#define __cpu_to_le64s(x) __swab64s((x))
++#define __le64_to_cpus(x) __swab64s((x))
++#define __cpu_to_le32s(x) __swab32s((x))
++#define __le32_to_cpus(x) __swab32s((x))
++#define __cpu_to_le16s(x) __swab16s((x))
++#define __le16_to_cpus(x) __swab16s((x))
++#define __cpu_to_be64s(x) do {} while (0)
++#define __be64_to_cpus(x) do {} while (0)
++#define __cpu_to_be32s(x) do {} while (0)
++#define __be32_to_cpus(x) do {} while (0)
++#define __cpu_to_be16s(x) do {} while (0)
++#define __be16_to_cpus(x) do {} while (0)
++
++#include <byteorder/generic.h>
++
++#endif /* _LINUX_BYTEORDER_BIG_ENDIAN_H */
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,212 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _LINUX_BYTEORDER_GENERIC_H
++#define _LINUX_BYTEORDER_GENERIC_H
++
++/*
++ * linux/byteorder_generic.h
++ * Generic Byte-reordering support
++ *
++ * Francois-Rene Rideau <fare@tunes.org> 19970707
++ * gathered all the good ideas from all asm-foo/byteorder.h into one file,
++ * cleaned them up.
++ * I hope it is compliant with non-GCC compilers.
++ * I decided to put __BYTEORDER_HAS_U64__ in byteorder.h,
++ * because I wasn't sure it would be ok to put it in types.h
++ * Upgraded it to 2.1.43
++ * Francois-Rene Rideau <fare@tunes.org> 19971012
++ * Upgraded it to 2.1.57
++ * to please Linus T., replaced huge #ifdef's between little/big endian
++ * by nestedly #include'd files.
++ * Francois-Rene Rideau <fare@tunes.org> 19971205
++ * Made it to 2.1.71; now a facelift:
++ * Put files under include/linux/byteorder/
++ * Split swab from generic support.
++ *
++ * TODO:
++ * = Regular kernel maintainers could also replace all these manual
++ * byteswap macros that remain, disseminated among drivers,
++ * after some grep or the sources...
++ * = Linus might want to rename all these macros and files to fit his taste,
++ * to fit his personal naming scheme.
++ * = it seems that a few drivers would also appreciate
++ * nybble swapping support...
++ * = every architecture could add their byteswap macro in asm/byteorder.h
++ * see how some architectures already do (i386, alpha, ppc, etc)
++ * = cpu_to_beXX and beXX_to_cpu might some day need to be well
++ * distinguished throughout the kernel. This is not the case currently,
++ * since little endian, big endian, and pdp endian machines needn't it.
++ * But this might be the case for, say, a port of Linux to 20/21 bit
++ * architectures (and F21 Linux addict around?).
++ */
++
++/*
++ * The following macros are to be defined by <asm/byteorder.h>:
++ *
++ * Conversion of long and short int between network and host format
++ * ntohl(__u32 x)
++ * ntohs(__u16 x)
++ * htonl(__u32 x)
++ * htons(__u16 x)
++ * It seems that some programs (which? where? or perhaps a standard? POSIX?)
++ * might like the above to be functions, not macros (why?).
++ * if that's true, then detect them, and take measures.
++ * Anyway, the measure is: define only ___ntohl as a macro instead,
++ * and in a separate file, have
++ * unsigned long inline ntohl(x){return ___ntohl(x);}
++ *
++ * The same for constant arguments
++ * __constant_ntohl(__u32 x)
++ * __constant_ntohs(__u16 x)
++ * __constant_htonl(__u32 x)
++ * __constant_htons(__u16 x)
++ *
++ * Conversion of XX-bit integers (16- 32- or 64-)
++ * between native CPU format and little/big endian format
++ * 64-bit stuff only defined for proper architectures
++ * cpu_to_[bl]eXX(__uXX x)
++ * [bl]eXX_to_cpu(__uXX x)
++ *
++ * The same, but takes a pointer to the value to convert
++ * cpu_to_[bl]eXXp(__uXX x)
++ * [bl]eXX_to_cpup(__uXX x)
++ *
++ * The same, but change in situ
++ * cpu_to_[bl]eXXs(__uXX x)
++ * [bl]eXX_to_cpus(__uXX x)
++ *
++ * See asm-foo/byteorder.h for examples of how to provide
++ * architecture-optimized versions
++ *
++ */
++
++
++#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL) || defined(PLATFORM_FREEBSD)
++/*
++ * inside the kernel, we can use nicknames;
++ * outside of it, we must avoid POSIX namespace pollution...
++ */
++#define cpu_to_le64 __cpu_to_le64
++#define le64_to_cpu __le64_to_cpu
++#define cpu_to_le32 __cpu_to_le32
++#define le32_to_cpu __le32_to_cpu
++#define cpu_to_le16 __cpu_to_le16
++#define le16_to_cpu __le16_to_cpu
++#define cpu_to_be64 __cpu_to_be64
++#define be64_to_cpu __be64_to_cpu
++#define cpu_to_be32 __cpu_to_be32
++#define be32_to_cpu __be32_to_cpu
++#define cpu_to_be16 __cpu_to_be16
++#define be16_to_cpu __be16_to_cpu
++#define cpu_to_le64p __cpu_to_le64p
++#define le64_to_cpup __le64_to_cpup
++#define cpu_to_le32p __cpu_to_le32p
++#define le32_to_cpup __le32_to_cpup
++#define cpu_to_le16p __cpu_to_le16p
++#define le16_to_cpup __le16_to_cpup
++#define cpu_to_be64p __cpu_to_be64p
++#define be64_to_cpup __be64_to_cpup
++#define cpu_to_be32p __cpu_to_be32p
++#define be32_to_cpup __be32_to_cpup
++#define cpu_to_be16p __cpu_to_be16p
++#define be16_to_cpup __be16_to_cpup
++#define cpu_to_le64s __cpu_to_le64s
++#define le64_to_cpus __le64_to_cpus
++#define cpu_to_le32s __cpu_to_le32s
++#define le32_to_cpus __le32_to_cpus
++#define cpu_to_le16s __cpu_to_le16s
++#define le16_to_cpus __le16_to_cpus
++#define cpu_to_be64s __cpu_to_be64s
++#define be64_to_cpus __be64_to_cpus
++#define cpu_to_be32s __cpu_to_be32s
++#define be32_to_cpus __be32_to_cpus
++#define cpu_to_be16s __cpu_to_be16s
++#define be16_to_cpus __be16_to_cpus
++#endif
++
++
++/*
++ * Handle ntohl and suches. These have various compatibility
++ * issues - like we want to give the prototype even though we
++ * also have a macro for them in case some strange program
++ * wants to take the address of the thing or something..
++ *
++ * Note that these used to return a "long" in libc5, even though
++ * long is often 64-bit these days.. Thus the casts.
++ *
++ * They have to be macros in order to do the constant folding
++ * correctly - if the argument passed into a inline function
++ * it is no longer constant according to gcc..
++ */
++
++#undef ntohl
++#undef ntohs
++#undef htonl
++#undef htons
++
++/*
++ * Do the prototypes. Somebody might want to take the
++ * address or some such sick thing..
++ */
++#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
++extern __u32 ntohl(__u32);
++extern __u32 htonl(__u32);
++#else //defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
++#ifndef PLATFORM_FREEBSD
++extern unsigned long int ntohl(unsigned long int);
++extern unsigned long int htonl(unsigned long int);
++#endif
++#endif
++#ifndef PLATFORM_FREEBSD
++extern unsigned short int ntohs(unsigned short int);
++extern unsigned short int htons(unsigned short int);
++#endif
++
++#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) || defined(PLATFORM_MPIXEL)
++
++#define ___htonl(x) __cpu_to_be32(x)
++#define ___htons(x) __cpu_to_be16(x)
++#define ___ntohl(x) __be32_to_cpu(x)
++#define ___ntohs(x) __be16_to_cpu(x)
++
++#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
++#define htonl(x) ___htonl(x)
++#define ntohl(x) ___ntohl(x)
++#else
++#define htonl(x) ((unsigned long)___htonl(x))
++#define ntohl(x) ((unsigned long)___ntohl(x))
++#endif
++#define htons(x) ___htons(x)
++#define ntohs(x) ___ntohs(x)
++
++#endif /* OPTIMIZE */
++
++
++#if defined (PLATFORM_WINDOWS)
++
++#define htonl(x) __cpu_to_be32(x)
++#define ntohl(x) __be32_to_cpu(x)
++#define htons(x) __cpu_to_be16(x)
++#define ntohs(x) __be16_to_cpu(x)
++
++
++#endif
++
++#endif /* _LINUX_BYTEORDER_GENERIC_H */
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,89 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _LINUX_BYTEORDER_LITTLE_ENDIAN_H
++#define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
++
++#ifndef __LITTLE_ENDIAN
++#define __LITTLE_ENDIAN 1234
++#endif
++#ifndef __LITTLE_ENDIAN_BITFIELD
++#define __LITTLE_ENDIAN_BITFIELD
++#endif
++
++#include <byteorder/swab.h>
++
++#ifndef __constant_htonl
++#define __constant_htonl(x) ___constant_swab32((x))
++#define __constant_ntohl(x) ___constant_swab32((x))
++#define __constant_htons(x) ___constant_swab16((x))
++#define __constant_ntohs(x) ___constant_swab16((x))
++#define __constant_cpu_to_le64(x) ((__u64)(x))
++#define __constant_le64_to_cpu(x) ((__u64)(x))
++#define __constant_cpu_to_le32(x) ((__u32)(x))
++#define __constant_le32_to_cpu(x) ((__u32)(x))
++#define __constant_cpu_to_le16(x) ((__u16)(x))
++#define __constant_le16_to_cpu(x) ((__u16)(x))
++#define __constant_cpu_to_be64(x) ___constant_swab64((x))
++#define __constant_be64_to_cpu(x) ___constant_swab64((x))
++#define __constant_cpu_to_be32(x) ___constant_swab32((x))
++#define __constant_be32_to_cpu(x) ___constant_swab32((x))
++#define __constant_cpu_to_be16(x) ___constant_swab16((x))
++#define __constant_be16_to_cpu(x) ___constant_swab16((x))
++#define __cpu_to_le64(x) ((__u64)(x))
++#define __le64_to_cpu(x) ((__u64)(x))
++#define __cpu_to_le32(x) ((__u32)(x))
++#define __le32_to_cpu(x) ((__u32)(x))
++#define __cpu_to_le16(x) ((__u16)(x))
++#define __le16_to_cpu(x) ((__u16)(x))
++#define __cpu_to_be64(x) __swab64((x))
++#define __be64_to_cpu(x) __swab64((x))
++#define __cpu_to_be32(x) __swab32((x))
++#define __be32_to_cpu(x) __swab32((x))
++#define __cpu_to_be16(x) __swab16((x))
++#define __be16_to_cpu(x) __swab16((x))
++#define __cpu_to_le64p(x) (*(__u64*)(x))
++#define __le64_to_cpup(x) (*(__u64*)(x))
++#define __cpu_to_le32p(x) (*(__u32*)(x))
++#define __le32_to_cpup(x) (*(__u32*)(x))
++#define __cpu_to_le16p(x) (*(__u16*)(x))
++#define __le16_to_cpup(x) (*(__u16*)(x))
++#define __cpu_to_be64p(x) __swab64p((x))
++#define __be64_to_cpup(x) __swab64p((x))
++#define __cpu_to_be32p(x) __swab32p((x))
++#define __be32_to_cpup(x) __swab32p((x))
++#define __cpu_to_be16p(x) __swab16p((x))
++#define __be16_to_cpup(x) __swab16p((x))
++#define __cpu_to_le64s(x) do {} while (0)
++#define __le64_to_cpus(x) do {} while (0)
++#define __cpu_to_le32s(x) do {} while (0)
++#define __le32_to_cpus(x) do {} while (0)
++#define __cpu_to_le16s(x) do {} while (0)
++#define __le16_to_cpus(x) do {} while (0)
++#define __cpu_to_be64s(x) __swab64s((x))
++#define __be64_to_cpus(x) __swab64s((x))
++#define __cpu_to_be32s(x) __swab32s((x))
++#define __be32_to_cpus(x) __swab32s((x))
++#define __cpu_to_be16s(x) __swab16s((x))
++#define __be16_to_cpus(x) __swab16s((x))
++#endif // __constant_htonl
++
++#include <byteorder/generic.h>
++
++#endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,156 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _LINUX_BYTEORDER_SWABB_H
++#define _LINUX_BYTEORDER_SWABB_H
++
++/*
++ * linux/byteorder/swabb.h
++ * SWAp Bytes Bizarrely
++ * swaHHXX[ps]?(foo)
++ *
++ * Support for obNUXIous pdp-endian and other bizarre architectures.
++ * Will Linux ever run on such ancient beasts? if not, this file
++ * will be but a programming pearl. Still, it's a reminder that we
++ * shouldn't be making too many assumptions when trying to be portable.
++ *
++ */
++
++/*
++ * Meaning of the names I chose (vaxlinux people feel free to correct them):
++ * swahw32 swap 16-bit half-words in a 32-bit word
++ * swahb32 swap 8-bit halves of each 16-bit half-word in a 32-bit word
++ *
++ * No 64-bit support yet. I don't know NUXI conventions for long longs.
++ * I guarantee it will be a mess when it's there, though :->
++ * It will be even worse if there are conflicting 64-bit conventions.
++ * Hopefully, no one ever used 64-bit objects on NUXI machines.
++ *
++ */
++
++#define ___swahw32(x) \
++({ \
++ __u32 __x = (x); \
++ ((__u32)( \
++ (((__u32)(__x) & (__u32)0x0000ffffUL) << 16) | \
++ (((__u32)(__x) & (__u32)0xffff0000UL) >> 16) )); \
++})
++#define ___swahb32(x) \
++({ \
++ __u32 __x = (x); \
++ ((__u32)( \
++ (((__u32)(__x) & (__u32)0x00ff00ffUL) << 8) | \
++ (((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )); \
++})
++
++#define ___constant_swahw32(x) \
++ ((__u32)( \
++ (((__u32)(x) & (__u32)0x0000ffffUL) << 16) | \
++ (((__u32)(x) & (__u32)0xffff0000UL) >> 16) ))
++#define ___constant_swahb32(x) \
++ ((__u32)( \
++ (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) | \
++ (((__u32)(x) & (__u32)0xff00ff00UL) >> 8) ))
++
++/*
++ * provide defaults when no architecture-specific optimization is detected
++ */
++#ifndef __arch__swahw32
++# define __arch__swahw32(x) ___swahw32(x)
++#endif
++#ifndef __arch__swahb32
++# define __arch__swahb32(x) ___swahb32(x)
++#endif
++
++#ifndef __arch__swahw32p
++# define __arch__swahw32p(x) __swahw32(*(x))
++#endif
++#ifndef __arch__swahb32p
++# define __arch__swahb32p(x) __swahb32(*(x))
++#endif
++
++#ifndef __arch__swahw32s
++# define __arch__swahw32s(x) do { *(x) = __swahw32p((x)); } while (0)
++#endif
++#ifndef __arch__swahb32s
++# define __arch__swahb32s(x) do { *(x) = __swahb32p((x)); } while (0)
++#endif
++
++
++/*
++ * Allow constant folding
++ */
++#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__)
++# define __swahw32(x) \
++(__builtin_constant_p((__u32)(x)) ? \
++ ___swahw32((x)) : \
++ __fswahw32((x)))
++# define __swahb32(x) \
++(__builtin_constant_p((__u32)(x)) ? \
++ ___swahb32((x)) : \
++ __fswahb32((x)))
++#else
++# define __swahw32(x) __fswahw32(x)
++# define __swahb32(x) __fswahb32(x)
++#endif /* OPTIMIZE */
++
++
++__inline static__ __const__ __u32 __fswahw32(__u32 x)
++{
++ return __arch__swahw32(x);
++}
++__inline static__ __u32 __swahw32p(__u32 *x)
++{
++ return __arch__swahw32p(x);
++}
++__inline static__ void __swahw32s(__u32 *addr)
++{
++ __arch__swahw32s(addr);
++}
++
++
++__inline static__ __const__ __u32 __fswahb32(__u32 x)
++{
++ return __arch__swahb32(x);
++}
++__inline static__ __u32 __swahb32p(__u32 *x)
++{
++ return __arch__swahb32p(x);
++}
++__inline static__ void __swahb32s(__u32 *addr)
++{
++ __arch__swahb32s(addr);
++}
++
++#ifdef __BYTEORDER_HAS_U64__
++/*
++ * Not supported yet
++ */
++#endif /* __BYTEORDER_HAS_U64__ */
++
++#if defined(PLATFORM_LINUX)
++#define swahw32 __swahw32
++#define swahb32 __swahb32
++#define swahw32p __swahw32p
++#define swahb32p __swahb32p
++#define swahw32s __swahw32s
++#define swahb32s __swahb32s
++#endif
++
++#endif /* _LINUX_BYTEORDER_SWABB_H */
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,140 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _LINUX_BYTEORDER_SWAB_H
++#define _LINUX_BYTEORDER_SWAB_H
++
++#if !defined(CONFIG_PLATFORM_MSTAR)
++#ifndef __u16
++typedef unsigned short __u16;
++#endif
++
++#ifndef __u32
++typedef unsigned int __u32;
++#endif
++
++#ifndef __u8
++typedef unsigned char __u8;
++#endif
++
++#ifndef __u64
++typedef unsigned long long __u64;
++#endif
++
++
++__inline static __u16 ___swab16(__u16 x)
++{
++ __u16 __x = x;
++ return
++ ((__u16)(
++ (((__u16)(__x) & (__u16)0x00ffU) << 8) |
++ (((__u16)(__x) & (__u16)0xff00U) >> 8) ));
++
++}
++
++__inline static __u32 ___swab32(__u32 x)
++{
++ __u32 __x = (x);
++ return ((__u32)(
++ (((__u32)(__x) & (__u32)0x000000ffUL) << 24) |
++ (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) |
++ (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) |
++ (((__u32)(__x) & (__u32)0xff000000UL) >> 24) ));
++}
++
++__inline static __u64 ___swab64(__u64 x)
++{
++ __u64 __x = (x);
++
++ return
++ ((__u64)( \
++ (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \
++ (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \
++ (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \
++ (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \
++ (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \
++ (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \
++ (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \
++ (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \
++}
++#endif // CONFIG_PLATFORM_MSTAR
++
++#ifndef __arch__swab16
++__inline static __u16 __arch__swab16(__u16 x)
++{
++ return ___swab16(x);
++}
++
++#endif
++
++#ifndef __arch__swab32
++__inline static __u32 __arch__swab32(__u32 x)
++{
++ __u32 __tmp = (x) ;
++ return ___swab32(__tmp);
++}
++#endif
++
++#ifndef __arch__swab64
++
++__inline static __u64 __arch__swab64(__u64 x)
++{
++ __u64 __tmp = (x) ;
++ return ___swab64(__tmp);
++}
++
++
++#endif
++
++#ifndef __swab16
++#define __swab16(x) __fswab16(x)
++#define __swab32(x) __fswab32(x)
++#define __swab64(x) __fswab64(x)
++#endif // __swab16
++
++#ifdef PLATFORM_FREEBSD
++__inline static __u16 __fswab16(__u16 x)
++#else
++__inline static const __u16 __fswab16(__u16 x)
++#endif //PLATFORM_FREEBSD
++{
++ return __arch__swab16(x);
++}
++#ifdef PLATFORM_FREEBSD
++__inline static __u32 __fswab32(__u32 x)
++#else
++__inline static const __u32 __fswab32(__u32 x)
++#endif //PLATFORM_FREEBSD
++{
++ return __arch__swab32(x);
++}
++
++#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS)
++#define swab16 __swab16
++#define swab32 __swab32
++#define swab64 __swab64
++#define swab16p __swab16p
++#define swab32p __swab32p
++#define swab64p __swab64p
++#define swab16s __swab16s
++#define swab32s __swab32s
++#define swab64s __swab64s
++#endif
++
++#endif /* _LINUX_BYTEORDER_SWAB_H */
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/circ_buf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/circ_buf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/circ_buf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/circ_buf.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,27 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __CIRC_BUF_H_
++#define __CIRC_BUF_H_ 1
++
++#define CIRC_CNT(head,tail,size) (((head) - (tail)) & ((size)-1))
++
++#define CIRC_SPACE(head,tail,size) CIRC_CNT((tail),((head)+1),(size))
++
++#endif //_CIRC_BUF_H_
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,35 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __CMD_OSDEP_H_
++#define __CMD_OSDEP_H_
++
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <drv_types.h>
++
++extern sint _rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
++extern sint _rtw_init_evt_priv(struct evt_priv *pevtpriv);
++extern void _rtw_free_evt_priv (struct evt_priv *pevtpriv);
++extern void _rtw_free_cmd_priv (struct cmd_priv *pcmdpriv);
++extern sint _rtw_enqueue_cmd(_queue *queue, struct cmd_obj *obj);
++extern struct cmd_obj *_rtw_dequeue_cmd(_queue *queue);
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_conf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_conf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_conf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_conf.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,77 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __DRV_CONF_H__
++#define __DRV_CONF_H__
++#include "autoconf.h"
++
++#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
++
++#error "Shall be Linux or Windows, but not both!\n"
++
++#endif
++
++//Older Android kernel doesn't has CONFIG_ANDROID defined,
++//add this to force CONFIG_ANDROID defined
++#ifdef CONFIG_PLATFORM_ANDROID
++#define CONFIG_ANDROID
++#endif
++
++#ifdef CONFIG_ANDROID
++//Some Android build will restart the UI while non-printable ascii is passed
++//between java and c/c++ layer (JNI). We force CONFIG_VALIDATE_SSID
++//for Android here. If you are sure there is no risk on your system about this,
++//mask this macro define to support non-printable ascii ssid.
++//#define CONFIG_VALIDATE_SSID
++
++//Android expect dbm as the rx signal strength unit
++#define CONFIG_SIGNAL_DISPLAY_DBM
++#endif
++
++#if defined(CONFIG_HAS_EARLYSUSPEND) && defined (CONFIG_RESUME_IN_WORKQUEUE)
++ #warning "You have CONFIG_HAS_EARLYSUSPEND enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically"
++ #undef CONFIG_RESUME_IN_WORKQUEUE
++#endif
++
++#if defined(CONFIG_ANDROID_POWER) && defined (CONFIG_RESUME_IN_WORKQUEUE)
++ #warning "You have CONFIG_ANDROID_POWER enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically"
++ #undef CONFIG_RESUME_IN_WORKQUEUE
++#endif
++
++#ifdef CONFIG_RESUME_IN_WORKQUEUE //this can be removed, because there is no case for this...
++ #if !defined( CONFIG_WAKELOCK) && !defined(CONFIG_ANDROID_POWER)
++ #error "enable CONFIG_RESUME_IN_WORKQUEUE without CONFIG_WAKELOCK or CONFIG_ANDROID_POWER will suffer from the danger of wifi's unfunctionality..."
++ #error "If you still want to enable CONFIG_RESUME_IN_WORKQUEUE in this case, mask this preprossor checking and GOOD LUCK..."
++ #endif
++#endif
++
++//About USB VENDOR REQ
++#if defined(CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX)
++ #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC automatically"
++ #define CONFIG_USB_VENDOR_REQ_MUTEX
++#endif
++#if defined(CONFIG_VENDOR_REQ_RETRY) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX)
++ #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_VENDOR_REQ_RETRY automatically"
++ #define CONFIG_USB_VENDOR_REQ_MUTEX
++#endif
++
++
++//#include <rtl871x_byteorder.h>
++
++#endif // __DRV_CONF_H__
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,92 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __DRV_TYPES_CE_H__
++#define __DRV_TYPES_CE_H__
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++
++#include <Sdcardddk.h>
++
++#define MAX_ACTIVE_REG_PATH 256
++
++#define MAX_MCAST_LIST_NUM 32
++
++
++
++//for ioctl
++#define MAKE_DRIVER_VERSION(_MainVer,_MinorVer) ((((u32)(_MainVer))<<16)+_MinorVer)
++
++#define NIC_HEADER_SIZE 14 //!< can be moved to typedef.h
++#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
++#define NIC_MAX_SEND_PACKETS 10 // max number of send packets the MiniportSendPackets function can accept, can be moved to typedef.h
++#define NIC_VENDOR_DRIVER_VERSION MAKE_DRIVER_VERSION(0,001) //!< can be moved to typedef.h
++#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
++
++typedef struct _MP_REG_ENTRY
++{
++
++ NDIS_STRING RegName; // variable name text
++ BOOLEAN bRequired; // 1 -> required, 0 -> optional
++
++ u8 Type; // NdisParameterInteger/NdisParameterHexInteger/NdisParameterStringle/NdisParameterMultiString
++ uint FieldOffset; // offset to MP_ADAPTER field
++ uint FieldSize; // size (in bytes) of the field
++
++#ifdef UNDER_AMD64
++ u64 Default;
++#else
++ u32 Default; // default value to use
++#endif
++
++ u32 Min; // minimum value allowed
++ u32 Max; // maximum value allowed
++} MP_REG_ENTRY, *PMP_REG_ENTRY;
++
++#ifdef CONFIG_USB_HCI
++typedef struct _USB_EXTENSION {
++ LPCUSB_FUNCS _lpUsbFuncs;
++ USB_HANDLE _hDevice;
++ PVOID pAdapter;
++
++#if 0
++ USB_ENDPOINT_DESCRIPTOR _endpACLIn;
++ USB_ENDPOINT_DESCRIPTOR _endpACLOutHigh;
++ USB_ENDPOINT_DESCRIPTOR _endpACLOutNormal;
++
++ USB_PIPE pPipeIn;
++ USB_PIPE pPipeOutNormal;
++ USB_PIPE pPipeOutHigh;
++#endif
++
++} USB_EXTENSION, *PUSB_EXTENSION;
++#endif
++
++
++typedef struct _OCTET_STRING{
++ u8 *Octet;
++ u16 Length;
++} OCTET_STRING, *POCTET_STRING;
++
++
++
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,661 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++/*-------------------------------------------------------------------------------
++
++ For type defines and data structure defines
++
++--------------------------------------------------------------------------------*/
++
++
++#ifndef __DRV_TYPES_H__
++#define __DRV_TYPES_H__
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <wlan_bssdef.h>
++
++
++#ifdef PLATFORM_OS_XP
++#include <drv_types_xp.h>
++#endif
++
++#ifdef PLATFORM_OS_CE
++#include <drv_types_ce.h>
++#endif
++
++#ifdef PLATFORM_LINUX
++#include <drv_types_linux.h>
++#endif
++
++enum _NIC_VERSION {
++
++ RTL8711_NIC,
++ RTL8712_NIC,
++ RTL8713_NIC,
++ RTL8716_NIC
++
++};
++
++enum{
++ UP_LINK,
++ DOWN_LINK,
++};
++typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
++
++#ifdef CONFIG_80211N_HT
++#include <rtw_ht.h>
++#endif
++
++#include <rtw_cmd.h>
++#include <wlan_bssdef.h>
++#include <rtw_security.h>
++#include <rtw_xmit.h>
++#include <rtw_recv.h>
++#include <hal_intf.h>
++#include <hal_com.h>
++#include <rtw_qos.h>
++#include <rtw_pwrctrl.h>
++#include <rtw_io.h>
++#include <rtw_eeprom.h>
++#include <sta_info.h>
++#include <rtw_mlme.h>
++#include <rtw_debug.h>
++#include <rtw_rf.h>
++#include <rtw_event.h>
++#include <rtw_led.h>
++#include <rtw_mlme_ext.h>
++#include <rtw_p2p.h>
++#include <rtw_tdls.h>
++#include <rtw_ap.h>
++
++#ifdef CONFIG_DRVEXT_MODULE
++#include <drvext_api.h>
++#endif
++
++#ifdef CONFIG_MP_INCLUDED
++#include <rtw_mp.h>
++#endif
++
++#ifdef CONFIG_BR_EXT
++#include <rtw_br_ext.h>
++#endif // CONFIG_BR_EXT
++
++#ifdef CONFIG_IOCTL_CFG80211
++ #include "ioctl_cfg80211.h"
++#endif //CONFIG_IOCTL_CFG80211
++
++#define SPEC_DEV_ID_NONE BIT(0)
++#define SPEC_DEV_ID_DISABLE_HT BIT(1)
++#define SPEC_DEV_ID_ENABLE_PS BIT(2)
++#define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
++#define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
++#define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
++
++struct specific_device_id{
++
++ u32 flags;
++
++ u16 idVendor;
++ u16 idProduct;
++
++};
++
++struct registry_priv
++{
++ u8 chip_version;
++ u8 rfintfs;
++ u8 lbkmode;
++ u8 hci;
++ NDIS_802_11_SSID ssid;
++ u8 network_mode; //infra, ad-hoc, auto
++ u8 channel;//ad-hoc support requirement
++ u8 wireless_mode;//A, B, G, auto
++ u8 scan_mode;//active, passive
++ u8 radio_enable;
++ u8 preamble;//long, short, auto
++ u8 vrtl_carrier_sense;//Enable, Disable, Auto
++ u8 vcs_type;//RTS/CTS, CTS-to-self
++ u16 rts_thresh;
++ u16 frag_thresh;
++ u8 adhoc_tx_pwr;
++ u8 soft_ap;
++ u8 power_mgnt;
++ u8 ips_mode;
++ u8 smart_ps;
++ u8 long_retry_lmt;
++ u8 short_retry_lmt;
++ u16 busy_thresh;
++ u8 ack_policy;
++ u8 mp_mode;
++ u8 software_encrypt;
++ u8 software_decrypt;
++
++ u8 acm_method;
++ //UAPSD
++ u8 wmm_enable;
++ u8 uapsd_enable;
++ u8 uapsd_max_sp;
++ u8 uapsd_acbk_en;
++ u8 uapsd_acbe_en;
++ u8 uapsd_acvi_en;
++ u8 uapsd_acvo_en;
++
++ WLAN_BSSID_EX dev_network;
++
++#ifdef CONFIG_80211N_HT
++ u8 ht_enable;
++ u8 cbw40_enable;
++ u8 ampdu_enable;//for tx
++ u8 rx_stbc;
++ u8 ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted
++#endif
++ u8 lowrate_two_xmit;
++
++ u8 rf_config ;
++ u8 low_power ;
++
++ u8 wifi_spec;// !turbo_mode
++
++ u8 channel_plan;
++#ifdef CONFIG_BT_COEXIST
++ u8 bt_iso;
++ u8 bt_sco;
++ u8 bt_ampdu;
++#endif
++ BOOLEAN bAcceptAddbaReq;
++
++ u8 antdiv_cfg;
++
++ u8 usbss_enable;//0:disable,1:enable
++ u8 hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config
++ u8 hwpwrp_detect;//0:disable,1:enable
++
++ u8 hw_wps_pbc;//0:disable,1:enable
++
++#ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
++ char adaptor_info_caching_file_path[PATH_LENGTH_MAX];
++#endif
++
++#ifdef CONFIG_LAYER2_ROAMING
++ u8 max_roaming_times; // the max number driver will try to roaming
++#endif
++
++#ifdef CONFIG_IOL
++ bool force_iol; //enable iol without other concern
++#endif
++ u8 special_rf_path; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
++ u8 mac_phy_mode; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
++
++#ifdef CONFIG_80211D
++ u8 enable80211d;
++#endif
++
++ u8 ifname[16];
++ u8 if2name[16];
++
++ u8 notch_filter;
++
++#ifdef CONFIG_MULTI_VIR_IFACES
++ u8 ext_iface_num;//primary/secondary iface is excluded
++#endif
++};
++
++
++//For registry parameters
++#define RGTRY_OFT(field) ((ULONG)FIELD_OFFSET(struct registry_priv,field))
++#define RGTRY_SZ(field) sizeof(((struct registry_priv*) 0)->field)
++#define BSSID_OFT(field) ((ULONG)FIELD_OFFSET(WLAN_BSSID_EX,field))
++#define BSSID_SZ(field) sizeof(((PWLAN_BSSID_EX) 0)->field)
++
++#define MAX_CONTINUAL_URB_ERR 4
++
++#ifdef CONFIG_SDIO_HCI
++#include <drv_types_sdio.h>
++#define INTF_DATA SDIO_DATA
++#endif
++
++#define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
++
++#define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
++#define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
++
++enum _IFACE_ID {
++ IFACE_ID0, //maping to PRIMARY_ADAPTER
++ IFACE_ID1, //maping to SECONDARY_ADAPTER
++ IFACE_ID2,
++ IFACE_ID3,
++ IFACE_ID_MAX,
++};
++
++struct dvobj_priv
++{
++ _adapter *if1; //PRIMARY_ADAPTER
++ _adapter *if2; //SECONDARY_ADAPTER
++
++ s32 processing_dev_remove;
++
++ //for local/global synchronization
++ _mutex hw_init_mutex;
++ _mutex h2c_fwcmd_mutex;
++ _mutex setch_mutex;
++ _mutex setbw_mutex;
++
++ unsigned char oper_channel; //saved channel info when call set_channel_bw
++ unsigned char oper_bwmode;
++ unsigned char oper_ch_offset;//PRIME_CHNL_OFFSET
++ u32 on_oper_ch_time;
++
++ //extend to support mulitu interface
++ //padapters[IFACE_ID0] == if1
++ //padapters[IFACE_ID1] == if2
++ _adapter *padapters[IFACE_ID_MAX];
++ u8 iface_nums; // total number of ifaces used runtime
++
++ //For 92D, DMDP have 2 interface.
++ u8 InterfaceNumber;
++ u8 NumInterfaces;
++ u8 DualMacMode;
++ u8 irq_alloc;
++
++/*-------- below is for SDIO INTERFACE --------*/
++
++#ifdef INTF_DATA
++ INTF_DATA intf_data;
++#endif
++
++/*-------- below is for USB INTERFACE --------*/
++
++#ifdef CONFIG_USB_HCI
++
++ u8 nr_endpoint;
++ u8 ishighspeed;
++ u8 RtNumInPipes;
++ u8 RtNumOutPipes;
++ int ep_num[5]; //endpoint number
++
++ int RegUsbSS;
++
++ _sema usb_suspend_sema;
++
++#ifdef CONFIG_USB_VENDOR_REQ_MUTEX
++ _mutex usb_vendor_req_mutex;
++#endif
++
++#ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
++ u8 * usb_alloc_vendor_req_buf;
++ u8 * usb_vendor_req_buf;
++#endif
++
++#ifdef PLATFORM_WINDOWS
++ //related device objects
++ PDEVICE_OBJECT pphysdevobj;//pPhysDevObj;
++ PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
++ PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
++
++ u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
++
++ //urb for control diescriptor request
++
++#ifdef PLATFORM_OS_XP
++ struct _URB_CONTROL_DESCRIPTOR_REQUEST descriptor_urb;
++ PUSB_CONFIGURATION_DESCRIPTOR pconfig_descriptor;//UsbConfigurationDescriptor;
++#endif
++
++#ifdef PLATFORM_OS_CE
++ WCHAR active_path[MAX_ACTIVE_REG_PATH]; // adapter regpath
++ USB_EXTENSION usb_extension;
++
++ _nic_hdl pipehdls_r8192c[0x10];
++#endif
++
++ u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
++#endif//PLATFORM_WINDOWS
++
++#ifdef PLATFORM_LINUX
++ struct usb_interface *pusbintf;
++ struct usb_device *pusbdev;
++#endif//PLATFORM_LINUX
++
++#ifdef PLATFORM_FREEBSD
++ struct usb_interface *pusbintf;
++ struct usb_device *pusbdev;
++#endif//PLATFORM_FREEBSD
++ ATOMIC_T continual_urb_error;
++#endif//CONFIG_USB_HCI
++
++/*-------- below is for PCIE INTERFACE --------*/
++
++#ifdef CONFIG_PCI_HCI
++
++#ifdef PLATFORM_LINUX
++ struct pci_dev *ppcidev;
++
++ //PCI MEM map
++ unsigned long pci_mem_end; /* shared mem end */
++ unsigned long pci_mem_start; /* shared mem start */
++
++ //PCI IO map
++ unsigned long pci_base_addr; /* device I/O address */
++
++ //PciBridge
++ struct pci_priv pcipriv;
++
++ u16 irqline;
++ u8 irq_enabled;
++ RT_ISR_CONTENT isr_content;
++ _lock irq_th_lock;
++
++ //ASPM
++ u8 const_pci_aspm;
++ u8 const_amdpci_aspm;
++ u8 const_hwsw_rfoff_d3;
++ u8 const_support_pciaspm;
++ // pci-e bridge */
++ u8 const_hostpci_aspm_setting;
++ // pci-e device */
++ u8 const_devicepci_aspm_setting;
++ u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
++ u8 b_support_backdoor;
++ u8 bdma64;
++#endif//PLATFORM_LINUX
++
++#endif//CONFIG_PCI_HCI
++};
++
++#ifdef PLATFORM_LINUX
++static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
++{
++ /* todo: get interface type from dvobj and the return the dev accordingly */
++#ifdef RTW_DVOBJ_CHIP_HW_TYPE
++#endif
++
++#ifdef CONFIG_USB_HCI
++ return &dvobj->pusbintf->dev;
++#endif
++#ifdef CONFIG_SDIO_HCI
++ return &dvobj->intf_data.func->dev;
++#endif
++#ifdef CONFIG_PCI_HCI
++ return &dvobj->ppcidev->dev;
++#endif
++}
++#endif
++
++
++enum _IFACE_TYPE {
++ IFACE_PORT0, //mapping to port0 for C/D series chips
++ IFACE_PORT1, //mapping to port1 for C/D series chip
++ MAX_IFACE_PORT,
++};
++
++enum _ADAPTER_TYPE {
++ PRIMARY_ADAPTER,
++ SECONDARY_ADAPTER,
++ MAX_ADAPTER = 0xFF,
++};
++
++typedef enum _DRIVER_STATE{
++ DRIVER_NORMAL = 0,
++ DRIVER_DISAPPEAR = 1,
++ DRIVER_REPLACE_DONGLE = 2,
++}DRIVER_STATE;
++
++#ifdef CONFIG_INTEL_PROXIM
++struct proxim {
++ bool proxim_support;
++ bool proxim_on;
++
++ void *proximity_priv;
++ int (*proxim_rx)(_adapter *padapter,
++ union recv_frame *precv_frame);
++ u8 (*proxim_get_var)(_adapter* padapter, u8 type);
++};
++#endif //CONFIG_INTEL_PROXIM
++
++#ifdef RTL8723A_SDIO_LOOPBACK
++typedef struct loopbackdata
++{
++ _sema sema;
++ _thread_hdl_ lbkthread;
++ u8 bstop;
++ u32 cnt;
++ u16 size;
++ u16 txsize;
++ u8 txbuf[0x8000];
++ u16 rxsize;
++ u8 rxbuf[0x8000];
++ u8 msg[100];
++
++}LOOPBACKDATA, *PLOOPBACKDATA;
++#endif
++
++struct _ADAPTER{
++ int DriverState;// for disable driver using module, use dongle to replace module.
++ int pid[3];//process id from UI, 0:wps, 1:hostapd, 2:dhcpcd
++ int bDongle;//build-in module or external dongle
++ u16 chip_type;
++ u16 HardwareType;
++ u16 interface_type;//USB,SDIO,PCI
++
++ struct dvobj_priv *dvobj;
++ struct mlme_priv mlmepriv;
++ struct mlme_ext_priv mlmeextpriv;
++ struct cmd_priv cmdpriv;
++ struct evt_priv evtpriv;
++ //struct io_queue *pio_queue;
++ struct io_priv iopriv;
++ struct xmit_priv xmitpriv;
++ struct recv_priv recvpriv;
++ struct sta_priv stapriv;
++ struct security_priv securitypriv;
++ _lock security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
++ struct registry_priv registrypriv;
++ struct pwrctrl_priv pwrctrlpriv;
++ struct eeprom_priv eeprompriv;
++ struct led_priv ledpriv;
++
++#ifdef CONFIG_MP_INCLUDED
++ struct mp_priv mppriv;
++#endif
++
++#ifdef CONFIG_DRVEXT_MODULE
++ struct drvext_priv drvextpriv;
++#endif
++
++#ifdef CONFIG_AP_MODE
++ struct hostapd_priv *phostapdpriv;
++#endif
++
++#ifdef CONFIG_IOCTL_CFG80211
++#ifdef CONFIG_P2P
++ struct cfg80211_wifidirect_info cfg80211_wdinfo;
++#endif //CONFIG_P2P
++#endif //CONFIG_IOCTL_CFG80211
++ u32 setband;
++#ifdef CONFIG_P2P
++ struct wifidirect_info wdinfo;
++#endif //CONFIG_P2P
++
++#ifdef CONFIG_TDLS
++ struct tdls_info tdlsinfo;
++#endif //CONFIG_TDLS
++
++#ifdef CONFIG_WFD
++ struct wifi_display_info wfd_info;
++#endif //CONFIG_WFD
++
++ PVOID HalData;
++ u32 hal_data_sz;
++ struct hal_ops HalFunc;
++
++#ifdef CONFIG_BT_COEXIST
++ //struct btcoexist_priv bt_coexist;
++#endif
++ s32 bDriverStopped;
++ s32 bSurpriseRemoved;
++ s32 bCardDisableWOHSM;
++
++ u32 IsrContent;
++ u32 ImrContent;
++
++ u8 EepromAddressSize;
++ u8 hw_init_completed;
++ u8 bDriverIsGoingToUnload;
++ u8 init_adpt_in_progress;
++ u8 bHaltInProgress;
++
++ _thread_hdl_ cmdThread;
++ _thread_hdl_ evtThread;
++ _thread_hdl_ xmitThread;
++ _thread_hdl_ recvThread;
++
++#ifndef PLATFORM_LINUX
++ NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj);
++ void (*dvobj_deinit)(struct dvobj_priv *dvobj);
++#endif
++
++ void (*intf_start)(_adapter * adapter);
++ void (*intf_stop)(_adapter * adapter);
++
++#ifdef PLATFORM_WINDOWS
++ _nic_hdl hndis_adapter;//hNdisAdapter(NDISMiniportAdapterHandle);
++ _nic_hdl hndis_config;//hNdisConfiguration;
++ NDIS_STRING fw_img;
++
++ u32 NdisPacketFilter;
++ u8 MCList[MAX_MCAST_LIST_NUM][6];
++ u32 MCAddrCount;
++#endif //end of PLATFORM_WINDOWS
++
++
++#ifdef PLATFORM_LINUX
++ _nic_hdl pnetdev;
++
++ // used by rtw_rereg_nd_name related function
++ struct rereg_nd_name_data {
++ _nic_hdl old_pnetdev;
++ char old_ifname[IFNAMSIZ];
++ u8 old_ips_mode;
++ u8 old_bRegUseLed;
++ } rereg_nd_name_priv;
++
++ int bup;
++ struct net_device_stats stats;
++ struct iw_statistics iwstats;
++ struct proc_dir_entry *dir_dev;// for proc directory
++
++#ifdef CONFIG_IOCTL_CFG80211
++ struct wireless_dev *rtw_wdev;
++#endif //CONFIG_IOCTL_CFG80211
++
++#endif //end of PLATFORM_LINUX
++
++#ifdef PLATFORM_FREEBSD
++ _nic_hdl pifp;
++ int bup;
++ _lock glock;
++#endif //PLATFORM_FREEBSD
++ int net_closed;
++
++ u8 bFWReady;
++ u8 bReadPortCancel;
++ u8 bWritePortCancel;
++ u8 bRxRSSIDisplay;
++ // Added by Albert 2012/07/26
++ // The driver will write the initial gain everytime when running in the DM_Write_DIG function.
++ u8 bForceWriteInitGain;
++ // Added by Albert 2012/10/26
++ // The driver will show up the desired channel number when this flag is 1.
++ u8 bNotifyChannelChange;
++#ifdef CONFIG_P2P
++ // Added by Albert 2012/12/06
++ // The driver will show the current P2P status when the upper application reads it.
++ u8 bShowGetP2PState;
++#endif
++#ifdef CONFIG_AUTOSUSPEND
++ u8 bDisableAutosuspend;
++#endif
++
++ //pbuddy_adapter is used only in two inteface case, (iface_nums=2 in struct dvobj_priv)
++ //PRIMARY_ADAPTER's buddy is SECONDARY_ADAPTER
++ //SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER
++ //for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id] in struct dvobj_priv
++ //and their pbuddy_adapter is PRIMARY_ADAPTER.
++ //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
++ _adapter *pbuddy_adapter;
++
++#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
++ u8 isprimary; //is primary adapter or not
++ //notes:
++ // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
++ // if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for SECONDARY_ADAPTER
++ // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
++ u8 adapter_type;//used only in two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
++ u8 iface_type; //interface port type, it depends on HW port
++#endif
++
++ //extend to support multi interface
++ //IFACE_ID0 is equals to PRIMARY_ADAPTER
++ //IFACE_ID1 is equals to SECONDARY_ADAPTER
++ u8 iface_id;
++
++#ifdef CONFIG_DUALMAC_CONCURRENT
++ u8 DualMacConcurrent; // 1: DMSP 0:DMDP
++#endif
++
++#ifdef CONFIG_BR_EXT
++ _lock br_ext_lock;
++ //unsigned int macclone_completed;
++ struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE];
++ int pppoe_connection_in_progress;
++ unsigned char pppoe_addr[MACADDRLEN];
++ unsigned char scdb_mac[MACADDRLEN];
++ unsigned char scdb_ip[4];
++ struct nat25_network_db_entry *scdb_entry;
++ unsigned char br_mac[MACADDRLEN];
++ unsigned char br_ip[4];
++
++ struct br_ext_info ethBrExtInfo;
++#endif // CONFIG_BR_EXT
++
++#ifdef CONFIG_INTEL_PROXIM
++ /* intel Proximity, should be alloc mem
++ * in intel Proximity module and can only
++ * be used in intel Proximity mode */
++ struct proxim proximity;
++#endif //CONFIG_INTEL_PROXIM
++
++#ifdef RTL8723A_SDIO_LOOPBACK
++ PLOOPBACKDATA ploopback;
++#endif
++
++};
++
++#define adapter_to_dvobj(adapter) (adapter->dvobj)
++
++int rtw_handle_dualmac(_adapter *adapter, bool init);
++
++__inline static u8 *myid(struct eeprom_priv *peepriv)
++{
++ return (peepriv->mac_addr);
++}
++
++
++#endif //__DRV_TYPES_H__
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,24 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __DRV_TYPES_LINUX_H__
++#define __DRV_TYPES_LINUX_H__
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,69 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __DRV_TYPES_SDIO_H__
++#define __DRV_TYPES_SDIO_H__
++
++#include <drv_conf.h>
++#include <basic_types.h>
++
++// SDIO Header Files
++#ifdef PLATFORM_LINUX
++#include <linux/mmc/sdio_func.h>
++#endif
++#ifdef PLATFORM_OS_XP
++#include <wdm.h>
++#include <ntddsd.h>
++#endif
++#ifdef PLATFORM_OS_CE
++#include <sdcardddk.h>
++#endif
++
++
++typedef struct sdio_data
++{
++ u8 func_number;
++
++ u8 tx_block_mode;
++ u8 rx_block_mode;
++ u32 block_transfer_len;
++
++#ifdef PLATFORM_LINUX
++ struct sdio_func *func;
++#endif
++
++#ifdef PLATFORM_OS_XP
++ PDEVICE_OBJECT pphysdevobj;
++ PDEVICE_OBJECT pfuncdevobj;
++ PDEVICE_OBJECT pnextdevobj;
++ SDBUS_INTERFACE_STANDARD sdbusinft;
++ u8 nextdevstacksz;
++#endif
++
++#ifdef PLATFORM_OS_CE
++ SD_DEVICE_HANDLE hDevice;
++ SD_CARD_RCA sd_rca;
++ SD_CARD_INTERFACE card_intf;
++ BOOLEAN enableIsarWithStatus;
++ WCHAR active_path[MAX_ACTIVE_REG_PATH];
++ SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
++#endif
++} SDIO_DATA, *PSDIO_DATA;
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,94 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __DRV_TYPES_XP_H__
++#define __DRV_TYPES_XP_H__
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++
++
++
++#define MAX_MCAST_LIST_NUM 32
++
++
++
++//for ioctl
++#define MAKE_DRIVER_VERSION(_MainVer,_MinorVer) ((((u32)(_MainVer))<<16)+_MinorVer)
++
++#define NIC_HEADER_SIZE 14 //!< can be moved to typedef.h
++#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
++#define NIC_MAX_SEND_PACKETS 10 // max number of send packets the MiniportSendPackets function can accept, can be moved to typedef.h
++#define NIC_VENDOR_DRIVER_VERSION MAKE_DRIVER_VERSION(0,001) //!< can be moved to typedef.h
++#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
++
++
++#undef ON_VISTA
++//added by Jackson
++#ifndef ON_VISTA
++//
++// Bus driver versions
++//
++
++#define SDBUS_DRIVER_VERSION_1 0x100
++#define SDBUS_DRIVER_VERSION_2 0x200
++
++#define SDP_FUNCTION_TYPE 4
++#define SDP_BUS_DRIVER_VERSION 5
++#define SDP_BUS_WIDTH 6
++#define SDP_BUS_CLOCK 7
++#define SDP_BUS_INTERFACE_CONTROL 8
++#define SDP_HOST_BLOCK_LENGTH 9
++#define SDP_FUNCTION_BLOCK_LENGTH 10
++#define SDP_FN0_BLOCK_LENGTH 11
++#define SDP_FUNCTION_INT_ENABLE 12
++#endif
++
++
++typedef struct _MP_REG_ENTRY
++{
++
++ NDIS_STRING RegName; // variable name text
++ BOOLEAN bRequired; // 1 -> required, 0 -> optional
++
++ u8 Type; // NdisParameterInteger/NdisParameterHexInteger/NdisParameterStringle/NdisParameterMultiString
++ uint FieldOffset; // offset to MP_ADAPTER field
++ uint FieldSize; // size (in bytes) of the field
++
++#ifdef UNDER_AMD64
++ u64 Default;
++#else
++ u32 Default; // default value to use
++#endif
++
++ u32 Min; // minimum value allowed
++ u32 Max; // maximum value allowed
++} MP_REG_ENTRY, *PMP_REG_ENTRY;
++
++
++typedef struct _OCTET_STRING{
++ u8 *Octet;
++ u16 Length;
++} OCTET_STRING, *POCTET_STRING;
++
++
++
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ethernet.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ethernet.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ethernet.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ethernet.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,41 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++/*! \file */
++#ifndef __INC_ETHERNET_H
++#define __INC_ETHERNET_H
++
++#define ETHERNET_ADDRESS_LENGTH 6 //!< Ethernet Address Length
++#define ETHERNET_HEADER_SIZE 14 //!< Ethernet Header Length
++#define LLC_HEADER_SIZE 6 //!< LLC Header Length
++#define TYPE_LENGTH_FIELD_SIZE 2 //!< Type/Length Size
++#define MINIMUM_ETHERNET_PACKET_SIZE 60 //!< Minimum Ethernet Packet Size
++#define MAXIMUM_ETHERNET_PACKET_SIZE 1514 //!< Maximum Ethernet Packet Size
++
++#define RT_ETH_IS_MULTICAST(_pAddr) ((((UCHAR *)(_pAddr))[0]&0x01)!=0) //!< Is Multicast Address?
++#define RT_ETH_IS_BROADCAST(_pAddr) ( \
++ ((UCHAR *)(_pAddr))[0]==0xff && \
++ ((UCHAR *)(_pAddr))[1]==0xff && \
++ ((UCHAR *)(_pAddr))[2]==0xff && \
++ ((UCHAR *)(_pAddr))[3]==0xff && \
++ ((UCHAR *)(_pAddr))[4]==0xff && \
++ ((UCHAR *)(_pAddr))[5]==0xff ) //!< Is Broadcast Address?
++
++
++#endif // #ifndef __INC_ETHERNET_H
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/h2clbk.h linux-rpi/drivers/net/wireless/rtl8192cu/include/h2clbk.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/h2clbk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/h2clbk.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,35 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++
++
++#define _H2CLBK_H_
++
++
++#include <rtl8711_spec.h>
++#include <TypeDef.h>
++
++
++void _lbk_cmd(PADAPTER Adapter);
++
++void _lbk_rsp(PADAPTER Adapter);
++
++void _lbk_evt(IN PADAPTER Adapter);
++
++void h2c_event_callback(unsigned char *dev, unsigned char *pbuf);
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,85 @@
+/******************************************************************************
+ *
@@ -168375,9 +172772,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CEHWImg.h li
+extern u32 Rtl8192CEAGCTAB_1TArray[AGCTAB_1TArrayLength];
+
+#endif //__INC_HAL8192CE_FW_IMG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,427 @@
+/******************************************************************************
+ *
@@ -168806,9 +173203,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyCfg.h li
+#define PHY_SetMacReg PHY_SetBBReg
+
+#endif // __INC_HAL8192CPHYCFG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1122 @@
+/******************************************************************************
+ *
@@ -169932,9 +174329,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CPhyReg.h li
+
+
+#endif //__INC_HAL8192SPHYREG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,105 @@
+/******************************************************************************
+ *
@@ -170041,9 +174438,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg.h li
+extern u32 Rtl8192CUAGCTAB_1T_HPArray[AGCTAB_1T_HPArrayLength];
+
+#endif //__INC_HAL8192CU_FW_IMG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowlan.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,33 @@
+/******************************************************************************
+ *
@@ -170078,9 +174475,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192CUHWImg_wowl
+extern u8 Rtl8192CUFwUMCBCutWWImgArray[UMCBCutWWImgArrayLength];
+
+#endif //__INC_HAL8192CU_FW_IMG_WOWLAN_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,66 @@
+/******************************************************************************
+ *
@@ -170148,9 +174545,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DEHWImg.h li
+extern const u32 Rtl8192DEAGCTAB_1TArray[Rtl8192DEAGCTAB_1TArrayLength];
+
+#endif //__INC_HAL8192CU_FW_IMG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,527 @@
+/******************************************************************************
+ *
@@ -170679,9 +175076,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyCfg.h li
+#define PHY_SetMacReg PHY_SetBBReg
+
+#endif // __INC_HAL8192SPHYCFG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1170 @@
+/******************************************************************************
+ *
@@ -171853,9 +176250,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DPhyReg.h li
+
+
+#endif //__INC_HAL8192SPHYREG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,66 @@
+/******************************************************************************
+ *
@@ -171923,9 +176320,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg.h li
+extern const u32 Rtl8192DUAGCTAB_1TArray[Rtl8192DUAGCTAB_1TArrayLength];
+
+#endif //__INC_HAL8192CU_FW_IMG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h 2015-08-26 10:26:08.757316386 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowlan.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,29 @@
+/******************************************************************************
+ *
@@ -171956,2713 +176353,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/Hal8192DUHWImg_wowl
+extern u8 Rtl8192DUFwWWImgArray[DUWWImgArrayLength];
+
+#endif //__INC_HAL8192DU_FW_IMG_WOWLAN_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,137 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __HALPWRSEQCMD_H__
-+#define __HALPWRSEQCMD_H__
-+
-+#include <drv_types.h>
-+
-+/*---------------------------------------------*/
-+//3 The value of cmd: 4 bits
-+/*---------------------------------------------*/
-+#define PWR_CMD_READ 0x00
-+ // offset: the read register offset
-+ // msk: the mask of the read value
-+ // value: N/A, left by 0
-+ // note: dirver shall implement this function by read & msk
-+
-+#define PWR_CMD_WRITE 0x01
-+ // offset: the read register offset
-+ // msk: the mask of the write bits
-+ // value: write value
-+ // note: driver shall implement this cmd by read & msk after write
-+
-+#define PWR_CMD_POLLING 0x02
-+ // offset: the read register offset
-+ // msk: the mask of the polled value
-+ // value: the value to be polled, masked by the msd field.
-+ // note: driver shall implement this cmd by
-+ // do{
-+ // if( (Read(offset) & msk) == (value & msk) )
-+ // break;
-+ // } while(not timeout);
-+
-+#define PWR_CMD_DELAY 0x03
-+ // offset: the value to delay
-+ // msk: N/A
-+ // value: the unit of delay, 0: us, 1: ms
-+
-+#define PWR_CMD_END 0x04
-+ // offset: N/A
-+ // msk: N/A
-+ // value: N/A
-+
-+/*---------------------------------------------*/
-+//3 The value of base: 4 bits
-+/*---------------------------------------------*/
-+ // define the base address of each block
-+#define PWR_BASEADDR_MAC 0x00
-+#define PWR_BASEADDR_USB 0x01
-+#define PWR_BASEADDR_PCIE 0x02
-+#define PWR_BASEADDR_SDIO 0x03
-+
-+/*---------------------------------------------*/
-+//3 The value of interface_msk: 4 bits
-+/*---------------------------------------------*/
-+#define PWR_INTF_SDIO_MSK BIT(0)
-+#define PWR_INTF_USB_MSK BIT(1)
-+#define PWR_INTF_PCI_MSK BIT(2)
-+#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-+
-+/*---------------------------------------------*/
-+//3 The value of fab_msk: 4 bits
-+/*---------------------------------------------*/
-+#define PWR_FAB_TSMC_MSK BIT(0)
-+#define PWR_FAB_UMC_MSK BIT(1)
-+#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-+
-+/*---------------------------------------------*/
-+//3 The value of cut_msk: 8 bits
-+/*---------------------------------------------*/
-+#define PWR_CUT_TESTCHIP_MSK BIT(0)
-+#define PWR_CUT_A_MSK BIT(1)
-+#define PWR_CUT_B_MSK BIT(2)
-+#define PWR_CUT_C_MSK BIT(3)
-+#define PWR_CUT_D_MSK BIT(4)
-+#define PWR_CUT_E_MSK BIT(5)
-+#define PWR_CUT_F_MSK BIT(6)
-+#define PWR_CUT_G_MSK BIT(7)
-+#define PWR_CUT_ALL_MSK 0xFF
-+
-+
-+typedef enum _PWRSEQ_CMD_DELAY_UNIT_
-+{
-+ PWRSEQ_DELAY_US,
-+ PWRSEQ_DELAY_MS,
-+} PWRSEQ_DELAY_UNIT;
-+
-+typedef struct _WL_PWR_CFG_
-+{
-+ u16 offset;
-+ u8 cut_msk;
-+ u8 fab_msk:4;
-+ u8 interface_msk:4;
-+ u8 base:4;
-+ u8 cmd:4;
-+ u8 msk;
-+ u8 value;
-+} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
-+
-+
-+#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
-+#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
-+#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
-+#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
-+#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
-+#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
-+#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
-+#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
-+
-+
-+//================================================================================
-+// Prototype of protected function.
-+//================================================================================
-+u8 HalPwrSeqCmdParsing(
-+ PADAPTER padapter,
-+ u8 CutVersion,
-+ u8 FabVersion,
-+ u8 InterfaceType,
-+ WLAN_PWR_CFG PwrCfgCmd[]);
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/autoconf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/autoconf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/autoconf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/autoconf.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,336 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+
-+/*
-+ * Public General Config
-+ */
-+#define AUTOCONF_INCLUDED
-+#define RTL871X_MODULE_NAME "92CU"
-+#define DRV_NAME "rtl8192cu"
-+
-+#define CONFIG_USB_HCI 1
-+
-+#define CONFIG_RTL8192C 1
-+
-+#define PLATFORM_LINUX 1
-+
-+//#define CONFIG_IOCTL_CFG80211 1
-+#ifdef CONFIG_IOCTL_CFG80211
-+ //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
-+ #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
-+ //#define CONFIG_DEBUG_CFG80211 1
-+ //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2
-+ #define CONFIG_SET_SCAN_DENY_TIMER
-+#endif
-+
-+/*
-+ * Internal General Config
-+ */
-+//#define CONFIG_PWRCTRL
-+//#define CONFIG_H2CLBK
-+
-+#define CONFIG_EMBEDDED_FWIMG 1
-+//#define CONFIG_FILE_FWIMG
-+
-+#ifdef CONFIG_WAKE_ON_WLAN
-+#define CONFIG_WOWLAN 1
-+#endif //CONFIG_WAKE_ON_WLAN
-+
-+#define CONFIG_R871X_TEST 1
-+
-+#define CONFIG_XMIT_ACK
-+#ifdef CONFIG_XMIT_ACK
-+ #define CONFIG_XMIT_ACK_POLLING
-+ #define CONFIG_ACTIVE_KEEP_ALIVE_CHECK
-+#endif
-+
-+#define CONFIG_80211N_HT 1
-+
-+#define CONFIG_RECV_REORDERING_CTRL 1
-+
-+//#define CONFIG_TCP_CSUM_OFFLOAD_RX 1
-+
-+//#define CONFIG_BEFORE_LINKED_DIG
-+//#define CONFIG_DRVEXT_MODULE 1
-+
-+#ifndef CONFIG_MP_INCLUDED
-+ #define CONFIG_IPS 1
-+ #ifdef CONFIG_IPS
-+ //#define CONFIG_IPS_LEVEL_2 1 //enable this to set default IPS mode to IPS_LEVEL_2
-+ #endif
-+
-+ #define SUPPORT_HW_RFOFF_DETECTED 1
-+
-+ #define CONFIG_LPS 1
-+ #define CONFIG_BT_COEXIST 1
-+
-+ //befor link
-+ #define CONFIG_ANTENNA_DIVERSITY
-+
-+ //after link
-+ #ifdef CONFIG_ANTENNA_DIVERSITY
-+ #define CONFIG_SW_ANTENNA_DIVERSITY
-+ //#define CONFIG_HW_ANTENNA_DIVERSITY
-+ #endif
-+
-+ #define CONFIG_IOL
-+#else //#ifndef CONFIG_MP_INCLUDED
-+ #define CONFIG_MP_IWPRIV_SUPPORT 1
-+#endif //#ifndef CONFIG_MP_INCLUDED
-+
-+#define CONFIG_AP_MODE 1
-+#ifdef CONFIG_AP_MODE
-+ #define CONFIG_NATIVEAP_MLME 1
-+ #ifndef CONFIG_NATIVEAP_MLME
-+ #define CONFIG_HOSTAPD_MLME 1
-+ #endif
-+ #define CONFIG_FIND_BEST_CHANNEL 1
-+ //#define CONFIG_NO_WIRELESS_HANDLERS 1
-+#endif
-+
-+// Added by Albert 20110314
-+#define CONFIG_P2P 1
-+#ifdef CONFIG_P2P
-+ //Added by Albert 20110812
-+ //The CONFIG_WFD is for supporting the Wi-Fi display
-+ #define CONFIG_WFD
-+
-+ #ifndef CONFIG_WIFI_TEST
-+ #define CONFIG_P2P_REMOVE_GROUP_INFO
-+ #endif
-+ //#define CONFIG_DBG_P2P
-+
-+ //#define CONFIG_P2P_PS
-+ //#define CONFIG_P2P_IPS
-+
-+ #define P2P_OP_CHECK_SOCIAL_CH
-+ // Added comment by Borg 2013/06/21
-+ // Issue: Nexus 4 is hard to do miracast.
-+ // Root Cause: After group formation,
-+ // Nexus 4 is possible to be not at OP channel of Invitation Resp/Nego Confirm but at social channel.
-+ // Patch: While scan OP channel,
-+ // not only scan OP channel of Invitation Resp/Nego Confirm,
-+ // but also scan social channel(1, 6, 11)
-+#endif
-+
-+// Added by Kurt 20110511
-+//#define CONFIG_TDLS 1
-+#ifdef CONFIG_TDLS
-+// #ifndef CONFIG_WFD
-+// #define CONFIG_WFD 1
-+// #endif
-+// #define CONFIG_TDLS_AUTOSETUP 1
-+// #define CONFIG_TDLS_AUTOCHECKALIVE 1
-+#endif
-+
-+#define CONFIG_SKB_COPY 1//for amsdu
-+
-+#define CONFIG_LED
-+#ifdef CONFIG_LED
-+ #define CONFIG_SW_LED
-+ #ifdef CONFIG_SW_LED
-+ //#define CONFIG_LED_HANDLED_BY_CMD_THREAD
-+ #endif
-+#endif // CONFIG_LED
-+
-+
-+
-+#define USB_INTERFERENCE_ISSUE // this should be checked in all usb interface
-+#define CONFIG_GLOBAL_UI_PID
-+
-+#define CONFIG_LAYER2_ROAMING
-+#define CONFIG_LAYER2_ROAMING_RESUME
-+//#define CONFIG_ADAPTOR_INFO_CACHING_FILE // now just applied on 8192cu only, should make it general...
-+//#define CONFIG_RESUME_IN_WORKQUEUE
-+//#define CONFIG_SET_SCAN_DENY_TIMER
-+#define CONFIG_LONG_DELAY_ISSUE
-+#define CONFIG_NEW_SIGNAL_STAT_PROCESS
-+//#define CONFIG_SIGNAL_DISPLAY_DBM //display RX signal with dbm
-+#define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable */
-+#define CONFIG_DEAUTH_BEFORE_CONNECT
-+
-+#ifdef CONFIG_IOL
-+ #define CONFIG_IOL_LLT
-+ #define CONFIG_IOL_MAC
-+ #define CONFIG_IOL_BB_PHY_REG
-+ #define CONFIG_IOL_BB_AGC_TAB
-+ #define CONFIG_IOL_RF_RF90_PATH_A
-+ #define CONFIG_IOL_RF_RF90_PATH_B
-+#endif
-+
-+#define CONFIG_BR_EXT 1 // Enable NAT2.5 support for STA mode interface with a L2 Bridge
-+#ifdef CONFIG_BR_EXT
-+#define CONFIG_BR_EXT_BRNAME "br0"
-+#endif // CONFIG_BR_EXT
-+
-+#define CONFIG_TX_MCAST2UNI 1 // Support IP multicast->unicast
-+//#define CONFIG_DM_ADAPTIVITY
-+//#define CONFIG_CHECK_AC_LIFETIME 1 // Check packet lifetime of 4 ACs.
-+
-+//#define CONFIG_CONCURRENT_MODE 1
-+#ifdef CONFIG_CONCURRENT_MODE
-+ #define CONFIG_TSF_RESET_OFFLOAD 1 // For 2 PORT TSF SYNC.
-+ //#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
-+ //#define CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
-+ //#define CONFIG_MULTI_VIR_IFACES //besides primary&secondary interfaces, extend to support more interfaces
-+#endif // CONFIG_CONCURRENT_MODE
-+
-+#define CONFIG_80211D
-+
-+/*
-+ * Interface Related Config
-+ */
-+
-+//#define CONFIG_USB_ONE_OUT_EP
-+//#define CONFIG_USB_INTERRUPT_IN_PIPE 1
-+
-+#ifndef CONFIG_MINIMAL_MEMORY_USAGE
-+ #define CONFIG_USB_TX_AGGREGATION 1
-+ #define CONFIG_USB_RX_AGGREGATION 1
-+#endif
-+
-+#define CONFIG_PREALLOC_RECV_SKB 1
-+//#define CONFIG_REDUCE_USB_TX_INT 1 // Trade-off: Improve performance, but may cause TX URBs blocked by USB Host/Bus driver on few platforms.
-+//#define CONFIG_EASY_REPLACEMENT 1
-+
-+/*
-+ * CONFIG_USE_USB_BUFFER_ALLOC_XX uses Linux USB Buffer alloc API and is for Linux platform only now!
-+ */
-+//#define CONFIG_USE_USB_BUFFER_ALLOC_TX 1 // Trade-off: For TX path, improve stability on some platforms, but may cause performance degrade on other platforms.
-+//#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1 // For RX path
-+#ifdef CONFIG_USE_USB_BUFFER_ALLOC_RX
-+#undef CONFIG_PREALLOC_RECV_SKB
-+#endif
-+
-+/*
-+ * USB VENDOR REQ BUFFER ALLOCATION METHOD
-+ * if not set we'll use function local variable (stack memory)
-+ */
-+//#define CONFIG_USB_VENDOR_REQ_BUFFER_DYNAMIC_ALLOCATE
-+#define CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
-+
-+#define CONFIG_USB_VENDOR_REQ_MUTEX
-+#define CONFIG_VENDOR_REQ_RETRY
-+
-+//#define CONFIG_USB_SUPPORT_ASYNC_VDN_REQ 1
-+
-+
-+/*
-+ * HAL Related Config
-+ */
-+
-+#define RTL8192C_RX_PACKET_NO_INCLUDE_CRC 1
-+
-+#define SUPPORTED_BLOCK_IO
-+
-+
-+
-+#define RTL8192CU_FW_DOWNLOAD_ENABLE 1
-+
-+#define CONFIG_ONLY_ONE_OUT_EP_TO_LOW 0
-+
-+#define CONFIG_OUT_EP_WIFI_MODE 0
-+
-+#define ENABLE_USB_DROP_INCORRECT_OUT 0
-+
-+#define RTL8192CU_ASIC_VERIFICATION 0 // For ASIC verification.
-+
-+#define RTL8192CU_ADHOC_WORKAROUND_SETTING 1
-+
-+#define DISABLE_BB_RF 0
-+
-+#define RTL8191C_FPGA_NETWORKTYPE_ADHOC 0
-+
-+#ifdef CONFIG_MP_INCLUDED
-+ #define MP_DRIVER 1
-+ #undef CONFIG_USB_TX_AGGREGATION
-+ #undef CONFIG_USB_RX_AGGREGATION
-+#else
-+ #define MP_DRIVER 0
-+#endif
-+
-+
-+/*
-+ * Platform Related Config
-+ */
-+#ifdef CONFIG_PLATFORM_MN10300
-+#define CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV
-+
-+#if defined (CONFIG_SW_ANTENNA_DIVERSITY)
-+ #undef CONFIG_SW_ANTENNA_DIVERSITY
-+ #define CONFIG_HW_ANTENNA_DIVERSITY
-+#endif
-+
-+#endif
-+
-+#ifdef CONFIG_WISTRON_PLATFORM
-+
-+#endif
-+
-+#ifdef CONFIG_PLATFORM_TI_DM365
-+#define CONFIG_USE_USB_BUFFER_ALLOC_RX 1
-+#endif
-+
-+#define CONFIG_ATTEMPT_TO_FIX_AP_BEACON_ERROR
-+
-+/*
-+ * Debug Related Config
-+ */
-+//#define CONFIG_DEBUG_RTL871X
-+
-+#define DBG 0
-+//#define CONFIG_DEBUG_RTL819X
-+
-+//#define CONFIG_PROC_DEBUG 1
-+
-+//#define DBG_IO
-+//#define DBG_DELAY_OS
-+//#define DBG_MEM_ALLOC
-+//#define DBG_IOCTL
-+
-+//#define DBG_TX
-+//#define DBG_XMIT_BUF
-+//#define DBG_TX_DROP_FRAME
-+
-+//#define DBG_RX_DROP_FRAME
-+//#define DBG_RX_SEQ
-+//#define DBG_RX_SIGNAL_DISPLAY_PROCESSING
-+//#define DBG_RX_SIGNAL_DISPLAY_SSID_MONITORED "jeff-ap"
-+
-+//#define DBG_EXPIRATION_CHK
-+
-+
-+//#define DBG_SHOW_MCUFWDL_BEFORE_51_ENABLE
-+//#define DBG_ROAMING_TEST
-+
-+//#define DBG_HAL_INIT_PROFILING
-+
-+//#define DBG_MEMORY_LEAK 1
-+
-+#define DBG_CONFIG_ERROR_DETECT
-+//#define DBG_CONFIG_ERROR_RESET
-+
-+//TX use 1 urb
-+//#define CONFIG_SINGLE_XMIT_BUF
-+//RX use 1 urb
-+//#define CONFIG_SINGLE_RECV_BUF
-+
-+//turn off power tracking when traffic is busy
-+//#define CONFIG_BUSY_TRAFFIC_SKIP_PWR_TRACK
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/basic_types.h linux-rpi/drivers/net/wireless/rtl8192cu/include/basic_types.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/basic_types.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/basic_types.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,320 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __BASIC_TYPES_H__
-+#define __BASIC_TYPES_H__
-+
-+#include <drv_conf.h>
-+
-+
-+#define SUCCESS 0
-+#define FAIL (-1)
-+
-+#ifndef TRUE
-+ #define _TRUE 1
-+#else
-+ #define _TRUE TRUE
-+#endif
-+
-+#ifndef FALSE
-+ #define _FALSE 0
-+#else
-+ #define _FALSE FALSE
-+#endif
-+
-+#ifdef PLATFORM_WINDOWS
-+
-+ typedef signed char s8;
-+ typedef unsigned char u8;
-+
-+ typedef signed short s16;
-+ typedef unsigned short u16;
-+
-+ typedef signed long s32;
-+ typedef unsigned long u32;
-+
-+ typedef unsigned int uint;
-+ typedef signed int sint;
-+
-+
-+ typedef signed long long s64;
-+ typedef unsigned long long u64;
-+
-+ #ifdef NDIS50_MINIPORT
-+
-+ #define NDIS_MAJOR_VERSION 5
-+ #define NDIS_MINOR_VERSION 0
-+
-+ #endif
-+
-+ #ifdef NDIS51_MINIPORT
-+
-+ #define NDIS_MAJOR_VERSION 5
-+ #define NDIS_MINOR_VERSION 1
-+
-+ #endif
-+
-+ typedef NDIS_PROC proc_t;
-+
-+ typedef LONG atomic_t;
-+
-+#endif
-+
-+
-+#ifdef PLATFORM_LINUX
-+
-+ #include <linux/types.h>
-+ #define IN
-+ #define OUT
-+ #define VOID void
-+ #define NDIS_OID uint
-+ #define NDIS_STATUS uint
-+
-+ typedef signed int sint;
-+
-+ #ifndef PVOID
-+ typedef void * PVOID;
-+ //#define PVOID (void *)
-+ #endif
-+
-+ #define UCHAR u8
-+ #define USHORT u16
-+ #define UINT u32
-+ #define ULONG u32
-+
-+ typedef void (*proc_t)(void*);
-+
-+ typedef __kernel_size_t SIZE_T;
-+ typedef __kernel_ssize_t SSIZE_T;
-+ #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
-+
-+#endif
-+
-+
-+#ifdef PLATFORM_FREEBSD
-+
-+ typedef signed char s8;
-+ typedef unsigned char u8;
-+
-+ typedef signed short s16;
-+ typedef unsigned short u16;
-+
-+ typedef signed int s32;
-+ typedef unsigned int u32;
-+
-+ typedef unsigned int uint;
-+ typedef signed int sint;
-+ typedef long atomic_t;
-+
-+ typedef signed long long s64;
-+ typedef unsigned long long u64;
-+ #define IN
-+ #define OUT
-+ #define VOID void
-+ #define NDIS_OID uint
-+ #define NDIS_STATUS uint
-+
-+ #ifndef PVOID
-+ typedef void * PVOID;
-+ //#define PVOID (void *)
-+ #endif
-+ typedef u32 dma_addr_t;
-+ #define UCHAR u8
-+ #define USHORT u16
-+ #define UINT u32
-+ #define ULONG u32
-+
-+ typedef void (*proc_t)(void*);
-+
-+ typedef unsigned int __kernel_size_t;
-+ typedef int __kernel_ssize_t;
-+
-+ typedef __kernel_size_t SIZE_T;
-+ typedef __kernel_ssize_t SSIZE_T;
-+ #define FIELD_OFFSET(s,field) ((SSIZE_T)&((s*)(0))->field)
-+
-+#endif
-+
-+#define MEM_ALIGNMENT_OFFSET (sizeof (SIZE_T))
-+#define MEM_ALIGNMENT_PADDING (sizeof(SIZE_T) - 1)
-+
-+#define SIZE_PTR SIZE_T
-+#define SSIZE_PTR SSIZE_T
-+
-+//port from fw by thomas
-+// TODO: Belows are Sync from SD7-Driver. It is necessary to check correctness
-+
-+/*
-+ * Call endian free function when
-+ * 1. Read/write packet content.
-+ * 2. Before write integer to IO.
-+ * 3. After read integer from IO.
-+*/
-+
-+//
-+// Byte Swapping routine.
-+//
-+#define EF1Byte
-+#define EF2Byte le16_to_cpu
-+#define EF4Byte le32_to_cpu
-+
-+//
-+// Read LE format data from memory
-+//
-+#define ReadEF1Byte(_ptr) EF1Byte(*((u8 *)(_ptr)))
-+#define ReadEF2Byte(_ptr) EF2Byte(*((u16 *)(_ptr)))
-+#define ReadEF4Byte(_ptr) EF4Byte(*((u32 *)(_ptr)))
-+
-+//
-+// Write LE data to memory
-+//
-+#define WriteEF1Byte(_ptr, _val) (*((u8 *)(_ptr)))=EF1Byte(_val)
-+#define WriteEF2Byte(_ptr, _val) (*((u16 *)(_ptr)))=EF2Byte(_val)
-+#define WriteEF4Byte(_ptr, _val) (*((u32 *)(_ptr)))=EF4Byte(_val)
-+
-+//
-+// Example:
-+// BIT_LEN_MASK_32(0) => 0x00000000
-+// BIT_LEN_MASK_32(1) => 0x00000001
-+// BIT_LEN_MASK_32(2) => 0x00000003
-+// BIT_LEN_MASK_32(32) => 0xFFFFFFFF
-+//
-+#define BIT_LEN_MASK_32(__BitLen) \
-+ (0xFFFFFFFF >> (32 - (__BitLen)))
-+//
-+// Example:
-+// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003
-+// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000
-+//
-+#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \
-+ (BIT_LEN_MASK_32(__BitLen) << (__BitOffset))
-+
-+//
-+// Description:
-+// Return 4-byte value in host byte ordering from
-+// 4-byte pointer in litten-endian system.
-+//
-+#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
-+ (EF4Byte(*((u32 *)(__pStart))))
-+
-+//
-+// Description:
-+// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to
-+// 4-byte value in host byte ordering.
-+//
-+#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \
-+ & \
-+ BIT_LEN_MASK_32(__BitLen) \
-+ )
-+
-+//
-+// Description:
-+// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering
-+// and return the result in 4-byte value in host byte ordering.
-+//
-+#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ LE_P4BYTE_TO_HOST_4BYTE(__pStart) \
-+ & \
-+ ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \
-+ )
-+
-+//
-+// Description:
-+// Set subfield of little-endian 4-byte value to specified value.
-+//
-+#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \
-+ *((u32 *)(__pStart)) = \
-+ EF4Byte( \
-+ LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \
-+ | \
-+ ( (((u32)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \
-+ );
-+
-+
-+#define BIT_LEN_MASK_16(__BitLen) \
-+ (0xFFFF >> (16 - (__BitLen)))
-+
-+#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \
-+ (BIT_LEN_MASK_16(__BitLen) << (__BitOffset))
-+
-+#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
-+ (EF2Byte(*((u16 *)(__pStart))))
-+
-+#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \
-+ & \
-+ BIT_LEN_MASK_16(__BitLen) \
-+ )
-+
-+#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ LE_P2BYTE_TO_HOST_2BYTE(__pStart) \
-+ & \
-+ ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \
-+ )
-+
-+#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \
-+ *((u16 *)(__pStart)) = \
-+ EF2Byte( \
-+ LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \
-+ | \
-+ ( (((u16)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \
-+ );
-+
-+#define BIT_LEN_MASK_8(__BitLen) \
-+ (0xFF >> (8 - (__BitLen)))
-+
-+#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \
-+ (BIT_LEN_MASK_8(__BitLen) << (__BitOffset))
-+
-+#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
-+ (EF1Byte(*((u8 *)(__pStart))))
-+
-+#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \
-+ & \
-+ BIT_LEN_MASK_8(__BitLen) \
-+ )
-+
-+#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
-+ ( \
-+ LE_P1BYTE_TO_HOST_1BYTE(__pStart) \
-+ & \
-+ ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \
-+ )
-+
-+#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \
-+ *((u8 *)(__pStart)) = \
-+ EF1Byte( \
-+ LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \
-+ | \
-+ ( (((u8)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \
-+ );
-+
-+// Get the N-bytes aligment offset from the current length
-+#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment))
-+
-+typedef unsigned char BOOLEAN,*PBOOLEAN;
-+
-+#endif //__BASIC_TYPES_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/big_endian.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,87 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _LINUX_BYTEORDER_BIG_ENDIAN_H
-+#define _LINUX_BYTEORDER_BIG_ENDIAN_H
-+
-+#ifndef __BIG_ENDIAN
-+#define __BIG_ENDIAN 4321
-+#endif
-+#ifndef __BIG_ENDIAN_BITFIELD
-+#define __BIG_ENDIAN_BITFIELD
-+#endif
-+
-+#include <byteorder/swab.h>
-+
-+#define __constant_htonl(x) ((__u32)(x))
-+#define __constant_ntohl(x) ((__u32)(x))
-+#define __constant_htons(x) ((__u16)(x))
-+#define __constant_ntohs(x) ((__u16)(x))
-+#define __constant_cpu_to_le64(x) ___constant_swab64((x))
-+#define __constant_le64_to_cpu(x) ___constant_swab64((x))
-+#define __constant_cpu_to_le32(x) ___constant_swab32((x))
-+#define __constant_le32_to_cpu(x) ___constant_swab32((x))
-+#define __constant_cpu_to_le16(x) ___constant_swab16((x))
-+#define __constant_le16_to_cpu(x) ___constant_swab16((x))
-+#define __constant_cpu_to_be64(x) ((__u64)(x))
-+#define __constant_be64_to_cpu(x) ((__u64)(x))
-+#define __constant_cpu_to_be32(x) ((__u32)(x))
-+#define __constant_be32_to_cpu(x) ((__u32)(x))
-+#define __constant_cpu_to_be16(x) ((__u16)(x))
-+#define __constant_be16_to_cpu(x) ((__u16)(x))
-+#define __cpu_to_le64(x) __swab64((x))
-+#define __le64_to_cpu(x) __swab64((x))
-+#define __cpu_to_le32(x) __swab32((x))
-+#define __le32_to_cpu(x) __swab32((x))
-+#define __cpu_to_le16(x) __swab16((x))
-+#define __le16_to_cpu(x) __swab16((x))
-+#define __cpu_to_be64(x) ((__u64)(x))
-+#define __be64_to_cpu(x) ((__u64)(x))
-+#define __cpu_to_be32(x) ((__u32)(x))
-+#define __be32_to_cpu(x) ((__u32)(x))
-+#define __cpu_to_be16(x) ((__u16)(x))
-+#define __be16_to_cpu(x) ((__u16)(x))
-+#define __cpu_to_le64p(x) __swab64p((x))
-+#define __le64_to_cpup(x) __swab64p((x))
-+#define __cpu_to_le32p(x) __swab32p((x))
-+#define __le32_to_cpup(x) __swab32p((x))
-+#define __cpu_to_le16p(x) __swab16p((x))
-+#define __le16_to_cpup(x) __swab16p((x))
-+#define __cpu_to_be64p(x) (*(__u64*)(x))
-+#define __be64_to_cpup(x) (*(__u64*)(x))
-+#define __cpu_to_be32p(x) (*(__u32*)(x))
-+#define __be32_to_cpup(x) (*(__u32*)(x))
-+#define __cpu_to_be16p(x) (*(__u16*)(x))
-+#define __be16_to_cpup(x) (*(__u16*)(x))
-+#define __cpu_to_le64s(x) __swab64s((x))
-+#define __le64_to_cpus(x) __swab64s((x))
-+#define __cpu_to_le32s(x) __swab32s((x))
-+#define __le32_to_cpus(x) __swab32s((x))
-+#define __cpu_to_le16s(x) __swab16s((x))
-+#define __le16_to_cpus(x) __swab16s((x))
-+#define __cpu_to_be64s(x) do {} while (0)
-+#define __be64_to_cpus(x) do {} while (0)
-+#define __cpu_to_be32s(x) do {} while (0)
-+#define __be32_to_cpus(x) do {} while (0)
-+#define __cpu_to_be16s(x) do {} while (0)
-+#define __be16_to_cpus(x) do {} while (0)
-+
-+#include <byteorder/generic.h>
-+
-+#endif /* _LINUX_BYTEORDER_BIG_ENDIAN_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/generic.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,212 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _LINUX_BYTEORDER_GENERIC_H
-+#define _LINUX_BYTEORDER_GENERIC_H
-+
-+/*
-+ * linux/byteorder_generic.h
-+ * Generic Byte-reordering support
-+ *
-+ * Francois-Rene Rideau <fare@tunes.org> 19970707
-+ * gathered all the good ideas from all asm-foo/byteorder.h into one file,
-+ * cleaned them up.
-+ * I hope it is compliant with non-GCC compilers.
-+ * I decided to put __BYTEORDER_HAS_U64__ in byteorder.h,
-+ * because I wasn't sure it would be ok to put it in types.h
-+ * Upgraded it to 2.1.43
-+ * Francois-Rene Rideau <fare@tunes.org> 19971012
-+ * Upgraded it to 2.1.57
-+ * to please Linus T., replaced huge #ifdef's between little/big endian
-+ * by nestedly #include'd files.
-+ * Francois-Rene Rideau <fare@tunes.org> 19971205
-+ * Made it to 2.1.71; now a facelift:
-+ * Put files under include/linux/byteorder/
-+ * Split swab from generic support.
-+ *
-+ * TODO:
-+ * = Regular kernel maintainers could also replace all these manual
-+ * byteswap macros that remain, disseminated among drivers,
-+ * after some grep or the sources...
-+ * = Linus might want to rename all these macros and files to fit his taste,
-+ * to fit his personal naming scheme.
-+ * = it seems that a few drivers would also appreciate
-+ * nybble swapping support...
-+ * = every architecture could add their byteswap macro in asm/byteorder.h
-+ * see how some architectures already do (i386, alpha, ppc, etc)
-+ * = cpu_to_beXX and beXX_to_cpu might some day need to be well
-+ * distinguished throughout the kernel. This is not the case currently,
-+ * since little endian, big endian, and pdp endian machines needn't it.
-+ * But this might be the case for, say, a port of Linux to 20/21 bit
-+ * architectures (and F21 Linux addict around?).
-+ */
-+
-+/*
-+ * The following macros are to be defined by <asm/byteorder.h>:
-+ *
-+ * Conversion of long and short int between network and host format
-+ * ntohl(__u32 x)
-+ * ntohs(__u16 x)
-+ * htonl(__u32 x)
-+ * htons(__u16 x)
-+ * It seems that some programs (which? where? or perhaps a standard? POSIX?)
-+ * might like the above to be functions, not macros (why?).
-+ * if that's true, then detect them, and take measures.
-+ * Anyway, the measure is: define only ___ntohl as a macro instead,
-+ * and in a separate file, have
-+ * unsigned long inline ntohl(x){return ___ntohl(x);}
-+ *
-+ * The same for constant arguments
-+ * __constant_ntohl(__u32 x)
-+ * __constant_ntohs(__u16 x)
-+ * __constant_htonl(__u32 x)
-+ * __constant_htons(__u16 x)
-+ *
-+ * Conversion of XX-bit integers (16- 32- or 64-)
-+ * between native CPU format and little/big endian format
-+ * 64-bit stuff only defined for proper architectures
-+ * cpu_to_[bl]eXX(__uXX x)
-+ * [bl]eXX_to_cpu(__uXX x)
-+ *
-+ * The same, but takes a pointer to the value to convert
-+ * cpu_to_[bl]eXXp(__uXX x)
-+ * [bl]eXX_to_cpup(__uXX x)
-+ *
-+ * The same, but change in situ
-+ * cpu_to_[bl]eXXs(__uXX x)
-+ * [bl]eXX_to_cpus(__uXX x)
-+ *
-+ * See asm-foo/byteorder.h for examples of how to provide
-+ * architecture-optimized versions
-+ *
-+ */
-+
-+
-+#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS) || defined(PLATFORM_MPIXEL) || defined(PLATFORM_FREEBSD)
-+/*
-+ * inside the kernel, we can use nicknames;
-+ * outside of it, we must avoid POSIX namespace pollution...
-+ */
-+#define cpu_to_le64 __cpu_to_le64
-+#define le64_to_cpu __le64_to_cpu
-+#define cpu_to_le32 __cpu_to_le32
-+#define le32_to_cpu __le32_to_cpu
-+#define cpu_to_le16 __cpu_to_le16
-+#define le16_to_cpu __le16_to_cpu
-+#define cpu_to_be64 __cpu_to_be64
-+#define be64_to_cpu __be64_to_cpu
-+#define cpu_to_be32 __cpu_to_be32
-+#define be32_to_cpu __be32_to_cpu
-+#define cpu_to_be16 __cpu_to_be16
-+#define be16_to_cpu __be16_to_cpu
-+#define cpu_to_le64p __cpu_to_le64p
-+#define le64_to_cpup __le64_to_cpup
-+#define cpu_to_le32p __cpu_to_le32p
-+#define le32_to_cpup __le32_to_cpup
-+#define cpu_to_le16p __cpu_to_le16p
-+#define le16_to_cpup __le16_to_cpup
-+#define cpu_to_be64p __cpu_to_be64p
-+#define be64_to_cpup __be64_to_cpup
-+#define cpu_to_be32p __cpu_to_be32p
-+#define be32_to_cpup __be32_to_cpup
-+#define cpu_to_be16p __cpu_to_be16p
-+#define be16_to_cpup __be16_to_cpup
-+#define cpu_to_le64s __cpu_to_le64s
-+#define le64_to_cpus __le64_to_cpus
-+#define cpu_to_le32s __cpu_to_le32s
-+#define le32_to_cpus __le32_to_cpus
-+#define cpu_to_le16s __cpu_to_le16s
-+#define le16_to_cpus __le16_to_cpus
-+#define cpu_to_be64s __cpu_to_be64s
-+#define be64_to_cpus __be64_to_cpus
-+#define cpu_to_be32s __cpu_to_be32s
-+#define be32_to_cpus __be32_to_cpus
-+#define cpu_to_be16s __cpu_to_be16s
-+#define be16_to_cpus __be16_to_cpus
-+#endif
-+
-+
-+/*
-+ * Handle ntohl and suches. These have various compatibility
-+ * issues - like we want to give the prototype even though we
-+ * also have a macro for them in case some strange program
-+ * wants to take the address of the thing or something..
-+ *
-+ * Note that these used to return a "long" in libc5, even though
-+ * long is often 64-bit these days.. Thus the casts.
-+ *
-+ * They have to be macros in order to do the constant folding
-+ * correctly - if the argument passed into a inline function
-+ * it is no longer constant according to gcc..
-+ */
-+
-+#undef ntohl
-+#undef ntohs
-+#undef htonl
-+#undef htons
-+
-+/*
-+ * Do the prototypes. Somebody might want to take the
-+ * address or some such sick thing..
-+ */
-+#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
-+extern __u32 ntohl(__u32);
-+extern __u32 htonl(__u32);
-+#else //defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
-+#ifndef PLATFORM_FREEBSD
-+extern unsigned long int ntohl(unsigned long int);
-+extern unsigned long int htonl(unsigned long int);
-+#endif
-+#endif
-+#ifndef PLATFORM_FREEBSD
-+extern unsigned short int ntohs(unsigned short int);
-+extern unsigned short int htons(unsigned short int);
-+#endif
-+
-+#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) || defined(PLATFORM_MPIXEL)
-+
-+#define ___htonl(x) __cpu_to_be32(x)
-+#define ___htons(x) __cpu_to_be16(x)
-+#define ___ntohl(x) __be32_to_cpu(x)
-+#define ___ntohs(x) __be16_to_cpu(x)
-+
-+#if defined(PLATFORM_LINUX) || (defined (__GLIBC__) && __GLIBC__ >= 2)
-+#define htonl(x) ___htonl(x)
-+#define ntohl(x) ___ntohl(x)
-+#else
-+#define htonl(x) ((unsigned long)___htonl(x))
-+#define ntohl(x) ((unsigned long)___ntohl(x))
-+#endif
-+#define htons(x) ___htons(x)
-+#define ntohs(x) ___ntohs(x)
-+
-+#endif /* OPTIMIZE */
-+
-+
-+#if defined (PLATFORM_WINDOWS)
-+
-+#define htonl(x) __cpu_to_be32(x)
-+#define ntohl(x) __be32_to_cpu(x)
-+#define htons(x) __cpu_to_be16(x)
-+#define ntohs(x) __be16_to_cpu(x)
-+
-+
-+#endif
-+
-+#endif /* _LINUX_BYTEORDER_GENERIC_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/little_endian.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,89 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _LINUX_BYTEORDER_LITTLE_ENDIAN_H
-+#define _LINUX_BYTEORDER_LITTLE_ENDIAN_H
-+
-+#ifndef __LITTLE_ENDIAN
-+#define __LITTLE_ENDIAN 1234
-+#endif
-+#ifndef __LITTLE_ENDIAN_BITFIELD
-+#define __LITTLE_ENDIAN_BITFIELD
-+#endif
-+
-+#include <byteorder/swab.h>
-+
-+#ifndef __constant_htonl
-+#define __constant_htonl(x) ___constant_swab32((x))
-+#define __constant_ntohl(x) ___constant_swab32((x))
-+#define __constant_htons(x) ___constant_swab16((x))
-+#define __constant_ntohs(x) ___constant_swab16((x))
-+#define __constant_cpu_to_le64(x) ((__u64)(x))
-+#define __constant_le64_to_cpu(x) ((__u64)(x))
-+#define __constant_cpu_to_le32(x) ((__u32)(x))
-+#define __constant_le32_to_cpu(x) ((__u32)(x))
-+#define __constant_cpu_to_le16(x) ((__u16)(x))
-+#define __constant_le16_to_cpu(x) ((__u16)(x))
-+#define __constant_cpu_to_be64(x) ___constant_swab64((x))
-+#define __constant_be64_to_cpu(x) ___constant_swab64((x))
-+#define __constant_cpu_to_be32(x) ___constant_swab32((x))
-+#define __constant_be32_to_cpu(x) ___constant_swab32((x))
-+#define __constant_cpu_to_be16(x) ___constant_swab16((x))
-+#define __constant_be16_to_cpu(x) ___constant_swab16((x))
-+#define __cpu_to_le64(x) ((__u64)(x))
-+#define __le64_to_cpu(x) ((__u64)(x))
-+#define __cpu_to_le32(x) ((__u32)(x))
-+#define __le32_to_cpu(x) ((__u32)(x))
-+#define __cpu_to_le16(x) ((__u16)(x))
-+#define __le16_to_cpu(x) ((__u16)(x))
-+#define __cpu_to_be64(x) __swab64((x))
-+#define __be64_to_cpu(x) __swab64((x))
-+#define __cpu_to_be32(x) __swab32((x))
-+#define __be32_to_cpu(x) __swab32((x))
-+#define __cpu_to_be16(x) __swab16((x))
-+#define __be16_to_cpu(x) __swab16((x))
-+#define __cpu_to_le64p(x) (*(__u64*)(x))
-+#define __le64_to_cpup(x) (*(__u64*)(x))
-+#define __cpu_to_le32p(x) (*(__u32*)(x))
-+#define __le32_to_cpup(x) (*(__u32*)(x))
-+#define __cpu_to_le16p(x) (*(__u16*)(x))
-+#define __le16_to_cpup(x) (*(__u16*)(x))
-+#define __cpu_to_be64p(x) __swab64p((x))
-+#define __be64_to_cpup(x) __swab64p((x))
-+#define __cpu_to_be32p(x) __swab32p((x))
-+#define __be32_to_cpup(x) __swab32p((x))
-+#define __cpu_to_be16p(x) __swab16p((x))
-+#define __be16_to_cpup(x) __swab16p((x))
-+#define __cpu_to_le64s(x) do {} while (0)
-+#define __le64_to_cpus(x) do {} while (0)
-+#define __cpu_to_le32s(x) do {} while (0)
-+#define __le32_to_cpus(x) do {} while (0)
-+#define __cpu_to_le16s(x) do {} while (0)
-+#define __le16_to_cpus(x) do {} while (0)
-+#define __cpu_to_be64s(x) __swab64s((x))
-+#define __be64_to_cpus(x) __swab64s((x))
-+#define __cpu_to_be32s(x) __swab32s((x))
-+#define __be32_to_cpus(x) __swab32s((x))
-+#define __cpu_to_be16s(x) __swab16s((x))
-+#define __be16_to_cpus(x) __swab16s((x))
-+#endif // __constant_htonl
-+
-+#include <byteorder/generic.h>
-+
-+#endif /* _LINUX_BYTEORDER_LITTLE_ENDIAN_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swab.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,140 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _LINUX_BYTEORDER_SWAB_H
-+#define _LINUX_BYTEORDER_SWAB_H
-+
-+#if !defined(CONFIG_PLATFORM_MSTAR)
-+#ifndef __u16
-+typedef unsigned short __u16;
-+#endif
-+
-+#ifndef __u32
-+typedef unsigned int __u32;
-+#endif
-+
-+#ifndef __u8
-+typedef unsigned char __u8;
-+#endif
-+
-+#ifndef __u64
-+typedef unsigned long long __u64;
-+#endif
-+
-+
-+__inline static __u16 ___swab16(__u16 x)
-+{
-+ __u16 __x = x;
-+ return
-+ ((__u16)(
-+ (((__u16)(__x) & (__u16)0x00ffU) << 8) |
-+ (((__u16)(__x) & (__u16)0xff00U) >> 8) ));
-+
-+}
-+
-+__inline static __u32 ___swab32(__u32 x)
-+{
-+ __u32 __x = (x);
-+ return ((__u32)(
-+ (((__u32)(__x) & (__u32)0x000000ffUL) << 24) |
-+ (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) |
-+ (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) |
-+ (((__u32)(__x) & (__u32)0xff000000UL) >> 24) ));
-+}
-+
-+__inline static __u64 ___swab64(__u64 x)
-+{
-+ __u64 __x = (x);
-+
-+ return
-+ ((__u64)( \
-+ (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \
-+ (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \
-+ (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \
-+}
-+#endif // CONFIG_PLATFORM_MSTAR
-+
-+#ifndef __arch__swab16
-+__inline static __u16 __arch__swab16(__u16 x)
-+{
-+ return ___swab16(x);
-+}
-+
-+#endif
-+
-+#ifndef __arch__swab32
-+__inline static __u32 __arch__swab32(__u32 x)
-+{
-+ __u32 __tmp = (x) ;
-+ return ___swab32(__tmp);
-+}
-+#endif
-+
-+#ifndef __arch__swab64
-+
-+__inline static __u64 __arch__swab64(__u64 x)
-+{
-+ __u64 __tmp = (x) ;
-+ return ___swab64(__tmp);
-+}
-+
-+
-+#endif
-+
-+#ifndef __swab16
-+#define __swab16(x) __fswab16(x)
-+#define __swab32(x) __fswab32(x)
-+#define __swab64(x) __fswab64(x)
-+#endif // __swab16
-+
-+#ifdef PLATFORM_FREEBSD
-+__inline static __u16 __fswab16(__u16 x)
-+#else
-+__inline static const __u16 __fswab16(__u16 x)
-+#endif //PLATFORM_FREEBSD
-+{
-+ return __arch__swab16(x);
-+}
-+#ifdef PLATFORM_FREEBSD
-+__inline static __u32 __fswab32(__u32 x)
-+#else
-+__inline static const __u32 __fswab32(__u32 x)
-+#endif //PLATFORM_FREEBSD
-+{
-+ return __arch__swab32(x);
-+}
-+
-+#if defined(PLATFORM_LINUX) || defined(PLATFORM_WINDOWS)
-+#define swab16 __swab16
-+#define swab32 __swab32
-+#define swab64 __swab64
-+#define swab16p __swab16p
-+#define swab32p __swab32p
-+#define swab64p __swab64p
-+#define swab16s __swab16s
-+#define swab32s __swab32s
-+#define swab64s __swab64s
-+#endif
-+
-+#endif /* _LINUX_BYTEORDER_SWAB_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/byteorder/swabb.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,156 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _LINUX_BYTEORDER_SWABB_H
-+#define _LINUX_BYTEORDER_SWABB_H
-+
-+/*
-+ * linux/byteorder/swabb.h
-+ * SWAp Bytes Bizarrely
-+ * swaHHXX[ps]?(foo)
-+ *
-+ * Support for obNUXIous pdp-endian and other bizarre architectures.
-+ * Will Linux ever run on such ancient beasts? if not, this file
-+ * will be but a programming pearl. Still, it's a reminder that we
-+ * shouldn't be making too many assumptions when trying to be portable.
-+ *
-+ */
-+
-+/*
-+ * Meaning of the names I chose (vaxlinux people feel free to correct them):
-+ * swahw32 swap 16-bit half-words in a 32-bit word
-+ * swahb32 swap 8-bit halves of each 16-bit half-word in a 32-bit word
-+ *
-+ * No 64-bit support yet. I don't know NUXI conventions for long longs.
-+ * I guarantee it will be a mess when it's there, though :->
-+ * It will be even worse if there are conflicting 64-bit conventions.
-+ * Hopefully, no one ever used 64-bit objects on NUXI machines.
-+ *
-+ */
-+
-+#define ___swahw32(x) \
-+({ \
-+ __u32 __x = (x); \
-+ ((__u32)( \
-+ (((__u32)(__x) & (__u32)0x0000ffffUL) << 16) | \
-+ (((__u32)(__x) & (__u32)0xffff0000UL) >> 16) )); \
-+})
-+#define ___swahb32(x) \
-+({ \
-+ __u32 __x = (x); \
-+ ((__u32)( \
-+ (((__u32)(__x) & (__u32)0x00ff00ffUL) << 8) | \
-+ (((__u32)(__x) & (__u32)0xff00ff00UL) >> 8) )); \
-+})
-+
-+#define ___constant_swahw32(x) \
-+ ((__u32)( \
-+ (((__u32)(x) & (__u32)0x0000ffffUL) << 16) | \
-+ (((__u32)(x) & (__u32)0xffff0000UL) >> 16) ))
-+#define ___constant_swahb32(x) \
-+ ((__u32)( \
-+ (((__u32)(x) & (__u32)0x00ff00ffUL) << 8) | \
-+ (((__u32)(x) & (__u32)0xff00ff00UL) >> 8) ))
-+
-+/*
-+ * provide defaults when no architecture-specific optimization is detected
-+ */
-+#ifndef __arch__swahw32
-+# define __arch__swahw32(x) ___swahw32(x)
-+#endif
-+#ifndef __arch__swahb32
-+# define __arch__swahb32(x) ___swahb32(x)
-+#endif
-+
-+#ifndef __arch__swahw32p
-+# define __arch__swahw32p(x) __swahw32(*(x))
-+#endif
-+#ifndef __arch__swahb32p
-+# define __arch__swahb32p(x) __swahb32(*(x))
-+#endif
-+
-+#ifndef __arch__swahw32s
-+# define __arch__swahw32s(x) do { *(x) = __swahw32p((x)); } while (0)
-+#endif
-+#ifndef __arch__swahb32s
-+# define __arch__swahb32s(x) do { *(x) = __swahb32p((x)); } while (0)
-+#endif
-+
-+
-+/*
-+ * Allow constant folding
-+ */
-+#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__)
-+# define __swahw32(x) \
-+(__builtin_constant_p((__u32)(x)) ? \
-+ ___swahw32((x)) : \
-+ __fswahw32((x)))
-+# define __swahb32(x) \
-+(__builtin_constant_p((__u32)(x)) ? \
-+ ___swahb32((x)) : \
-+ __fswahb32((x)))
-+#else
-+# define __swahw32(x) __fswahw32(x)
-+# define __swahb32(x) __fswahb32(x)
-+#endif /* OPTIMIZE */
-+
-+
-+__inline static__ __const__ __u32 __fswahw32(__u32 x)
-+{
-+ return __arch__swahw32(x);
-+}
-+__inline static__ __u32 __swahw32p(__u32 *x)
-+{
-+ return __arch__swahw32p(x);
-+}
-+__inline static__ void __swahw32s(__u32 *addr)
-+{
-+ __arch__swahw32s(addr);
-+}
-+
-+
-+__inline static__ __const__ __u32 __fswahb32(__u32 x)
-+{
-+ return __arch__swahb32(x);
-+}
-+__inline static__ __u32 __swahb32p(__u32 *x)
-+{
-+ return __arch__swahb32p(x);
-+}
-+__inline static__ void __swahb32s(__u32 *addr)
-+{
-+ __arch__swahb32s(addr);
-+}
-+
-+#ifdef __BYTEORDER_HAS_U64__
-+/*
-+ * Not supported yet
-+ */
-+#endif /* __BYTEORDER_HAS_U64__ */
-+
-+#if defined(PLATFORM_LINUX)
-+#define swahw32 __swahw32
-+#define swahb32 __swahb32
-+#define swahw32p __swahw32p
-+#define swahb32p __swahb32p
-+#define swahw32s __swahw32s
-+#define swahb32s __swahb32s
-+#endif
-+
-+#endif /* _LINUX_BYTEORDER_SWABB_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/circ_buf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/circ_buf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/circ_buf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/circ_buf.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,27 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __CIRC_BUF_H_
-+#define __CIRC_BUF_H_ 1
-+
-+#define CIRC_CNT(head,tail,size) (((head) - (tail)) & ((size)-1))
-+
-+#define CIRC_SPACE(head,tail,size) CIRC_CNT((tail),((head)+1),(size))
-+
-+#endif //_CIRC_BUF_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/cmd_osdep.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,35 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __CMD_OSDEP_H_
-+#define __CMD_OSDEP_H_
-+
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <drv_types.h>
-+
-+extern sint _rtw_init_cmd_priv (struct cmd_priv *pcmdpriv);
-+extern sint _rtw_init_evt_priv(struct evt_priv *pevtpriv);
-+extern void _rtw_free_evt_priv (struct evt_priv *pevtpriv);
-+extern void _rtw_free_cmd_priv (struct cmd_priv *pcmdpriv);
-+extern sint _rtw_enqueue_cmd(_queue *queue, struct cmd_obj *obj);
-+extern struct cmd_obj *_rtw_dequeue_cmd(_queue *queue);
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_conf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_conf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_conf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_conf.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,77 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __DRV_CONF_H__
-+#define __DRV_CONF_H__
-+#include "autoconf.h"
-+
-+#if defined (PLATFORM_LINUX) && defined (PLATFORM_WINDOWS)
-+
-+#error "Shall be Linux or Windows, but not both!\n"
-+
-+#endif
-+
-+//Older Android kernel doesn't has CONFIG_ANDROID defined,
-+//add this to force CONFIG_ANDROID defined
-+#ifdef CONFIG_PLATFORM_ANDROID
-+#define CONFIG_ANDROID
-+#endif
-+
-+#ifdef CONFIG_ANDROID
-+//Some Android build will restart the UI while non-printable ascii is passed
-+//between java and c/c++ layer (JNI). We force CONFIG_VALIDATE_SSID
-+//for Android here. If you are sure there is no risk on your system about this,
-+//mask this macro define to support non-printable ascii ssid.
-+//#define CONFIG_VALIDATE_SSID
-+
-+//Android expect dbm as the rx signal strength unit
-+#define CONFIG_SIGNAL_DISPLAY_DBM
-+#endif
-+
-+#if defined(CONFIG_HAS_EARLYSUSPEND) && defined (CONFIG_RESUME_IN_WORKQUEUE)
-+ #warning "You have CONFIG_HAS_EARLYSUSPEND enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically"
-+ #undef CONFIG_RESUME_IN_WORKQUEUE
-+#endif
-+
-+#if defined(CONFIG_ANDROID_POWER) && defined (CONFIG_RESUME_IN_WORKQUEUE)
-+ #warning "You have CONFIG_ANDROID_POWER enabled in your system, we disable CONFIG_RESUME_IN_WORKQUEUE automatically"
-+ #undef CONFIG_RESUME_IN_WORKQUEUE
-+#endif
-+
-+#ifdef CONFIG_RESUME_IN_WORKQUEUE //this can be removed, because there is no case for this...
-+ #if !defined( CONFIG_WAKELOCK) && !defined(CONFIG_ANDROID_POWER)
-+ #error "enable CONFIG_RESUME_IN_WORKQUEUE without CONFIG_WAKELOCK or CONFIG_ANDROID_POWER will suffer from the danger of wifi's unfunctionality..."
-+ #error "If you still want to enable CONFIG_RESUME_IN_WORKQUEUE in this case, mask this preprossor checking and GOOD LUCK..."
-+ #endif
-+#endif
-+
-+//About USB VENDOR REQ
-+#if defined(CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX)
-+ #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC automatically"
-+ #define CONFIG_USB_VENDOR_REQ_MUTEX
-+#endif
-+#if defined(CONFIG_VENDOR_REQ_RETRY) && !defined(CONFIG_USB_VENDOR_REQ_MUTEX)
-+ #warning "define CONFIG_USB_VENDOR_REQ_MUTEX for CONFIG_VENDOR_REQ_RETRY automatically"
-+ #define CONFIG_USB_VENDOR_REQ_MUTEX
-+#endif
-+
-+
-+//#include <rtl871x_byteorder.h>
-+
-+#endif // __DRV_CONF_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,661 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+/*-------------------------------------------------------------------------------
-+
-+ For type defines and data structure defines
-+
-+--------------------------------------------------------------------------------*/
-+
-+
-+#ifndef __DRV_TYPES_H__
-+#define __DRV_TYPES_H__
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <wlan_bssdef.h>
-+
-+
-+#ifdef PLATFORM_OS_XP
-+#include <drv_types_xp.h>
-+#endif
-+
-+#ifdef PLATFORM_OS_CE
-+#include <drv_types_ce.h>
-+#endif
-+
-+#ifdef PLATFORM_LINUX
-+#include <drv_types_linux.h>
-+#endif
-+
-+enum _NIC_VERSION {
-+
-+ RTL8711_NIC,
-+ RTL8712_NIC,
-+ RTL8713_NIC,
-+ RTL8716_NIC
-+
-+};
-+
-+enum{
-+ UP_LINK,
-+ DOWN_LINK,
-+};
-+typedef struct _ADAPTER _adapter, ADAPTER,*PADAPTER;
-+
-+#ifdef CONFIG_80211N_HT
-+#include <rtw_ht.h>
-+#endif
-+
-+#include <rtw_cmd.h>
-+#include <wlan_bssdef.h>
-+#include <rtw_security.h>
-+#include <rtw_xmit.h>
-+#include <rtw_recv.h>
-+#include <hal_intf.h>
-+#include <hal_com.h>
-+#include <rtw_qos.h>
-+#include <rtw_pwrctrl.h>
-+#include <rtw_io.h>
-+#include <rtw_eeprom.h>
-+#include <sta_info.h>
-+#include <rtw_mlme.h>
-+#include <rtw_debug.h>
-+#include <rtw_rf.h>
-+#include <rtw_event.h>
-+#include <rtw_led.h>
-+#include <rtw_mlme_ext.h>
-+#include <rtw_p2p.h>
-+#include <rtw_tdls.h>
-+#include <rtw_ap.h>
-+
-+#ifdef CONFIG_DRVEXT_MODULE
-+#include <drvext_api.h>
-+#endif
-+
-+#ifdef CONFIG_MP_INCLUDED
-+#include <rtw_mp.h>
-+#endif
-+
-+#ifdef CONFIG_BR_EXT
-+#include <rtw_br_ext.h>
-+#endif // CONFIG_BR_EXT
-+
-+#ifdef CONFIG_IOCTL_CFG80211
-+ #include "ioctl_cfg80211.h"
-+#endif //CONFIG_IOCTL_CFG80211
-+
-+#define SPEC_DEV_ID_NONE BIT(0)
-+#define SPEC_DEV_ID_DISABLE_HT BIT(1)
-+#define SPEC_DEV_ID_ENABLE_PS BIT(2)
-+#define SPEC_DEV_ID_RF_CONFIG_1T1R BIT(3)
-+#define SPEC_DEV_ID_RF_CONFIG_2T2R BIT(4)
-+#define SPEC_DEV_ID_ASSIGN_IFNAME BIT(5)
-+
-+struct specific_device_id{
-+
-+ u32 flags;
-+
-+ u16 idVendor;
-+ u16 idProduct;
-+
-+};
-+
-+struct registry_priv
-+{
-+ u8 chip_version;
-+ u8 rfintfs;
-+ u8 lbkmode;
-+ u8 hci;
-+ NDIS_802_11_SSID ssid;
-+ u8 network_mode; //infra, ad-hoc, auto
-+ u8 channel;//ad-hoc support requirement
-+ u8 wireless_mode;//A, B, G, auto
-+ u8 scan_mode;//active, passive
-+ u8 radio_enable;
-+ u8 preamble;//long, short, auto
-+ u8 vrtl_carrier_sense;//Enable, Disable, Auto
-+ u8 vcs_type;//RTS/CTS, CTS-to-self
-+ u16 rts_thresh;
-+ u16 frag_thresh;
-+ u8 adhoc_tx_pwr;
-+ u8 soft_ap;
-+ u8 power_mgnt;
-+ u8 ips_mode;
-+ u8 smart_ps;
-+ u8 long_retry_lmt;
-+ u8 short_retry_lmt;
-+ u16 busy_thresh;
-+ u8 ack_policy;
-+ u8 mp_mode;
-+ u8 software_encrypt;
-+ u8 software_decrypt;
-+
-+ u8 acm_method;
-+ //UAPSD
-+ u8 wmm_enable;
-+ u8 uapsd_enable;
-+ u8 uapsd_max_sp;
-+ u8 uapsd_acbk_en;
-+ u8 uapsd_acbe_en;
-+ u8 uapsd_acvi_en;
-+ u8 uapsd_acvo_en;
-+
-+ WLAN_BSSID_EX dev_network;
-+
-+#ifdef CONFIG_80211N_HT
-+ u8 ht_enable;
-+ u8 cbw40_enable;
-+ u8 ampdu_enable;//for tx
-+ u8 rx_stbc;
-+ u8 ampdu_amsdu;//A-MPDU Supports A-MSDU is permitted
-+#endif
-+ u8 lowrate_two_xmit;
-+
-+ u8 rf_config ;
-+ u8 low_power ;
-+
-+ u8 wifi_spec;// !turbo_mode
-+
-+ u8 channel_plan;
-+#ifdef CONFIG_BT_COEXIST
-+ u8 bt_iso;
-+ u8 bt_sco;
-+ u8 bt_ampdu;
-+#endif
-+ BOOLEAN bAcceptAddbaReq;
-+
-+ u8 antdiv_cfg;
-+
-+ u8 usbss_enable;//0:disable,1:enable
-+ u8 hwpdn_mode;//0:disable,1:enable,2:decide by EFUSE config
-+ u8 hwpwrp_detect;//0:disable,1:enable
-+
-+ u8 hw_wps_pbc;//0:disable,1:enable
-+
-+#ifdef CONFIG_ADAPTOR_INFO_CACHING_FILE
-+ char adaptor_info_caching_file_path[PATH_LENGTH_MAX];
-+#endif
-+
-+#ifdef CONFIG_LAYER2_ROAMING
-+ u8 max_roaming_times; // the max number driver will try to roaming
-+#endif
-+
-+#ifdef CONFIG_IOL
-+ bool force_iol; //enable iol without other concern
-+#endif
-+ u8 special_rf_path; //0: 2T2R ,1: only turn on path A 1T1R, 2: only turn on path B 1T1R
-+ u8 mac_phy_mode; //0:by efuse, 1:smsp, 2:dmdp, 3:dmsp.
-+
-+#ifdef CONFIG_80211D
-+ u8 enable80211d;
-+#endif
-+
-+ u8 ifname[16];
-+ u8 if2name[16];
-+
-+ u8 notch_filter;
-+
-+#ifdef CONFIG_MULTI_VIR_IFACES
-+ u8 ext_iface_num;//primary/secondary iface is excluded
-+#endif
-+};
-+
-+
-+//For registry parameters
-+#define RGTRY_OFT(field) ((ULONG)FIELD_OFFSET(struct registry_priv,field))
-+#define RGTRY_SZ(field) sizeof(((struct registry_priv*) 0)->field)
-+#define BSSID_OFT(field) ((ULONG)FIELD_OFFSET(WLAN_BSSID_EX,field))
-+#define BSSID_SZ(field) sizeof(((PWLAN_BSSID_EX) 0)->field)
-+
-+#define MAX_CONTINUAL_URB_ERR 4
-+
-+#ifdef CONFIG_SDIO_HCI
-+#include <drv_types_sdio.h>
-+#define INTF_DATA SDIO_DATA
-+#endif
-+
-+#define GET_PRIMARY_ADAPTER(padapter) (((_adapter *)padapter)->dvobj->if1)
-+
-+#define GET_IFACE_NUMS(padapter) (((_adapter *)padapter)->dvobj->iface_nums)
-+#define GET_ADAPTER(padapter, iface_id) (((_adapter *)padapter)->dvobj->padapters[iface_id])
-+
-+enum _IFACE_ID {
-+ IFACE_ID0, //maping to PRIMARY_ADAPTER
-+ IFACE_ID1, //maping to SECONDARY_ADAPTER
-+ IFACE_ID2,
-+ IFACE_ID3,
-+ IFACE_ID_MAX,
-+};
-+
-+struct dvobj_priv
-+{
-+ _adapter *if1; //PRIMARY_ADAPTER
-+ _adapter *if2; //SECONDARY_ADAPTER
-+
-+ s32 processing_dev_remove;
-+
-+ //for local/global synchronization
-+ _mutex hw_init_mutex;
-+ _mutex h2c_fwcmd_mutex;
-+ _mutex setch_mutex;
-+ _mutex setbw_mutex;
-+
-+ unsigned char oper_channel; //saved channel info when call set_channel_bw
-+ unsigned char oper_bwmode;
-+ unsigned char oper_ch_offset;//PRIME_CHNL_OFFSET
-+ u32 on_oper_ch_time;
-+
-+ //extend to support mulitu interface
-+ //padapters[IFACE_ID0] == if1
-+ //padapters[IFACE_ID1] == if2
-+ _adapter *padapters[IFACE_ID_MAX];
-+ u8 iface_nums; // total number of ifaces used runtime
-+
-+ //For 92D, DMDP have 2 interface.
-+ u8 InterfaceNumber;
-+ u8 NumInterfaces;
-+ u8 DualMacMode;
-+ u8 irq_alloc;
-+
-+/*-------- below is for SDIO INTERFACE --------*/
-+
-+#ifdef INTF_DATA
-+ INTF_DATA intf_data;
-+#endif
-+
-+/*-------- below is for USB INTERFACE --------*/
-+
-+#ifdef CONFIG_USB_HCI
-+
-+ u8 nr_endpoint;
-+ u8 ishighspeed;
-+ u8 RtNumInPipes;
-+ u8 RtNumOutPipes;
-+ int ep_num[5]; //endpoint number
-+
-+ int RegUsbSS;
-+
-+ _sema usb_suspend_sema;
-+
-+#ifdef CONFIG_USB_VENDOR_REQ_MUTEX
-+ _mutex usb_vendor_req_mutex;
-+#endif
-+
-+#ifdef CONFIG_USB_VENDOR_REQ_BUFFER_PREALLOC
-+ u8 * usb_alloc_vendor_req_buf;
-+ u8 * usb_vendor_req_buf;
-+#endif
-+
-+#ifdef PLATFORM_WINDOWS
-+ //related device objects
-+ PDEVICE_OBJECT pphysdevobj;//pPhysDevObj;
-+ PDEVICE_OBJECT pfuncdevobj;//pFuncDevObj;
-+ PDEVICE_OBJECT pnextdevobj;//pNextDevObj;
-+
-+ u8 nextdevstacksz;//unsigned char NextDeviceStackSize; //= (CHAR)CEdevice->pUsbDevObj->StackSize + 1;
-+
-+ //urb for control diescriptor request
-+
-+#ifdef PLATFORM_OS_XP
-+ struct _URB_CONTROL_DESCRIPTOR_REQUEST descriptor_urb;
-+ PUSB_CONFIGURATION_DESCRIPTOR pconfig_descriptor;//UsbConfigurationDescriptor;
-+#endif
-+
-+#ifdef PLATFORM_OS_CE
-+ WCHAR active_path[MAX_ACTIVE_REG_PATH]; // adapter regpath
-+ USB_EXTENSION usb_extension;
-+
-+ _nic_hdl pipehdls_r8192c[0x10];
-+#endif
-+
-+ u32 config_descriptor_len;//ULONG UsbConfigurationDescriptorLength;
-+#endif//PLATFORM_WINDOWS
-+
-+#ifdef PLATFORM_LINUX
-+ struct usb_interface *pusbintf;
-+ struct usb_device *pusbdev;
-+#endif//PLATFORM_LINUX
-+
-+#ifdef PLATFORM_FREEBSD
-+ struct usb_interface *pusbintf;
-+ struct usb_device *pusbdev;
-+#endif//PLATFORM_FREEBSD
-+ ATOMIC_T continual_urb_error;
-+#endif//CONFIG_USB_HCI
-+
-+/*-------- below is for PCIE INTERFACE --------*/
-+
-+#ifdef CONFIG_PCI_HCI
-+
-+#ifdef PLATFORM_LINUX
-+ struct pci_dev *ppcidev;
-+
-+ //PCI MEM map
-+ unsigned long pci_mem_end; /* shared mem end */
-+ unsigned long pci_mem_start; /* shared mem start */
-+
-+ //PCI IO map
-+ unsigned long pci_base_addr; /* device I/O address */
-+
-+ //PciBridge
-+ struct pci_priv pcipriv;
-+
-+ u16 irqline;
-+ u8 irq_enabled;
-+ RT_ISR_CONTENT isr_content;
-+ _lock irq_th_lock;
-+
-+ //ASPM
-+ u8 const_pci_aspm;
-+ u8 const_amdpci_aspm;
-+ u8 const_hwsw_rfoff_d3;
-+ u8 const_support_pciaspm;
-+ // pci-e bridge */
-+ u8 const_hostpci_aspm_setting;
-+ // pci-e device */
-+ u8 const_devicepci_aspm_setting;
-+ u8 b_support_aspm; // If it supports ASPM, Offset[560h] = 0x40, otherwise Offset[560h] = 0x00.
-+ u8 b_support_backdoor;
-+ u8 bdma64;
-+#endif//PLATFORM_LINUX
-+
-+#endif//CONFIG_PCI_HCI
-+};
-+
-+#ifdef PLATFORM_LINUX
-+static struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
-+{
-+ /* todo: get interface type from dvobj and the return the dev accordingly */
-+#ifdef RTW_DVOBJ_CHIP_HW_TYPE
-+#endif
-+
-+#ifdef CONFIG_USB_HCI
-+ return &dvobj->pusbintf->dev;
-+#endif
-+#ifdef CONFIG_SDIO_HCI
-+ return &dvobj->intf_data.func->dev;
-+#endif
-+#ifdef CONFIG_PCI_HCI
-+ return &dvobj->ppcidev->dev;
-+#endif
-+}
-+#endif
-+
-+
-+enum _IFACE_TYPE {
-+ IFACE_PORT0, //mapping to port0 for C/D series chips
-+ IFACE_PORT1, //mapping to port1 for C/D series chip
-+ MAX_IFACE_PORT,
-+};
-+
-+enum _ADAPTER_TYPE {
-+ PRIMARY_ADAPTER,
-+ SECONDARY_ADAPTER,
-+ MAX_ADAPTER = 0xFF,
-+};
-+
-+typedef enum _DRIVER_STATE{
-+ DRIVER_NORMAL = 0,
-+ DRIVER_DISAPPEAR = 1,
-+ DRIVER_REPLACE_DONGLE = 2,
-+}DRIVER_STATE;
-+
-+#ifdef CONFIG_INTEL_PROXIM
-+struct proxim {
-+ bool proxim_support;
-+ bool proxim_on;
-+
-+ void *proximity_priv;
-+ int (*proxim_rx)(_adapter *padapter,
-+ union recv_frame *precv_frame);
-+ u8 (*proxim_get_var)(_adapter* padapter, u8 type);
-+};
-+#endif //CONFIG_INTEL_PROXIM
-+
-+#ifdef RTL8723A_SDIO_LOOPBACK
-+typedef struct loopbackdata
-+{
-+ _sema sema;
-+ _thread_hdl_ lbkthread;
-+ u8 bstop;
-+ u32 cnt;
-+ u16 size;
-+ u16 txsize;
-+ u8 txbuf[0x8000];
-+ u16 rxsize;
-+ u8 rxbuf[0x8000];
-+ u8 msg[100];
-+
-+}LOOPBACKDATA, *PLOOPBACKDATA;
-+#endif
-+
-+struct _ADAPTER{
-+ int DriverState;// for disable driver using module, use dongle to replace module.
-+ int pid[3];//process id from UI, 0:wps, 1:hostapd, 2:dhcpcd
-+ int bDongle;//build-in module or external dongle
-+ u16 chip_type;
-+ u16 HardwareType;
-+ u16 interface_type;//USB,SDIO,PCI
-+
-+ struct dvobj_priv *dvobj;
-+ struct mlme_priv mlmepriv;
-+ struct mlme_ext_priv mlmeextpriv;
-+ struct cmd_priv cmdpriv;
-+ struct evt_priv evtpriv;
-+ //struct io_queue *pio_queue;
-+ struct io_priv iopriv;
-+ struct xmit_priv xmitpriv;
-+ struct recv_priv recvpriv;
-+ struct sta_priv stapriv;
-+ struct security_priv securitypriv;
-+ _lock security_key_mutex; // add for CONFIG_IEEE80211W, none 11w also can use
-+ struct registry_priv registrypriv;
-+ struct pwrctrl_priv pwrctrlpriv;
-+ struct eeprom_priv eeprompriv;
-+ struct led_priv ledpriv;
-+
-+#ifdef CONFIG_MP_INCLUDED
-+ struct mp_priv mppriv;
-+#endif
-+
-+#ifdef CONFIG_DRVEXT_MODULE
-+ struct drvext_priv drvextpriv;
-+#endif
-+
-+#ifdef CONFIG_AP_MODE
-+ struct hostapd_priv *phostapdpriv;
-+#endif
-+
-+#ifdef CONFIG_IOCTL_CFG80211
-+#ifdef CONFIG_P2P
-+ struct cfg80211_wifidirect_info cfg80211_wdinfo;
-+#endif //CONFIG_P2P
-+#endif //CONFIG_IOCTL_CFG80211
-+ u32 setband;
-+#ifdef CONFIG_P2P
-+ struct wifidirect_info wdinfo;
-+#endif //CONFIG_P2P
-+
-+#ifdef CONFIG_TDLS
-+ struct tdls_info tdlsinfo;
-+#endif //CONFIG_TDLS
-+
-+#ifdef CONFIG_WFD
-+ struct wifi_display_info wfd_info;
-+#endif //CONFIG_WFD
-+
-+ PVOID HalData;
-+ u32 hal_data_sz;
-+ struct hal_ops HalFunc;
-+
-+#ifdef CONFIG_BT_COEXIST
-+ //struct btcoexist_priv bt_coexist;
-+#endif
-+ s32 bDriverStopped;
-+ s32 bSurpriseRemoved;
-+ s32 bCardDisableWOHSM;
-+
-+ u32 IsrContent;
-+ u32 ImrContent;
-+
-+ u8 EepromAddressSize;
-+ u8 hw_init_completed;
-+ u8 bDriverIsGoingToUnload;
-+ u8 init_adpt_in_progress;
-+ u8 bHaltInProgress;
-+
-+ _thread_hdl_ cmdThread;
-+ _thread_hdl_ evtThread;
-+ _thread_hdl_ xmitThread;
-+ _thread_hdl_ recvThread;
-+
-+#ifndef PLATFORM_LINUX
-+ NDIS_STATUS (*dvobj_init)(struct dvobj_priv *dvobj);
-+ void (*dvobj_deinit)(struct dvobj_priv *dvobj);
-+#endif
-+
-+ void (*intf_start)(_adapter * adapter);
-+ void (*intf_stop)(_adapter * adapter);
-+
-+#ifdef PLATFORM_WINDOWS
-+ _nic_hdl hndis_adapter;//hNdisAdapter(NDISMiniportAdapterHandle);
-+ _nic_hdl hndis_config;//hNdisConfiguration;
-+ NDIS_STRING fw_img;
-+
-+ u32 NdisPacketFilter;
-+ u8 MCList[MAX_MCAST_LIST_NUM][6];
-+ u32 MCAddrCount;
-+#endif //end of PLATFORM_WINDOWS
-+
-+
-+#ifdef PLATFORM_LINUX
-+ _nic_hdl pnetdev;
-+
-+ // used by rtw_rereg_nd_name related function
-+ struct rereg_nd_name_data {
-+ _nic_hdl old_pnetdev;
-+ char old_ifname[IFNAMSIZ];
-+ u8 old_ips_mode;
-+ u8 old_bRegUseLed;
-+ } rereg_nd_name_priv;
-+
-+ int bup;
-+ struct net_device_stats stats;
-+ struct iw_statistics iwstats;
-+ struct proc_dir_entry *dir_dev;// for proc directory
-+
-+#ifdef CONFIG_IOCTL_CFG80211
-+ struct wireless_dev *rtw_wdev;
-+#endif //CONFIG_IOCTL_CFG80211
-+
-+#endif //end of PLATFORM_LINUX
-+
-+#ifdef PLATFORM_FREEBSD
-+ _nic_hdl pifp;
-+ int bup;
-+ _lock glock;
-+#endif //PLATFORM_FREEBSD
-+ int net_closed;
-+
-+ u8 bFWReady;
-+ u8 bReadPortCancel;
-+ u8 bWritePortCancel;
-+ u8 bRxRSSIDisplay;
-+ // Added by Albert 2012/07/26
-+ // The driver will write the initial gain everytime when running in the DM_Write_DIG function.
-+ u8 bForceWriteInitGain;
-+ // Added by Albert 2012/10/26
-+ // The driver will show up the desired channel number when this flag is 1.
-+ u8 bNotifyChannelChange;
-+#ifdef CONFIG_P2P
-+ // Added by Albert 2012/12/06
-+ // The driver will show the current P2P status when the upper application reads it.
-+ u8 bShowGetP2PState;
-+#endif
-+#ifdef CONFIG_AUTOSUSPEND
-+ u8 bDisableAutosuspend;
-+#endif
-+
-+ //pbuddy_adapter is used only in two inteface case, (iface_nums=2 in struct dvobj_priv)
-+ //PRIMARY_ADAPTER's buddy is SECONDARY_ADAPTER
-+ //SECONDARY_ADAPTER's buddy is PRIMARY_ADAPTER
-+ //for iface_id > SECONDARY_ADAPTER(IFACE_ID1), refer to padapters[iface_id] in struct dvobj_priv
-+ //and their pbuddy_adapter is PRIMARY_ADAPTER.
-+ //for PRIMARY_ADAPTER(IFACE_ID0) can directly refer to if1 in struct dvobj_priv
-+ _adapter *pbuddy_adapter;
-+
-+#if defined(CONFIG_CONCURRENT_MODE) || defined(CONFIG_DUALMAC_CONCURRENT)
-+ u8 isprimary; //is primary adapter or not
-+ //notes:
-+ // if isprimary is true, the adapter_type value is 0, iface_id is IFACE_ID0 for PRIMARY_ADAPTER
-+ // if isprimary is false, the adapter_type value is 1, iface_id is IFACE_ID1 for SECONDARY_ADAPTER
-+ // refer to iface_id if iface_nums>2 and isprimary is false and the adapter_type value is 0xff.
-+ u8 adapter_type;//used only in two inteface case(PRIMARY_ADAPTER and SECONDARY_ADAPTER) .
-+ u8 iface_type; //interface port type, it depends on HW port
-+#endif
-+
-+ //extend to support multi interface
-+ //IFACE_ID0 is equals to PRIMARY_ADAPTER
-+ //IFACE_ID1 is equals to SECONDARY_ADAPTER
-+ u8 iface_id;
-+
-+#ifdef CONFIG_DUALMAC_CONCURRENT
-+ u8 DualMacConcurrent; // 1: DMSP 0:DMDP
-+#endif
-+
-+#ifdef CONFIG_BR_EXT
-+ _lock br_ext_lock;
-+ //unsigned int macclone_completed;
-+ struct nat25_network_db_entry *nethash[NAT25_HASH_SIZE];
-+ int pppoe_connection_in_progress;
-+ unsigned char pppoe_addr[MACADDRLEN];
-+ unsigned char scdb_mac[MACADDRLEN];
-+ unsigned char scdb_ip[4];
-+ struct nat25_network_db_entry *scdb_entry;
-+ unsigned char br_mac[MACADDRLEN];
-+ unsigned char br_ip[4];
-+
-+ struct br_ext_info ethBrExtInfo;
-+#endif // CONFIG_BR_EXT
-+
-+#ifdef CONFIG_INTEL_PROXIM
-+ /* intel Proximity, should be alloc mem
-+ * in intel Proximity module and can only
-+ * be used in intel Proximity mode */
-+ struct proxim proximity;
-+#endif //CONFIG_INTEL_PROXIM
-+
-+#ifdef RTL8723A_SDIO_LOOPBACK
-+ PLOOPBACKDATA ploopback;
-+#endif
-+
-+};
-+
-+#define adapter_to_dvobj(adapter) (adapter->dvobj)
-+
-+int rtw_handle_dualmac(_adapter *adapter, bool init);
-+
-+__inline static u8 *myid(struct eeprom_priv *peepriv)
-+{
-+ return (peepriv->mac_addr);
-+}
-+
-+
-+#endif //__DRV_TYPES_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_ce.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,92 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __DRV_TYPES_CE_H__
-+#define __DRV_TYPES_CE_H__
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+
-+#include <Sdcardddk.h>
-+
-+#define MAX_ACTIVE_REG_PATH 256
-+
-+#define MAX_MCAST_LIST_NUM 32
-+
-+
-+
-+//for ioctl
-+#define MAKE_DRIVER_VERSION(_MainVer,_MinorVer) ((((u32)(_MainVer))<<16)+_MinorVer)
-+
-+#define NIC_HEADER_SIZE 14 //!< can be moved to typedef.h
-+#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
-+#define NIC_MAX_SEND_PACKETS 10 // max number of send packets the MiniportSendPackets function can accept, can be moved to typedef.h
-+#define NIC_VENDOR_DRIVER_VERSION MAKE_DRIVER_VERSION(0,001) //!< can be moved to typedef.h
-+#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
-+
-+typedef struct _MP_REG_ENTRY
-+{
-+
-+ NDIS_STRING RegName; // variable name text
-+ BOOLEAN bRequired; // 1 -> required, 0 -> optional
-+
-+ u8 Type; // NdisParameterInteger/NdisParameterHexInteger/NdisParameterStringle/NdisParameterMultiString
-+ uint FieldOffset; // offset to MP_ADAPTER field
-+ uint FieldSize; // size (in bytes) of the field
-+
-+#ifdef UNDER_AMD64
-+ u64 Default;
-+#else
-+ u32 Default; // default value to use
-+#endif
-+
-+ u32 Min; // minimum value allowed
-+ u32 Max; // maximum value allowed
-+} MP_REG_ENTRY, *PMP_REG_ENTRY;
-+
-+#ifdef CONFIG_USB_HCI
-+typedef struct _USB_EXTENSION {
-+ LPCUSB_FUNCS _lpUsbFuncs;
-+ USB_HANDLE _hDevice;
-+ PVOID pAdapter;
-+
-+#if 0
-+ USB_ENDPOINT_DESCRIPTOR _endpACLIn;
-+ USB_ENDPOINT_DESCRIPTOR _endpACLOutHigh;
-+ USB_ENDPOINT_DESCRIPTOR _endpACLOutNormal;
-+
-+ USB_PIPE pPipeIn;
-+ USB_PIPE pPipeOutNormal;
-+ USB_PIPE pPipeOutHigh;
-+#endif
-+
-+} USB_EXTENSION, *PUSB_EXTENSION;
-+#endif
-+
-+
-+typedef struct _OCTET_STRING{
-+ u8 *Octet;
-+ u16 Length;
-+} OCTET_STRING, *POCTET_STRING;
-+
-+
-+
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_linux.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,24 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __DRV_TYPES_LINUX_H__
-+#define __DRV_TYPES_LINUX_H__
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_sdio.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,69 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __DRV_TYPES_SDIO_H__
-+#define __DRV_TYPES_SDIO_H__
-+
-+#include <drv_conf.h>
-+#include <basic_types.h>
-+
-+// SDIO Header Files
-+#ifdef PLATFORM_LINUX
-+#include <linux/mmc/sdio_func.h>
-+#endif
-+#ifdef PLATFORM_OS_XP
-+#include <wdm.h>
-+#include <ntddsd.h>
-+#endif
-+#ifdef PLATFORM_OS_CE
-+#include <sdcardddk.h>
-+#endif
-+
-+
-+typedef struct sdio_data
-+{
-+ u8 func_number;
-+
-+ u8 tx_block_mode;
-+ u8 rx_block_mode;
-+ u32 block_transfer_len;
-+
-+#ifdef PLATFORM_LINUX
-+ struct sdio_func *func;
-+#endif
-+
-+#ifdef PLATFORM_OS_XP
-+ PDEVICE_OBJECT pphysdevobj;
-+ PDEVICE_OBJECT pfuncdevobj;
-+ PDEVICE_OBJECT pnextdevobj;
-+ SDBUS_INTERFACE_STANDARD sdbusinft;
-+ u8 nextdevstacksz;
-+#endif
-+
-+#ifdef PLATFORM_OS_CE
-+ SD_DEVICE_HANDLE hDevice;
-+ SD_CARD_RCA sd_rca;
-+ SD_CARD_INTERFACE card_intf;
-+ BOOLEAN enableIsarWithStatus;
-+ WCHAR active_path[MAX_ACTIVE_REG_PATH];
-+ SD_HOST_BLOCK_CAPABILITY sd_host_blk_cap;
-+#endif
-+} SDIO_DATA, *PSDIO_DATA;
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/drv_types_xp.h 2015-08-26 10:26:08.757316386 +0200
-@@ -0,0 +1,94 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __DRV_TYPES_XP_H__
-+#define __DRV_TYPES_XP_H__
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+
-+
-+
-+#define MAX_MCAST_LIST_NUM 32
-+
-+
-+
-+//for ioctl
-+#define MAKE_DRIVER_VERSION(_MainVer,_MinorVer) ((((u32)(_MainVer))<<16)+_MinorVer)
-+
-+#define NIC_HEADER_SIZE 14 //!< can be moved to typedef.h
-+#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
-+#define NIC_MAX_SEND_PACKETS 10 // max number of send packets the MiniportSendPackets function can accept, can be moved to typedef.h
-+#define NIC_VENDOR_DRIVER_VERSION MAKE_DRIVER_VERSION(0,001) //!< can be moved to typedef.h
-+#define NIC_MAX_PACKET_SIZE 1514 //!< can be moved to typedef.h
-+
-+
-+#undef ON_VISTA
-+//added by Jackson
-+#ifndef ON_VISTA
-+//
-+// Bus driver versions
-+//
-+
-+#define SDBUS_DRIVER_VERSION_1 0x100
-+#define SDBUS_DRIVER_VERSION_2 0x200
-+
-+#define SDP_FUNCTION_TYPE 4
-+#define SDP_BUS_DRIVER_VERSION 5
-+#define SDP_BUS_WIDTH 6
-+#define SDP_BUS_CLOCK 7
-+#define SDP_BUS_INTERFACE_CONTROL 8
-+#define SDP_HOST_BLOCK_LENGTH 9
-+#define SDP_FUNCTION_BLOCK_LENGTH 10
-+#define SDP_FN0_BLOCK_LENGTH 11
-+#define SDP_FUNCTION_INT_ENABLE 12
-+#endif
-+
-+
-+typedef struct _MP_REG_ENTRY
-+{
-+
-+ NDIS_STRING RegName; // variable name text
-+ BOOLEAN bRequired; // 1 -> required, 0 -> optional
-+
-+ u8 Type; // NdisParameterInteger/NdisParameterHexInteger/NdisParameterStringle/NdisParameterMultiString
-+ uint FieldOffset; // offset to MP_ADAPTER field
-+ uint FieldSize; // size (in bytes) of the field
-+
-+#ifdef UNDER_AMD64
-+ u64 Default;
-+#else
-+ u32 Default; // default value to use
-+#endif
-+
-+ u32 Min; // minimum value allowed
-+ u32 Max; // maximum value allowed
-+} MP_REG_ENTRY, *PMP_REG_ENTRY;
-+
-+
-+typedef struct _OCTET_STRING{
-+ u8 *Octet;
-+ u16 Length;
-+} OCTET_STRING, *POCTET_STRING;
-+
-+
-+
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ethernet.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ethernet.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ethernet.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ethernet.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,41 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+/*! \file */
-+#ifndef __INC_ETHERNET_H
-+#define __INC_ETHERNET_H
-+
-+#define ETHERNET_ADDRESS_LENGTH 6 //!< Ethernet Address Length
-+#define ETHERNET_HEADER_SIZE 14 //!< Ethernet Header Length
-+#define LLC_HEADER_SIZE 6 //!< LLC Header Length
-+#define TYPE_LENGTH_FIELD_SIZE 2 //!< Type/Length Size
-+#define MINIMUM_ETHERNET_PACKET_SIZE 60 //!< Minimum Ethernet Packet Size
-+#define MAXIMUM_ETHERNET_PACKET_SIZE 1514 //!< Maximum Ethernet Packet Size
-+
-+#define RT_ETH_IS_MULTICAST(_pAddr) ((((UCHAR *)(_pAddr))[0]&0x01)!=0) //!< Is Multicast Address?
-+#define RT_ETH_IS_BROADCAST(_pAddr) ( \
-+ ((UCHAR *)(_pAddr))[0]==0xff && \
-+ ((UCHAR *)(_pAddr))[1]==0xff && \
-+ ((UCHAR *)(_pAddr))[2]==0xff && \
-+ ((UCHAR *)(_pAddr))[3]==0xff && \
-+ ((UCHAR *)(_pAddr))[4]==0xff && \
-+ ((UCHAR *)(_pAddr))[5]==0xff ) //!< Is Broadcast Address?
-+
-+
-+#endif // #ifndef __INC_ETHERNET_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/h2clbk.h linux-rpi/drivers/net/wireless/rtl8192cu/include/h2clbk.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/h2clbk.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/h2clbk.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,35 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+
-+
-+#define _H2CLBK_H_
-+
-+
-+#include <rtl8711_spec.h>
-+#include <TypeDef.h>
-+
-+
-+void _lbk_cmd(PADAPTER Adapter);
-+
-+void _lbk_rsp(PADAPTER Adapter);
-+
-+void _lbk_evt(IN PADAPTER Adapter);
-+
-+void h2c_event_callback(unsigned char *dev, unsigned char *pbuf);
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_com.h linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_com.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_com.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_com.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/hal_com.h linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_com.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/hal_com.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_com.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,145 @@
+/******************************************************************************
+ *
@@ -174809,9 +176502,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_com.h linux-rpi
+s32 c2h_evt_read(_adapter *adapter, u8 *buf);
+
+#endif //__HAL_COMMON_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_intf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_intf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_intf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_intf.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/hal_intf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_intf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/hal_intf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/hal_intf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,431 @@
+/******************************************************************************
+ *
@@ -175244,9 +176937,630 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/hal_intf.h linux-rp
+c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter);
+
+#endif //__HAL_INTF_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ieee80211.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ieee80211.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/HalPwrSeqCmd.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,137 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __HALPWRSEQCMD_H__
++#define __HALPWRSEQCMD_H__
++
++#include <drv_types.h>
++
++/*---------------------------------------------*/
++//3 The value of cmd: 4 bits
++/*---------------------------------------------*/
++#define PWR_CMD_READ 0x00
++ // offset: the read register offset
++ // msk: the mask of the read value
++ // value: N/A, left by 0
++ // note: dirver shall implement this function by read & msk
++
++#define PWR_CMD_WRITE 0x01
++ // offset: the read register offset
++ // msk: the mask of the write bits
++ // value: write value
++ // note: driver shall implement this cmd by read & msk after write
++
++#define PWR_CMD_POLLING 0x02
++ // offset: the read register offset
++ // msk: the mask of the polled value
++ // value: the value to be polled, masked by the msd field.
++ // note: driver shall implement this cmd by
++ // do{
++ // if( (Read(offset) & msk) == (value & msk) )
++ // break;
++ // } while(not timeout);
++
++#define PWR_CMD_DELAY 0x03
++ // offset: the value to delay
++ // msk: N/A
++ // value: the unit of delay, 0: us, 1: ms
++
++#define PWR_CMD_END 0x04
++ // offset: N/A
++ // msk: N/A
++ // value: N/A
++
++/*---------------------------------------------*/
++//3 The value of base: 4 bits
++/*---------------------------------------------*/
++ // define the base address of each block
++#define PWR_BASEADDR_MAC 0x00
++#define PWR_BASEADDR_USB 0x01
++#define PWR_BASEADDR_PCIE 0x02
++#define PWR_BASEADDR_SDIO 0x03
++
++/*---------------------------------------------*/
++//3 The value of interface_msk: 4 bits
++/*---------------------------------------------*/
++#define PWR_INTF_SDIO_MSK BIT(0)
++#define PWR_INTF_USB_MSK BIT(1)
++#define PWR_INTF_PCI_MSK BIT(2)
++#define PWR_INTF_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
++
++/*---------------------------------------------*/
++//3 The value of fab_msk: 4 bits
++/*---------------------------------------------*/
++#define PWR_FAB_TSMC_MSK BIT(0)
++#define PWR_FAB_UMC_MSK BIT(1)
++#define PWR_FAB_ALL_MSK (BIT(0)|BIT(1)|BIT(2)|BIT(3))
++
++/*---------------------------------------------*/
++//3 The value of cut_msk: 8 bits
++/*---------------------------------------------*/
++#define PWR_CUT_TESTCHIP_MSK BIT(0)
++#define PWR_CUT_A_MSK BIT(1)
++#define PWR_CUT_B_MSK BIT(2)
++#define PWR_CUT_C_MSK BIT(3)
++#define PWR_CUT_D_MSK BIT(4)
++#define PWR_CUT_E_MSK BIT(5)
++#define PWR_CUT_F_MSK BIT(6)
++#define PWR_CUT_G_MSK BIT(7)
++#define PWR_CUT_ALL_MSK 0xFF
++
++
++typedef enum _PWRSEQ_CMD_DELAY_UNIT_
++{
++ PWRSEQ_DELAY_US,
++ PWRSEQ_DELAY_MS,
++} PWRSEQ_DELAY_UNIT;
++
++typedef struct _WL_PWR_CFG_
++{
++ u16 offset;
++ u8 cut_msk;
++ u8 fab_msk:4;
++ u8 interface_msk:4;
++ u8 base:4;
++ u8 cmd:4;
++ u8 msk;
++ u8 value;
++} WLAN_PWR_CFG, *PWLAN_PWR_CFG;
++
++
++#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset
++#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk
++#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk
++#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk
++#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base
++#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd
++#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk
++#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value
++
++
++//================================================================================
++// Prototype of protected function.
++//================================================================================
++u8 HalPwrSeqCmdParsing(
++ PADAPTER padapter,
++ u8 CutVersion,
++ u8 FabVersion,
++ u8 InterfaceType,
++ WLAN_PWR_CFG PwrCfgCmd[]);
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,476 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __IEEE80211_EXT_H
++#define __IEEE80211_EXT_H
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <drv_types.h>
++
++#define WMM_OUI_TYPE 2
++#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
++#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
++#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
++#define WMM_VERSION 1
++
++#define WPA_PROTO_WPA BIT(0)
++#define WPA_PROTO_RSN BIT(1)
++
++#define WPA_KEY_MGMT_IEEE8021X BIT(0)
++#define WPA_KEY_MGMT_PSK BIT(1)
++#define WPA_KEY_MGMT_NONE BIT(2)
++#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
++#define WPA_KEY_MGMT_WPA_NONE BIT(4)
++
++
++#define WPA_CAPABILITY_PREAUTH BIT(0)
++#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
++#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
++
++
++#define PMKID_LEN 16
++
++
++#ifdef PLATFORM_LINUX
++struct wpa_ie_hdr {
++ u8 elem_id;
++ u8 len;
++ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
++ u8 version[2]; /* little endian */
++}__attribute__ ((packed));
++
++struct rsn_ie_hdr {
++ u8 elem_id; /* WLAN_EID_RSN */
++ u8 len;
++ u8 version[2]; /* little endian */
++}__attribute__ ((packed));
++
++struct wme_ac_parameter {
++#if defined(CONFIG_LITTLE_ENDIAN)
++ /* byte 1 */
++ u8 aifsn:4,
++ acm:1,
++ aci:2,
++ reserved:1;
++
++ /* byte 2 */
++ u8 eCWmin:4,
++ eCWmax:4;
++#elif defined(CONFIG_BIG_ENDIAN)
++ /* byte 1 */
++ u8 reserved:1,
++ aci:2,
++ acm:1,
++ aifsn:4;
++
++ /* byte 2 */
++ u8 eCWmax:4,
++ eCWmin:4;
++#else
++#error "Please fix <endian.h>"
++#endif
++
++ /* bytes 3 & 4 */
++ u16 txopLimit;
++} __attribute__ ((packed));
++
++struct wme_parameter_element {
++ /* required fields for WME version 1 */
++ u8 oui[3];
++ u8 oui_type;
++ u8 oui_subtype;
++ u8 version;
++ u8 acInfo;
++ u8 reserved;
++ struct wme_ac_parameter ac[4];
++
++} __attribute__ ((packed));
++
++#endif
++
++#ifdef PLATFORM_WINDOWS
++
++#pragma pack(1)
++
++struct wpa_ie_hdr {
++ u8 elem_id;
++ u8 len;
++ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
++ u8 version[2]; /* little endian */
++};
++
++struct rsn_ie_hdr {
++ u8 elem_id; /* WLAN_EID_RSN */
++ u8 len;
++ u8 version[2]; /* little endian */
++};
++
++#pragma pack()
++
++#endif
++
++#define WPA_PUT_LE16(a, val) \
++ do { \
++ (a)[1] = ((u16) (val)) >> 8; \
++ (a)[0] = ((u16) (val)) & 0xff; \
++ } while (0)
++
++#define WPA_PUT_BE32(a, val) \
++ do { \
++ (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
++ (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
++ (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
++ (a)[3] = (u8) (((u32) (val)) & 0xff); \
++ } while (0)
++
++#define WPA_PUT_LE32(a, val) \
++ do { \
++ (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \
++ (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \
++ (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \
++ (a)[0] = (u8) (((u32) (val)) & 0xff); \
++ } while (0)
++
++#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val))
++//#define RSN_SELECTOR_PUT(a, val) WPA_PUT_LE32((u8 *) (a), (val))
++
++
++
++/* Action category code */
++enum ieee80211_category {
++ WLAN_CATEGORY_SPECTRUM_MGMT = 0,
++ WLAN_CATEGORY_QOS = 1,
++ WLAN_CATEGORY_DLS = 2,
++ WLAN_CATEGORY_BACK = 3,
++ WLAN_CATEGORY_HT = 7,
++ WLAN_CATEGORY_WMM = 17,
++};
++
++/* SPECTRUM_MGMT action code */
++enum ieee80211_spectrum_mgmt_actioncode {
++ WLAN_ACTION_SPCT_MSR_REQ = 0,
++ WLAN_ACTION_SPCT_MSR_RPRT = 1,
++ WLAN_ACTION_SPCT_TPC_REQ = 2,
++ WLAN_ACTION_SPCT_TPC_RPRT = 3,
++ WLAN_ACTION_SPCT_CHL_SWITCH = 4,
++ WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
++};
++
++/* BACK action code */
++enum ieee80211_back_actioncode {
++ WLAN_ACTION_ADDBA_REQ = 0,
++ WLAN_ACTION_ADDBA_RESP = 1,
++ WLAN_ACTION_DELBA = 2,
++};
++
++/* HT features action code */
++enum ieee80211_ht_actioncode {
++ WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
++ WLAN_ACTION_SM_PS = 1,
++ WLAN_ACTION_PSPM = 2,
++ WLAN_ACTION_PCO_PHASE = 3,
++ WLAN_ACTION_MIMO_CSI_MX = 4,
++ WLAN_ACTION_MIMO_NONCP_BF = 5,
++ WLAN_ACTION_MIMP_CP_BF = 6,
++ WLAN_ACTION_ASEL_INDICATES_FB = 7,
++ WLAN_ACTION_HI_INFO_EXCHG = 8,
++};
++
++/* BACK (block-ack) parties */
++enum ieee80211_back_parties {
++ WLAN_BACK_RECIPIENT = 0,
++ WLAN_BACK_INITIATOR = 1,
++ WLAN_BACK_TIMER = 2,
++};
++
++#ifdef PLATFORM_LINUX
++
++struct ieee80211_mgmt {
++ u16 frame_control;
++ u16 duration;
++ u8 da[6];
++ u8 sa[6];
++ u8 bssid[6];
++ u16 seq_ctrl;
++ union {
++ struct {
++ u16 auth_alg;
++ u16 auth_transaction;
++ u16 status_code;
++ /* possibly followed by Challenge text */
++ u8 variable[0];
++ } __attribute__ ((packed)) auth;
++ struct {
++ u16 reason_code;
++ } __attribute__ ((packed)) deauth;
++ struct {
++ u16 capab_info;
++ u16 listen_interval;
++ /* followed by SSID and Supported rates */
++ u8 variable[0];
++ } __attribute__ ((packed)) assoc_req;
++ struct {
++ u16 capab_info;
++ u16 status_code;
++ u16 aid;
++ /* followed by Supported rates */
++ u8 variable[0];
++ } __attribute__ ((packed)) assoc_resp, reassoc_resp;
++ struct {
++ u16 capab_info;
++ u16 listen_interval;
++ u8 current_ap[6];
++ /* followed by SSID and Supported rates */
++ u8 variable[0];
++ } __attribute__ ((packed)) reassoc_req;
++ struct {
++ u16 reason_code;
++ } __attribute__ ((packed)) disassoc;
++ struct {
++ __le64 timestamp;
++ u16 beacon_int;
++ u16 capab_info;
++ /* followed by some of SSID, Supported rates,
++ * FH Params, DS Params, CF Params, IBSS Params, TIM */
++ u8 variable[0];
++ } __attribute__ ((packed)) beacon;
++ struct {
++ /* only variable items: SSID, Supported rates */
++ u8 variable[0];
++ } __attribute__ ((packed)) probe_req;
++ struct {
++ __le64 timestamp;
++ u16 beacon_int;
++ u16 capab_info;
++ /* followed by some of SSID, Supported rates,
++ * FH Params, DS Params, CF Params, IBSS Params */
++ u8 variable[0];
++ } __attribute__ ((packed)) probe_resp;
++ struct {
++ u8 category;
++ union {
++ struct {
++ u8 action_code;
++ u8 dialog_token;
++ u8 status_code;
++ u8 variable[0];
++ } __attribute__ ((packed)) wme_action;
++#if 0
++ struct{
++ u8 action_code;
++ u8 element_id;
++ u8 length;
++ struct ieee80211_channel_sw_ie sw_elem;
++ } __attribute__ ((packed)) chan_switch;
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u8 element_id;
++ u8 length;
++ struct ieee80211_msrment_ie msr_elem;
++ } __attribute__ ((packed)) measurement;
++#endif
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u16 capab;
++ u16 timeout;
++ u16 start_seq_num;
++ } __attribute__ ((packed)) addba_req;
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u16 status;
++ u16 capab;
++ u16 timeout;
++ } __attribute__ ((packed)) addba_resp;
++ struct{
++ u8 action_code;
++ u16 params;
++ u16 reason_code;
++ } __attribute__ ((packed)) delba;
++ struct{
++ u8 action_code;
++ /* capab_info for open and confirm,
++ * reason for close
++ */
++ u16 aux;
++ /* Followed in plink_confirm by status
++ * code, AID and supported rates,
++ * and directly by supported rates in
++ * plink_open and plink_close
++ */
++ u8 variable[0];
++ } __attribute__ ((packed)) plink_action;
++ struct{
++ u8 action_code;
++ u8 variable[0];
++ } __attribute__ ((packed)) mesh_action;
++ } __attribute__ ((packed)) u;
++ } __attribute__ ((packed)) action;
++ } __attribute__ ((packed)) u;
++}__attribute__ ((packed));
++
++#endif
++
++
++#ifdef PLATFORM_WINDOWS
++
++#pragma pack(1)
++
++struct ieee80211_mgmt {
++ u16 frame_control;
++ u16 duration;
++ u8 da[6];
++ u8 sa[6];
++ u8 bssid[6];
++ u16 seq_ctrl;
++ union {
++ struct {
++ u16 auth_alg;
++ u16 auth_transaction;
++ u16 status_code;
++ /* possibly followed by Challenge text */
++ u8 variable[0];
++ } auth;
++ struct {
++ u16 reason_code;
++ } deauth;
++ struct {
++ u16 capab_info;
++ u16 listen_interval;
++ /* followed by SSID and Supported rates */
++ u8 variable[0];
++ } assoc_req;
++ struct {
++ u16 capab_info;
++ u16 status_code;
++ u16 aid;
++ /* followed by Supported rates */
++ u8 variable[0];
++ } assoc_resp, reassoc_resp;
++ struct {
++ u16 capab_info;
++ u16 listen_interval;
++ u8 current_ap[6];
++ /* followed by SSID and Supported rates */
++ u8 variable[0];
++ } reassoc_req;
++ struct {
++ u16 reason_code;
++ } disassoc;
++#if 0
++ struct {
++ __le64 timestamp;
++ u16 beacon_int;
++ u16 capab_info;
++ /* followed by some of SSID, Supported rates,
++ * FH Params, DS Params, CF Params, IBSS Params, TIM */
++ u8 variable[0];
++ } beacon;
++ struct {
++ /* only variable items: SSID, Supported rates */
++ u8 variable[0];
++ } probe_req;
++
++ struct {
++ __le64 timestamp;
++ u16 beacon_int;
++ u16 capab_info;
++ /* followed by some of SSID, Supported rates,
++ * FH Params, DS Params, CF Params, IBSS Params */
++ u8 variable[0];
++ } probe_resp;
++#endif
++ struct {
++ u8 category;
++ union {
++ struct {
++ u8 action_code;
++ u8 dialog_token;
++ u8 status_code;
++ u8 variable[0];
++ } wme_action;
++/*
++ struct{
++ u8 action_code;
++ u8 element_id;
++ u8 length;
++ struct ieee80211_channel_sw_ie sw_elem;
++ } chan_switch;
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u8 element_id;
++ u8 length;
++ struct ieee80211_msrment_ie msr_elem;
++ } measurement;
++*/
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u16 capab;
++ u16 timeout;
++ u16 start_seq_num;
++ } addba_req;
++ struct{
++ u8 action_code;
++ u8 dialog_token;
++ u16 status;
++ u16 capab;
++ u16 timeout;
++ } addba_resp;
++ struct{
++ u8 action_code;
++ u16 params;
++ u16 reason_code;
++ } delba;
++ struct{
++ u8 action_code;
++ /* capab_info for open and confirm,
++ * reason for close
++ */
++ u16 aux;
++ /* Followed in plink_confirm by status
++ * code, AID and supported rates,
++ * and directly by supported rates in
++ * plink_open and plink_close
++ */
++ u8 variable[0];
++ } plink_action;
++ struct{
++ u8 action_code;
++ u8 variable[0];
++ } mesh_action;
++ } u;
++ } action;
++ } u;
++} ;
++
++#pragma pack()
++
++#endif
++
++/* mgmt header + 1 byte category code */
++#define IEEE80211_MIN_ACTION_SIZE FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
++
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ieee80211.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ieee80211.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1579 @@
+/******************************************************************************
+ *
@@ -176827,489 +179141,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ieee80211.h linux-r
+const char *action_public_str(u8 action);
+
+#endif /* IEEE80211_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ieee80211_ext.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,476 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __IEEE80211_EXT_H
-+#define __IEEE80211_EXT_H
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <drv_types.h>
-+
-+#define WMM_OUI_TYPE 2
-+#define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
-+#define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
-+#define WMM_OUI_SUBTYPE_TSPEC_ELEMENT 2
-+#define WMM_VERSION 1
-+
-+#define WPA_PROTO_WPA BIT(0)
-+#define WPA_PROTO_RSN BIT(1)
-+
-+#define WPA_KEY_MGMT_IEEE8021X BIT(0)
-+#define WPA_KEY_MGMT_PSK BIT(1)
-+#define WPA_KEY_MGMT_NONE BIT(2)
-+#define WPA_KEY_MGMT_IEEE8021X_NO_WPA BIT(3)
-+#define WPA_KEY_MGMT_WPA_NONE BIT(4)
-+
-+
-+#define WPA_CAPABILITY_PREAUTH BIT(0)
-+#define WPA_CAPABILITY_MGMT_FRAME_PROTECTION BIT(6)
-+#define WPA_CAPABILITY_PEERKEY_ENABLED BIT(9)
-+
-+
-+#define PMKID_LEN 16
-+
-+
-+#ifdef PLATFORM_LINUX
-+struct wpa_ie_hdr {
-+ u8 elem_id;
-+ u8 len;
-+ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
-+ u8 version[2]; /* little endian */
-+}__attribute__ ((packed));
-+
-+struct rsn_ie_hdr {
-+ u8 elem_id; /* WLAN_EID_RSN */
-+ u8 len;
-+ u8 version[2]; /* little endian */
-+}__attribute__ ((packed));
-+
-+struct wme_ac_parameter {
-+#if defined(CONFIG_LITTLE_ENDIAN)
-+ /* byte 1 */
-+ u8 aifsn:4,
-+ acm:1,
-+ aci:2,
-+ reserved:1;
-+
-+ /* byte 2 */
-+ u8 eCWmin:4,
-+ eCWmax:4;
-+#elif defined(CONFIG_BIG_ENDIAN)
-+ /* byte 1 */
-+ u8 reserved:1,
-+ aci:2,
-+ acm:1,
-+ aifsn:4;
-+
-+ /* byte 2 */
-+ u8 eCWmax:4,
-+ eCWmin:4;
-+#else
-+#error "Please fix <endian.h>"
-+#endif
-+
-+ /* bytes 3 & 4 */
-+ u16 txopLimit;
-+} __attribute__ ((packed));
-+
-+struct wme_parameter_element {
-+ /* required fields for WME version 1 */
-+ u8 oui[3];
-+ u8 oui_type;
-+ u8 oui_subtype;
-+ u8 version;
-+ u8 acInfo;
-+ u8 reserved;
-+ struct wme_ac_parameter ac[4];
-+
-+} __attribute__ ((packed));
-+
-+#endif
-+
-+#ifdef PLATFORM_WINDOWS
-+
-+#pragma pack(1)
-+
-+struct wpa_ie_hdr {
-+ u8 elem_id;
-+ u8 len;
-+ u8 oui[4]; /* 24-bit OUI followed by 8-bit OUI type */
-+ u8 version[2]; /* little endian */
-+};
-+
-+struct rsn_ie_hdr {
-+ u8 elem_id; /* WLAN_EID_RSN */
-+ u8 len;
-+ u8 version[2]; /* little endian */
-+};
-+
-+#pragma pack()
-+
-+#endif
-+
-+#define WPA_PUT_LE16(a, val) \
-+ do { \
-+ (a)[1] = ((u16) (val)) >> 8; \
-+ (a)[0] = ((u16) (val)) & 0xff; \
-+ } while (0)
-+
-+#define WPA_PUT_BE32(a, val) \
-+ do { \
-+ (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff); \
-+ (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff); \
-+ (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff); \
-+ (a)[3] = (u8) (((u32) (val)) & 0xff); \
-+ } while (0)
-+
-+#define WPA_PUT_LE32(a, val) \
-+ do { \
-+ (a)[3] = (u8) ((((u32) (val)) >> 24) & 0xff); \
-+ (a)[2] = (u8) ((((u32) (val)) >> 16) & 0xff); \
-+ (a)[1] = (u8) ((((u32) (val)) >> 8) & 0xff); \
-+ (a)[0] = (u8) (((u32) (val)) & 0xff); \
-+ } while (0)
-+
-+#define RSN_SELECTOR_PUT(a, val) WPA_PUT_BE32((u8 *) (a), (val))
-+//#define RSN_SELECTOR_PUT(a, val) WPA_PUT_LE32((u8 *) (a), (val))
-+
-+
-+
-+/* Action category code */
-+enum ieee80211_category {
-+ WLAN_CATEGORY_SPECTRUM_MGMT = 0,
-+ WLAN_CATEGORY_QOS = 1,
-+ WLAN_CATEGORY_DLS = 2,
-+ WLAN_CATEGORY_BACK = 3,
-+ WLAN_CATEGORY_HT = 7,
-+ WLAN_CATEGORY_WMM = 17,
-+};
-+
-+/* SPECTRUM_MGMT action code */
-+enum ieee80211_spectrum_mgmt_actioncode {
-+ WLAN_ACTION_SPCT_MSR_REQ = 0,
-+ WLAN_ACTION_SPCT_MSR_RPRT = 1,
-+ WLAN_ACTION_SPCT_TPC_REQ = 2,
-+ WLAN_ACTION_SPCT_TPC_RPRT = 3,
-+ WLAN_ACTION_SPCT_CHL_SWITCH = 4,
-+ WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
-+};
-+
-+/* BACK action code */
-+enum ieee80211_back_actioncode {
-+ WLAN_ACTION_ADDBA_REQ = 0,
-+ WLAN_ACTION_ADDBA_RESP = 1,
-+ WLAN_ACTION_DELBA = 2,
-+};
-+
-+/* HT features action code */
-+enum ieee80211_ht_actioncode {
-+ WLAN_ACTION_NOTIFY_CH_WIDTH = 0,
-+ WLAN_ACTION_SM_PS = 1,
-+ WLAN_ACTION_PSPM = 2,
-+ WLAN_ACTION_PCO_PHASE = 3,
-+ WLAN_ACTION_MIMO_CSI_MX = 4,
-+ WLAN_ACTION_MIMO_NONCP_BF = 5,
-+ WLAN_ACTION_MIMP_CP_BF = 6,
-+ WLAN_ACTION_ASEL_INDICATES_FB = 7,
-+ WLAN_ACTION_HI_INFO_EXCHG = 8,
-+};
-+
-+/* BACK (block-ack) parties */
-+enum ieee80211_back_parties {
-+ WLAN_BACK_RECIPIENT = 0,
-+ WLAN_BACK_INITIATOR = 1,
-+ WLAN_BACK_TIMER = 2,
-+};
-+
-+#ifdef PLATFORM_LINUX
-+
-+struct ieee80211_mgmt {
-+ u16 frame_control;
-+ u16 duration;
-+ u8 da[6];
-+ u8 sa[6];
-+ u8 bssid[6];
-+ u16 seq_ctrl;
-+ union {
-+ struct {
-+ u16 auth_alg;
-+ u16 auth_transaction;
-+ u16 status_code;
-+ /* possibly followed by Challenge text */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) auth;
-+ struct {
-+ u16 reason_code;
-+ } __attribute__ ((packed)) deauth;
-+ struct {
-+ u16 capab_info;
-+ u16 listen_interval;
-+ /* followed by SSID and Supported rates */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) assoc_req;
-+ struct {
-+ u16 capab_info;
-+ u16 status_code;
-+ u16 aid;
-+ /* followed by Supported rates */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) assoc_resp, reassoc_resp;
-+ struct {
-+ u16 capab_info;
-+ u16 listen_interval;
-+ u8 current_ap[6];
-+ /* followed by SSID and Supported rates */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) reassoc_req;
-+ struct {
-+ u16 reason_code;
-+ } __attribute__ ((packed)) disassoc;
-+ struct {
-+ __le64 timestamp;
-+ u16 beacon_int;
-+ u16 capab_info;
-+ /* followed by some of SSID, Supported rates,
-+ * FH Params, DS Params, CF Params, IBSS Params, TIM */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) beacon;
-+ struct {
-+ /* only variable items: SSID, Supported rates */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) probe_req;
-+ struct {
-+ __le64 timestamp;
-+ u16 beacon_int;
-+ u16 capab_info;
-+ /* followed by some of SSID, Supported rates,
-+ * FH Params, DS Params, CF Params, IBSS Params */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) probe_resp;
-+ struct {
-+ u8 category;
-+ union {
-+ struct {
-+ u8 action_code;
-+ u8 dialog_token;
-+ u8 status_code;
-+ u8 variable[0];
-+ } __attribute__ ((packed)) wme_action;
-+#if 0
-+ struct{
-+ u8 action_code;
-+ u8 element_id;
-+ u8 length;
-+ struct ieee80211_channel_sw_ie sw_elem;
-+ } __attribute__ ((packed)) chan_switch;
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u8 element_id;
-+ u8 length;
-+ struct ieee80211_msrment_ie msr_elem;
-+ } __attribute__ ((packed)) measurement;
-+#endif
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u16 capab;
-+ u16 timeout;
-+ u16 start_seq_num;
-+ } __attribute__ ((packed)) addba_req;
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u16 status;
-+ u16 capab;
-+ u16 timeout;
-+ } __attribute__ ((packed)) addba_resp;
-+ struct{
-+ u8 action_code;
-+ u16 params;
-+ u16 reason_code;
-+ } __attribute__ ((packed)) delba;
-+ struct{
-+ u8 action_code;
-+ /* capab_info for open and confirm,
-+ * reason for close
-+ */
-+ u16 aux;
-+ /* Followed in plink_confirm by status
-+ * code, AID and supported rates,
-+ * and directly by supported rates in
-+ * plink_open and plink_close
-+ */
-+ u8 variable[0];
-+ } __attribute__ ((packed)) plink_action;
-+ struct{
-+ u8 action_code;
-+ u8 variable[0];
-+ } __attribute__ ((packed)) mesh_action;
-+ } __attribute__ ((packed)) u;
-+ } __attribute__ ((packed)) action;
-+ } __attribute__ ((packed)) u;
-+}__attribute__ ((packed));
-+
-+#endif
-+
-+
-+#ifdef PLATFORM_WINDOWS
-+
-+#pragma pack(1)
-+
-+struct ieee80211_mgmt {
-+ u16 frame_control;
-+ u16 duration;
-+ u8 da[6];
-+ u8 sa[6];
-+ u8 bssid[6];
-+ u16 seq_ctrl;
-+ union {
-+ struct {
-+ u16 auth_alg;
-+ u16 auth_transaction;
-+ u16 status_code;
-+ /* possibly followed by Challenge text */
-+ u8 variable[0];
-+ } auth;
-+ struct {
-+ u16 reason_code;
-+ } deauth;
-+ struct {
-+ u16 capab_info;
-+ u16 listen_interval;
-+ /* followed by SSID and Supported rates */
-+ u8 variable[0];
-+ } assoc_req;
-+ struct {
-+ u16 capab_info;
-+ u16 status_code;
-+ u16 aid;
-+ /* followed by Supported rates */
-+ u8 variable[0];
-+ } assoc_resp, reassoc_resp;
-+ struct {
-+ u16 capab_info;
-+ u16 listen_interval;
-+ u8 current_ap[6];
-+ /* followed by SSID and Supported rates */
-+ u8 variable[0];
-+ } reassoc_req;
-+ struct {
-+ u16 reason_code;
-+ } disassoc;
-+#if 0
-+ struct {
-+ __le64 timestamp;
-+ u16 beacon_int;
-+ u16 capab_info;
-+ /* followed by some of SSID, Supported rates,
-+ * FH Params, DS Params, CF Params, IBSS Params, TIM */
-+ u8 variable[0];
-+ } beacon;
-+ struct {
-+ /* only variable items: SSID, Supported rates */
-+ u8 variable[0];
-+ } probe_req;
-+
-+ struct {
-+ __le64 timestamp;
-+ u16 beacon_int;
-+ u16 capab_info;
-+ /* followed by some of SSID, Supported rates,
-+ * FH Params, DS Params, CF Params, IBSS Params */
-+ u8 variable[0];
-+ } probe_resp;
-+#endif
-+ struct {
-+ u8 category;
-+ union {
-+ struct {
-+ u8 action_code;
-+ u8 dialog_token;
-+ u8 status_code;
-+ u8 variable[0];
-+ } wme_action;
-+/*
-+ struct{
-+ u8 action_code;
-+ u8 element_id;
-+ u8 length;
-+ struct ieee80211_channel_sw_ie sw_elem;
-+ } chan_switch;
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u8 element_id;
-+ u8 length;
-+ struct ieee80211_msrment_ie msr_elem;
-+ } measurement;
-+*/
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u16 capab;
-+ u16 timeout;
-+ u16 start_seq_num;
-+ } addba_req;
-+ struct{
-+ u8 action_code;
-+ u8 dialog_token;
-+ u16 status;
-+ u16 capab;
-+ u16 timeout;
-+ } addba_resp;
-+ struct{
-+ u8 action_code;
-+ u16 params;
-+ u16 reason_code;
-+ } delba;
-+ struct{
-+ u8 action_code;
-+ /* capab_info for open and confirm,
-+ * reason for close
-+ */
-+ u16 aux;
-+ /* Followed in plink_confirm by status
-+ * code, AID and supported rates,
-+ * and directly by supported rates in
-+ * plink_open and plink_close
-+ */
-+ u8 variable[0];
-+ } plink_action;
-+ struct{
-+ u8 action_code;
-+ u8 variable[0];
-+ } mesh_action;
-+ } u;
-+ } action;
-+ } u;
-+} ;
-+
-+#pragma pack()
-+
-+#endif
-+
-+/* mgmt header + 1 byte category code */
-+#define IEEE80211_MIN_ACTION_SIZE FIELD_OFFSET(struct ieee80211_mgmt, u.action.u)
-+
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/if_ether.h linux-rpi/drivers/net/wireless/rtl8192cu/include/if_ether.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/if_ether.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/if_ether.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/if_ether.h linux-rpi/drivers/net/wireless/rtl8192cu/include/if_ether.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/if_ether.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/if_ether.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,112 @@
+/******************************************************************************
+ *
@@ -177423,9 +179257,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/if_ether.h linux-rp
+
+
+#endif /* _LINUX_IF_ETHER_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,179 @@
+/******************************************************************************
+ *
@@ -177606,9 +179440,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ioctl_cfg80211.h li
+#endif
+
+#endif //__IOCTL_CFG80211_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ip.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ip.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ip.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ip.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ip.h linux-rpi/drivers/net/wireless/rtl8192cu/include/ip.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/ip.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/ip.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,141 @@
+/******************************************************************************
+ *
@@ -177751,9 +179585,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/ip.h linux-rpi/driv
+};
+
+#endif /* _LINUX_IP_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/linux/wireless.h linux-rpi/drivers/net/wireless/rtl8192cu/include/linux/wireless.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/linux/wireless.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/linux/wireless.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/linux/wireless.h linux-rpi/drivers/net/wireless/rtl8192cu/include/linux/wireless.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/linux/wireless.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/linux/wireless.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,90 @@
+/******************************************************************************
+ *
@@ -177845,9 +179679,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/linux/wireless.h li
+};
+
+#endif /* _LINUX_WIRELESS_H */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,39 @@
+/******************************************************************************
+ *
@@ -177888,9 +179722,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mlme_osdep.h linux-
+void rtw_reset_securitypriv( _adapter *adapter );
+
+#endif //_MLME_OSDEP_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h linux-rpi/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h linux-rpi/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,353 @@
+/******************************************************************************
+ *
@@ -178245,9 +180079,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/mp_custom_oid.h lin
+#define OID_RT_PRO_EFUSE_MAP 0xFF871217 //Q, S
+
+#endif //#ifndef __CUSTOM_OID_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/nic_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/nic_spec.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/nic_spec.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/nic_spec.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/nic_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/nic_spec.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/nic_spec.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/nic_spec.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,46 @@
+/******************************************************************************
+ *
@@ -178295,9 +180129,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/nic_spec.h linux-rp
+
+
+#endif // __RTL8711_SPEC_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,170 @@
+/******************************************************************************
+ *
@@ -178469,9 +180303,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_ce_service.h
+ NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \
+}
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_intf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_intf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_intf.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_intf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_intf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_intf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_intf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,154 @@
+/******************************************************************************
+ *
@@ -178627,9 +180461,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_intf.h linux-
+void rtw_ndev_destructor(_nic_hdl ndev);
+
+#endif //_OSDEP_INTF_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_service.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_service.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_service.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_service.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_service.h linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_service.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/osdep_service.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/osdep_service.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1813 @@
+/******************************************************************************
+ *
@@ -180444,9 +182278,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/osdep_service.h lin
+void rtw_cbuf_free(struct rtw_cbuf *cbuf);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_hal.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_hal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_hal.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_hal.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_hal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_hal.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,167 @@
+/******************************************************************************
+ *
@@ -180615,9 +182449,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_hal.h linux-rpi
+#endif
+
+#endif //__PCIE_HAL_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_ops.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_ops.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_ops.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_ops.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_ops.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_ops.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_ops.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_ops.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,60 @@
+/******************************************************************************
+ *
@@ -180679,9 +182513,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_ops.h linux-rpi
+#endif
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_osintf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_osintf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_osintf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_osintf.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_osintf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_osintf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/pci_osintf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/pci_osintf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,32 @@
+/******************************************************************************
+ *
@@ -180715,9 +182549,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/pci_osintf.h linux-
+
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/recv_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/recv_osdep.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/recv_osdep.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/recv_osdep.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/recv_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/recv_osdep.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/recv_osdep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/recv_osdep.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,57 @@
+/******************************************************************************
+ *
@@ -180776,9 +182610,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/recv_osdep.h linux-
+
+
+#endif //
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,152 @@
+/******************************************************************************
+ *
@@ -180932,9 +182766,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_cmd.h linu
+#endif // CONFIG_WOWLAN
+
+#endif // __RTL8192C_CMD_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,515 @@
+/******************************************************************************
+ *
@@ -181451,9 +183285,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_dm.h linux
+#endif
+
+#endif //__HAL8190PCIDM_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,26 @@
+/******************************************************************************
+ *
@@ -181481,9 +183315,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_event.h li
+
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,934 @@
+/******************************************************************************
+ *
@@ -182419,9 +184253,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_hal.h linu
+extern void Hal_SetOFDMContinuousTx(PADAPTER pAdapter, u8 bStart);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,41 @@
+/******************************************************************************
+ *
@@ -182464,9 +184298,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_led.h linu
+#endif
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,183 @@
+/******************************************************************************
+ *
@@ -182651,9 +184485,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_recv.h lin
+void rtl8192c_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,91 @@
+/******************************************************************************
+ *
@@ -182746,9 +184580,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_rf.h linux
+
+
+#endif/* End of HalRf.h */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1864 @@
+/******************************************************************************
+ *
@@ -184614,9 +186448,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_spec.h lin
+#include "basic_types.h"
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,32 @@
+/******************************************************************************
+ *
@@ -184650,9 +186484,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_sreset.h l
+extern void rtl8192c_sreset_linked_status_check(_adapter *padapter);
+#endif
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,128 @@
+/******************************************************************************
+ *
@@ -184782,9 +186616,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192c_xmit.h lin
+#endif
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,140 @@
+/******************************************************************************
+ *
@@ -184926,9 +186760,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_cmd.h linu
+#endif // CONFIG_WOWLAN
+
+#endif // __RTL8192D_CMD_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,420 @@
+/******************************************************************************
+ *
@@ -185350,9 +187184,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_dm.h linux
+VOID rtl8192d_dm_CheckTXPowerTracking(IN PADAPTER Adapter);
+
+#endif //__HAL8190PCIDM_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1125 @@
+/******************************************************************************
+ *
@@ -186479,9 +188313,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_hal.h linu
+
+
+#endif //end CONFIG_MP_INCLUDED
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,42 @@
+/******************************************************************************
+ *
@@ -186525,9 +188359,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_led.h linu
+#endif
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,186 @@
+/******************************************************************************
+ *
@@ -186715,9 +188549,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_recv.h lin
+void rtl8192d_query_rx_desc_status(union recv_frame *precvframe, struct recv_stat *pdesc);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,96 @@
+/******************************************************************************
+ *
@@ -186815,9 +188649,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_rf.h linux
+
+
+#endif/* End of HalRf.h */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1840 @@
+/******************************************************************************
+ *
@@ -188659,9 +190493,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_spec.h lin
+#include "basic_types.h"
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,144 @@
+/******************************************************************************
+ *
@@ -188807,9 +190641,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtl8192d_xmit.h lin
+
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_android.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_android.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_android.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_android.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_android.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_android.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_android.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_android.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,89 @@
+/******************************************************************************
+ *
@@ -188900,9 +190734,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_android.h linux
+#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
+
+#endif //__RTW_ANDROID_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ap.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ap.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ap.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ap.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ap.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ap.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ap.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ap.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,63 @@
+/******************************************************************************
+ *
@@ -188967,9 +190801,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ap.h linux-rpi/
+#endif //end of CONFIG_AP_MODE
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,75 @@
+/******************************************************************************
+ *
@@ -189046,9 +190880,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_br_ext.h linux-
+void nat25_db_cleanup(_adapter *priv);
+
+#endif // _RTW_BR_EXT_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,39 @@
+/******************************************************************************
+ *
@@ -189089,9 +190923,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_byteorder.h lin
+#endif
+
+#endif /* _RTL871X_BYTEORDER_H_ */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1166 @@
+/******************************************************************************
+ *
@@ -190259,9 +192093,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_cmd.h linux-rpi
+#endif
+
+#endif // _CMD_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_debug.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_debug.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_debug.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_debug.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_debug.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_debug.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_debug.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,537 @@
+/******************************************************************************
+ *
@@ -190800,9 +192634,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_debug.h linux-r
+#endif //CONFIG_PROC_DEBUG
+
+#endif //__RTW_DEBUG_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,152 @@
+/******************************************************************************
+ *
@@ -190956,9 +192790,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_eeprom.h linux-
+#endif //PLATFORM_LINUX
+
+#endif //__RTL871X_EEPROM_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,123 @@
+/******************************************************************************
+ *
@@ -191083,9 +192917,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_efuse.h linux-r
+void EFUSE_ShadowRead(PADAPTER pAdapter, u8 Type, u16 Offset, u32 *Value);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_event.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_event.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_event.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_event.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_event.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_event.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_event.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_event.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,153 @@
+/******************************************************************************
+ *
@@ -191240,9 +193074,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_event.h linux-r
+
+
+#endif // _WLANEVENT_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ht.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ht.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ht.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ht.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ht.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ht.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ht.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,49 @@
+/******************************************************************************
+ *
@@ -191293,9 +193127,489 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ht.h linux-rpi/
+};
+
+#endif //_RTL871X_HT_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_io.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_io.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_io.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_io.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,268 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _RTW_IOCTL_H_
++#define _RTW_IOCTL_H_
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <drv_types.h>
++
++#ifndef OID_802_11_CAPABILITY
++ #define OID_802_11_CAPABILITY 0x0d010122
++#endif
++
++#ifndef OID_802_11_PMKID
++ #define OID_802_11_PMKID 0x0d010123
++#endif
++
++
++// For DDK-defined OIDs
++#define OID_NDIS_SEG1 0x00010100
++#define OID_NDIS_SEG2 0x00010200
++#define OID_NDIS_SEG3 0x00020100
++#define OID_NDIS_SEG4 0x01010100
++#define OID_NDIS_SEG5 0x01020100
++#define OID_NDIS_SEG6 0x01020200
++#define OID_NDIS_SEG7 0xFD010100
++#define OID_NDIS_SEG8 0x0D010100
++#define OID_NDIS_SEG9 0x0D010200
++#define OID_NDIS_SEG10 0x0D020200
++
++#define SZ_OID_NDIS_SEG1 23
++#define SZ_OID_NDIS_SEG2 3
++#define SZ_OID_NDIS_SEG3 6
++#define SZ_OID_NDIS_SEG4 6
++#define SZ_OID_NDIS_SEG5 4
++#define SZ_OID_NDIS_SEG6 8
++#define SZ_OID_NDIS_SEG7 7
++#define SZ_OID_NDIS_SEG8 36
++#define SZ_OID_NDIS_SEG9 24
++#define SZ_OID_NDIS_SEG10 19
++
++// For Realtek-defined OIDs
++#define OID_MP_SEG1 0xFF871100
++#define OID_MP_SEG2 0xFF818000
++
++#define OID_MP_SEG3 0xFF818700
++#define OID_MP_SEG4 0xFF011100
++
++#define DEBUG_OID(dbg, str) \
++ if((!dbg)) \
++ { \
++ RT_TRACE(_module_rtl871x_ioctl_c_,_drv_info_,("%s(%d): %s", __FUNCTION__, __LINE__, str)); \
++ }
++
++
++enum oid_type
++{
++ QUERY_OID,
++ SET_OID
++};
++
++struct oid_funs_node {
++ unsigned int oid_start; //the starting number for OID
++ unsigned int oid_end; //the ending number for OID
++ struct oid_obj_priv *node_array;
++ unsigned int array_sz; //the size of node_array
++ int query_counter; //count the number of query hits for this segment
++ int set_counter; //count the number of set hits for this segment
++};
++
++struct oid_par_priv
++{
++ void *adapter_context;
++ NDIS_OID oid;
++ void *information_buf;
++ u32 information_buf_len;
++ u32 *bytes_rw;
++ u32 *bytes_needed;
++ enum oid_type type_of_oid;
++ u32 dbg;
++};
++
++struct oid_obj_priv {
++ unsigned char dbg; // 0: without OID debug message 1: with OID debug message
++ NDIS_STATUS (*oidfuns)(struct oid_par_priv *poid_par_priv);
++};
++
++#if (defined(CONFIG_MP_INCLUDED) && defined(_RTW_MP_IOCTL_C_)) || \
++ (defined(PLATFORM_WINDOWS) && defined(_RTW_IOCTL_RTL_C_))
++static NDIS_STATUS oid_null_function(struct oid_par_priv* poid_par_priv)
++{
++ _func_enter_;
++ _func_exit_;
++ return NDIS_STATUS_SUCCESS;
++}
++#endif
++
++#ifdef PLATFORM_WINDOWS
++
++int TranslateNdisPsToRtPs(IN NDIS_802_11_POWER_MODE ndisPsMode);
++
++//OID Handler for Segment 1
++NDIS_STATUS oid_gen_supported_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_hardware_status_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_media_supported_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_media_in_use_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_maximum_lookahead_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_maximum_frame_size_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_link_speed_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_transmit_buffer_space_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_receive_buffer_space_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_transmit_block_size_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_receive_block_size_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_vendor_id_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_vendor_description_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_current_packet_filter_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_current_lookahead_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_driver_version_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_maximum_total_size_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_protocol_options_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_mac_options_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_media_connect_status_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_maximum_send_packets_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_vendor_driver_version_hdl(struct oid_par_priv* poid_par_priv);
++
++
++//OID Handler for Segment 2
++NDIS_STATUS oid_gen_physical_medium_hdl(struct oid_par_priv* poid_par_priv);
++
++//OID Handler for Segment 3
++NDIS_STATUS oid_gen_xmit_ok_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_rcv_ok_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_xmit_error_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_rcv_error_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_gen_rcv_no_buffer_hdl(struct oid_par_priv* poid_par_priv);
++
++
++//OID Handler for Segment 4
++NDIS_STATUS oid_802_3_permanent_address_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_current_address_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_multicast_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_maximum_list_size_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_mac_options_hdl(struct oid_par_priv* poid_par_priv);
++
++
++
++//OID Handler for Segment 5
++NDIS_STATUS oid_802_3_rcv_error_alignment_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_one_collision_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_more_collisions_hdl(struct oid_par_priv* poid_par_priv);
++
++
++//OID Handler for Segment 6
++NDIS_STATUS oid_802_3_xmit_deferred_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_max_collisions_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_rcv_overrun_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_underrun_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_heartbeat_failure_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_times_crs_lost_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_3_xmit_late_collisions_hdl(struct oid_par_priv* poid_par_priv);
++
++
++
++//OID Handler for Segment 7
++NDIS_STATUS oid_pnp_capabilities_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_set_power_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_query_power_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_add_wake_up_pattern_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_remove_wake_up_pattern_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_wake_up_pattern_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_pnp_enable_wake_up_hdl(struct oid_par_priv* poid_par_priv);
++
++
++
++//OID Handler for Segment 8
++NDIS_STATUS oid_802_11_bssid_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_ssid_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_infrastructure_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_add_wep_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_remove_wep_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_disassociate_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_authentication_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_privacy_filter_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_bssid_list_scan_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_encryption_status_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_reload_defaults_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_add_key_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_remove_key_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_association_information_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_test_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_media_stream_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_capability_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_pmkid_hdl(struct oid_par_priv* poid_par_priv);
++
++
++
++
++
++//OID Handler for Segment 9
++NDIS_STATUS oid_802_11_network_types_supported_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_network_type_in_use_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_tx_power_level_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_rssi_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_rssi_trigger_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_fragmentation_threshold_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_rts_threshold_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_number_of_antennas_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_rx_antenna_selected_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_tx_antenna_selected_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_supported_rates_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_desired_rates_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_configuration_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_power_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_802_11_bssid_list_hdl(struct oid_par_priv* poid_par_priv);
++
++
++//OID Handler for Segment 10
++NDIS_STATUS oid_802_11_statistics_hdl(struct oid_par_priv* poid_par_priv);
++
++
++//OID Handler for Segment ED
++NDIS_STATUS oid_rt_mh_vender_id_hdl(struct oid_par_priv* poid_par_priv);
++
++void Set_802_3_MULTICAST_LIST(ADAPTER *pAdapter, UCHAR *MCListbuf, ULONG MCListlen, BOOLEAN bAcceptAllMulticast);
++
++#endif// end of PLATFORM_WINDOWS
++
++
++#if defined(PLATFORM_LINUX) && defined(CONFIG_WIRELESS_EXT)
++extern struct iw_handler_def rtw_handlers_def;
++#endif
++
++extern NDIS_STATUS drv_query_info(
++ IN _nic_hdl MiniportAdapterContext,
++ IN NDIS_OID Oid,
++ IN void * InformationBuffer,
++ IN u32 InformationBufferLength,
++ OUT u32* BytesWritten,
++ OUT u32* BytesNeeded
++ );
++
++extern NDIS_STATUS drv_set_info(
++ IN _nic_hdl MiniportAdapterContext,
++ IN NDIS_OID Oid,
++ IN void * InformationBuffer,
++ IN u32 InformationBufferLength,
++ OUT u32* BytesRead,
++ OUT u32* BytesNeeded
++ );
++
++#endif // #ifndef __INC_CEINFO_
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,35 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _RTW_IOCTL_QUERY_H_
++#define _RTW_IOCTL_QUERY_H_
++
++#include <drv_conf.h>
++#include <drv_types.h>
++
++
++#ifdef PLATFORM_WINDOWS
++
++u8 query_802_11_capability(_adapter* padapter,u8* pucBuf,u32 * pulOutLen);
++u8 query_802_11_association_information (_adapter * padapter, PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo);
++
++#endif
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,83 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef _RTW_IOCTL_RTL_H_
++#define _RTW_IOCTL_RTL_H_
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <drv_types.h>
++
++//************** oid_rtl_seg_01_01 **************
++NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv* poid_par_priv);//84
++NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv* poid_par_priv);
++
++NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv* poid_par_priv); //8a
++NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv* poid_par_priv); //8b
++
++NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv* poid_par_priv);//93
++NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv);
++
++//************** oid_rtl_seg_01_03 section start **************
++NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv);
++
++// oid_rtl_seg_01_11
++NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv);
++
++//************** oid_rtl_seg_03_00 section start **************
++NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv);
++NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv);
++
++
++
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,78 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __RTW_IOCTL_SET_H_
++#define __RTW_IOCTL_SET_H_
++
++#include <drv_conf.h>
++#include <drv_types.h>
++
++
++typedef u8 NDIS_802_11_PMKID_VALUE[16];
++
++typedef struct _BSSIDInfo {
++ NDIS_802_11_MAC_ADDRESS BSSID;
++ NDIS_802_11_PMKID_VALUE PMKID;
++} BSSIDInfo, *PBSSIDInfo;
++
++
++#ifdef PLATFORM_OS_XP
++typedef struct _NDIS_802_11_PMKID {
++ u32 Length;
++ u32 BSSIDInfoCount;
++ BSSIDInfo BSSIDInfo[1];
++} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
++#endif
++
++
++#ifdef PLATFORM_WINDOWS
++u8 rtw_set_802_11_reload_defaults(_adapter * padapter, NDIS_802_11_RELOAD_DEFAULTS reloadDefaults);
++u8 rtw_set_802_11_test(_adapter * padapter, NDIS_802_11_TEST * test);
++u8 rtw_set_802_11_pmkid(_adapter *pdapter, NDIS_802_11_PMKID *pmkid);
++
++u8 rtw_pnp_set_power_sleep(_adapter* padapter);
++u8 rtw_pnp_set_power_wakeup(_adapter* padapter);
++
++void rtw_pnp_resume_wk(void *context);
++void rtw_pnp_sleep_wk(void * context);
++
++#endif
++
++u8 rtw_set_802_11_add_key(_adapter * padapter, NDIS_802_11_KEY * key);
++u8 rtw_set_802_11_authentication_mode(_adapter *pdapter, NDIS_802_11_AUTHENTICATION_MODE authmode);
++u8 rtw_set_802_11_bssid(_adapter* padapter, u8 *bssid);
++u8 rtw_set_802_11_add_wep(_adapter * padapter, NDIS_802_11_WEP * wep);
++u8 rtw_set_802_11_disassociate(_adapter * padapter);
++u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
++u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
++u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex);
++u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid);
++u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid);
++u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key);
++
++u8 rtw_validate_bssid(u8 *bssid);
++u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid);
++
++u16 rtw_get_cur_max_rate(_adapter *adapter);
++int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
++int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
++int rtw_set_country(_adapter *adapter, const char *country_code);
++int rtw_set_band(_adapter *adapter, enum _BAND band);
++
++#endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_io.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_io.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_io.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_io.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,504 @@
+/******************************************************************************
+ *
@@ -191801,489 +194115,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_io.h linux-rpi/
+*/
+
+#endif //_RTL8711_IO_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,268 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _RTW_IOCTL_H_
-+#define _RTW_IOCTL_H_
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <drv_types.h>
-+
-+#ifndef OID_802_11_CAPABILITY
-+ #define OID_802_11_CAPABILITY 0x0d010122
-+#endif
-+
-+#ifndef OID_802_11_PMKID
-+ #define OID_802_11_PMKID 0x0d010123
-+#endif
-+
-+
-+// For DDK-defined OIDs
-+#define OID_NDIS_SEG1 0x00010100
-+#define OID_NDIS_SEG2 0x00010200
-+#define OID_NDIS_SEG3 0x00020100
-+#define OID_NDIS_SEG4 0x01010100
-+#define OID_NDIS_SEG5 0x01020100
-+#define OID_NDIS_SEG6 0x01020200
-+#define OID_NDIS_SEG7 0xFD010100
-+#define OID_NDIS_SEG8 0x0D010100
-+#define OID_NDIS_SEG9 0x0D010200
-+#define OID_NDIS_SEG10 0x0D020200
-+
-+#define SZ_OID_NDIS_SEG1 23
-+#define SZ_OID_NDIS_SEG2 3
-+#define SZ_OID_NDIS_SEG3 6
-+#define SZ_OID_NDIS_SEG4 6
-+#define SZ_OID_NDIS_SEG5 4
-+#define SZ_OID_NDIS_SEG6 8
-+#define SZ_OID_NDIS_SEG7 7
-+#define SZ_OID_NDIS_SEG8 36
-+#define SZ_OID_NDIS_SEG9 24
-+#define SZ_OID_NDIS_SEG10 19
-+
-+// For Realtek-defined OIDs
-+#define OID_MP_SEG1 0xFF871100
-+#define OID_MP_SEG2 0xFF818000
-+
-+#define OID_MP_SEG3 0xFF818700
-+#define OID_MP_SEG4 0xFF011100
-+
-+#define DEBUG_OID(dbg, str) \
-+ if((!dbg)) \
-+ { \
-+ RT_TRACE(_module_rtl871x_ioctl_c_,_drv_info_,("%s(%d): %s", __FUNCTION__, __LINE__, str)); \
-+ }
-+
-+
-+enum oid_type
-+{
-+ QUERY_OID,
-+ SET_OID
-+};
-+
-+struct oid_funs_node {
-+ unsigned int oid_start; //the starting number for OID
-+ unsigned int oid_end; //the ending number for OID
-+ struct oid_obj_priv *node_array;
-+ unsigned int array_sz; //the size of node_array
-+ int query_counter; //count the number of query hits for this segment
-+ int set_counter; //count the number of set hits for this segment
-+};
-+
-+struct oid_par_priv
-+{
-+ void *adapter_context;
-+ NDIS_OID oid;
-+ void *information_buf;
-+ u32 information_buf_len;
-+ u32 *bytes_rw;
-+ u32 *bytes_needed;
-+ enum oid_type type_of_oid;
-+ u32 dbg;
-+};
-+
-+struct oid_obj_priv {
-+ unsigned char dbg; // 0: without OID debug message 1: with OID debug message
-+ NDIS_STATUS (*oidfuns)(struct oid_par_priv *poid_par_priv);
-+};
-+
-+#if (defined(CONFIG_MP_INCLUDED) && defined(_RTW_MP_IOCTL_C_)) || \
-+ (defined(PLATFORM_WINDOWS) && defined(_RTW_IOCTL_RTL_C_))
-+static NDIS_STATUS oid_null_function(struct oid_par_priv* poid_par_priv)
-+{
-+ _func_enter_;
-+ _func_exit_;
-+ return NDIS_STATUS_SUCCESS;
-+}
-+#endif
-+
-+#ifdef PLATFORM_WINDOWS
-+
-+int TranslateNdisPsToRtPs(IN NDIS_802_11_POWER_MODE ndisPsMode);
-+
-+//OID Handler for Segment 1
-+NDIS_STATUS oid_gen_supported_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_hardware_status_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_media_supported_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_media_in_use_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_maximum_lookahead_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_maximum_frame_size_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_link_speed_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_transmit_buffer_space_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_receive_buffer_space_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_transmit_block_size_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_receive_block_size_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_vendor_id_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_vendor_description_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_current_packet_filter_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_current_lookahead_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_driver_version_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_maximum_total_size_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_protocol_options_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_mac_options_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_media_connect_status_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_maximum_send_packets_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_vendor_driver_version_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+//OID Handler for Segment 2
-+NDIS_STATUS oid_gen_physical_medium_hdl(struct oid_par_priv* poid_par_priv);
-+
-+//OID Handler for Segment 3
-+NDIS_STATUS oid_gen_xmit_ok_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_rcv_ok_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_xmit_error_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_rcv_error_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_gen_rcv_no_buffer_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+//OID Handler for Segment 4
-+NDIS_STATUS oid_802_3_permanent_address_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_current_address_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_multicast_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_maximum_list_size_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_mac_options_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+
-+//OID Handler for Segment 5
-+NDIS_STATUS oid_802_3_rcv_error_alignment_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_one_collision_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_more_collisions_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+//OID Handler for Segment 6
-+NDIS_STATUS oid_802_3_xmit_deferred_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_max_collisions_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_rcv_overrun_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_underrun_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_heartbeat_failure_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_times_crs_lost_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_3_xmit_late_collisions_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+
-+//OID Handler for Segment 7
-+NDIS_STATUS oid_pnp_capabilities_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_set_power_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_query_power_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_add_wake_up_pattern_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_remove_wake_up_pattern_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_wake_up_pattern_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_pnp_enable_wake_up_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+
-+//OID Handler for Segment 8
-+NDIS_STATUS oid_802_11_bssid_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_ssid_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_infrastructure_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_add_wep_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_remove_wep_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_disassociate_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_authentication_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_privacy_filter_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_bssid_list_scan_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_encryption_status_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_reload_defaults_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_add_key_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_remove_key_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_association_information_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_test_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_media_stream_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_capability_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_pmkid_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+
-+
-+
-+//OID Handler for Segment 9
-+NDIS_STATUS oid_802_11_network_types_supported_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_network_type_in_use_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_tx_power_level_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_rssi_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_rssi_trigger_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_fragmentation_threshold_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_rts_threshold_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_number_of_antennas_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_rx_antenna_selected_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_tx_antenna_selected_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_supported_rates_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_desired_rates_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_configuration_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_power_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_802_11_bssid_list_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+//OID Handler for Segment 10
-+NDIS_STATUS oid_802_11_statistics_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+//OID Handler for Segment ED
-+NDIS_STATUS oid_rt_mh_vender_id_hdl(struct oid_par_priv* poid_par_priv);
-+
-+void Set_802_3_MULTICAST_LIST(ADAPTER *pAdapter, UCHAR *MCListbuf, ULONG MCListlen, BOOLEAN bAcceptAllMulticast);
-+
-+#endif// end of PLATFORM_WINDOWS
-+
-+
-+#if defined(PLATFORM_LINUX) && defined(CONFIG_WIRELESS_EXT)
-+extern struct iw_handler_def rtw_handlers_def;
-+#endif
-+
-+extern NDIS_STATUS drv_query_info(
-+ IN _nic_hdl MiniportAdapterContext,
-+ IN NDIS_OID Oid,
-+ IN void * InformationBuffer,
-+ IN u32 InformationBufferLength,
-+ OUT u32* BytesWritten,
-+ OUT u32* BytesNeeded
-+ );
-+
-+extern NDIS_STATUS drv_set_info(
-+ IN _nic_hdl MiniportAdapterContext,
-+ IN NDIS_OID Oid,
-+ IN void * InformationBuffer,
-+ IN u32 InformationBufferLength,
-+ OUT u32* BytesRead,
-+ OUT u32* BytesNeeded
-+ );
-+
-+#endif // #ifndef __INC_CEINFO_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_query.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,35 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _RTW_IOCTL_QUERY_H_
-+#define _RTW_IOCTL_QUERY_H_
-+
-+#include <drv_conf.h>
-+#include <drv_types.h>
-+
-+
-+#ifdef PLATFORM_WINDOWS
-+
-+u8 query_802_11_capability(_adapter* padapter,u8* pucBuf,u32 * pulOutLen);
-+u8 query_802_11_association_information (_adapter * padapter, PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo);
-+
-+#endif
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_rtl.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,83 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef _RTW_IOCTL_RTL_H_
-+#define _RTW_IOCTL_RTL_H_
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <drv_types.h>
-+
-+//************** oid_rtl_seg_01_01 **************
-+NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv* poid_par_priv);//84
-+NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv* poid_par_priv);
-+
-+NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv* poid_par_priv); //8a
-+NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv* poid_par_priv); //8b
-+
-+NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv* poid_par_priv);//93
-+NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv* poid_par_priv);
-+
-+//************** oid_rtl_seg_01_03 section start **************
-+NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv* poid_par_priv);
-+
-+// oid_rtl_seg_01_11
-+NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv* poid_par_priv);
-+
-+//************** oid_rtl_seg_03_00 section start **************
-+NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv* poid_par_priv);
-+NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv* poid_par_priv);
-+
-+
-+
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_ioctl_set.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,78 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __RTW_IOCTL_SET_H_
-+#define __RTW_IOCTL_SET_H_
-+
-+#include <drv_conf.h>
-+#include <drv_types.h>
-+
-+
-+typedef u8 NDIS_802_11_PMKID_VALUE[16];
-+
-+typedef struct _BSSIDInfo {
-+ NDIS_802_11_MAC_ADDRESS BSSID;
-+ NDIS_802_11_PMKID_VALUE PMKID;
-+} BSSIDInfo, *PBSSIDInfo;
-+
-+
-+#ifdef PLATFORM_OS_XP
-+typedef struct _NDIS_802_11_PMKID {
-+ u32 Length;
-+ u32 BSSIDInfoCount;
-+ BSSIDInfo BSSIDInfo[1];
-+} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
-+#endif
-+
-+
-+#ifdef PLATFORM_WINDOWS
-+u8 rtw_set_802_11_reload_defaults(_adapter * padapter, NDIS_802_11_RELOAD_DEFAULTS reloadDefaults);
-+u8 rtw_set_802_11_test(_adapter * padapter, NDIS_802_11_TEST * test);
-+u8 rtw_set_802_11_pmkid(_adapter *pdapter, NDIS_802_11_PMKID *pmkid);
-+
-+u8 rtw_pnp_set_power_sleep(_adapter* padapter);
-+u8 rtw_pnp_set_power_wakeup(_adapter* padapter);
-+
-+void rtw_pnp_resume_wk(void *context);
-+void rtw_pnp_sleep_wk(void * context);
-+
-+#endif
-+
-+u8 rtw_set_802_11_add_key(_adapter * padapter, NDIS_802_11_KEY * key);
-+u8 rtw_set_802_11_authentication_mode(_adapter *pdapter, NDIS_802_11_AUTHENTICATION_MODE authmode);
-+u8 rtw_set_802_11_bssid(_adapter* padapter, u8 *bssid);
-+u8 rtw_set_802_11_add_wep(_adapter * padapter, NDIS_802_11_WEP * wep);
-+u8 rtw_set_802_11_disassociate(_adapter * padapter);
-+u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter, NDIS_802_11_SSID *pssid, int ssid_max_num);
-+u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype);
-+u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex);
-+u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid);
-+u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid);
-+u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key);
-+
-+u8 rtw_validate_bssid(u8 *bssid);
-+u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid);
-+
-+u16 rtw_get_cur_max_rate(_adapter *adapter);
-+int rtw_set_scan_mode(_adapter *adapter, RT_SCAN_TYPE scan_mode);
-+int rtw_set_channel_plan(_adapter *adapter, u8 channel_plan);
-+int rtw_set_country(_adapter *adapter, const char *country_code);
-+int rtw_set_band(_adapter *adapter, enum _BAND band);
-+
-+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_iol.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_iol.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_iol.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_iol.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_iol.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_iol.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_iol.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_iol.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,89 @@
+/******************************************************************************
+ *
@@ -192374,9 +194208,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_iol.h linux-rpi
+bool rtw_IOL_applied(ADAPTER *adapter);
+
+#endif //__RTW_IOL_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_led.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_led.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_led.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_led.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_led.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_led.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_led.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,216 @@
+/******************************************************************************
+ *
@@ -192594,856 +194428,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_led.h linux-rpi
+extern void BlinkHandler(PLED_871x pLed);
+
+#endif //__RTW_LED_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h 2015-08-26 10:26:08.761316441 +0200
-@@ -0,0 +1,843 @@
-+/******************************************************************************
-+ *
-+ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-+ *
-+ * This program is free software; you can redistribute it and/or modify it
-+ * under the terms of version 2 of the GNU General Public License as
-+ * published by the Free Software Foundation.
-+ *
-+ * This program is distributed in the hope that it will be useful, but WITHOUT
-+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-+ * more details.
-+ *
-+ * You should have received a copy of the GNU General Public License along with
-+ * this program; if not, write to the Free Software Foundation, Inc.,
-+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
-+ *
-+ *
-+ ******************************************************************************/
-+#ifndef __RTW_MLME_H_
-+#define __RTW_MLME_H_
-+
-+#include <drv_conf.h>
-+#include <osdep_service.h>
-+#include <mlme_osdep.h>
-+#include <drv_types.h>
-+#include <wlan_bssdef.h>
-+
-+#ifdef CONFIG_INTEL_WIDI
-+#include <rtw_intel_widi.h>
-+#endif
-+
-+#define MAX_BSS_CNT 128
-+//#define MAX_JOIN_TIMEOUT 2000
-+//#define MAX_JOIN_TIMEOUT 2500
-+#define MAX_JOIN_TIMEOUT 6500
-+
-+// Commented by Albert 20101105
-+// Increase the scanning timeout because of increasing the SURVEY_TO value.
-+
-+#define SCANNING_TIMEOUT 8000
-+
-+#define SCAN_INTERVAL (30) // unit:2sec, 30*2=60sec
-+
-+#ifdef PALTFORM_OS_WINCE
-+#define SCANQUEUE_LIFETIME 12000000 // unit:us
-+#else
-+#define SCANQUEUE_LIFETIME 20 // unit:sec
-+#endif
-+
-+#define WIFI_NULL_STATE 0x00000000
-+
-+#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
-+#define WIFI_REASOC_STATE 0x00000002
-+#define WIFI_SLEEP_STATE 0x00000004
-+#define WIFI_STATION_STATE 0x00000008
-+
-+#define WIFI_AP_STATE 0x00000010
-+#define WIFI_ADHOC_STATE 0x00000020
-+#define WIFI_ADHOC_MASTER_STATE 0x00000040
-+#define WIFI_UNDER_LINKING 0x00000080
-+
-+#define WIFI_UNDER_WPS 0x00000100
-+//#define WIFI_UNDER_CMD 0x00000200
-+//#define WIFI_UNDER_P2P 0x00000400
-+#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
-+#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
-+
-+#ifdef WDS
-+#define WIFI_WDS 0x00001000
-+#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
-+#endif
-+#ifdef AUTO_CONFIG
-+#define WIFI_AUTOCONF 0x00004000
-+#define WIFI_AUTOCONF_IND 0x00008000
-+#endif
-+
-+/*
-+// ========== P2P Section Start ===============
-+#define WIFI_P2P_LISTEN_STATE 0x00010000
-+#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
-+// ========== P2P Section End ===============
-+*/
-+
-+//#ifdef UNDER_MPTEST
-+#define WIFI_MP_STATE 0x00010000
-+#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
-+#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
-+#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 // pending in continous tx background due to out of skb
-+#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
-+#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
-+#define WIFI_MP_LPBK_STATE 0x00400000
-+//#endif
-+
-+//#define _FW_UNDER_CMD WIFI_UNDER_CMD
-+#define _FW_UNDER_LINKING WIFI_UNDER_LINKING
-+#define _FW_LINKED WIFI_ASOC_STATE
-+#define _FW_UNDER_SURVEY WIFI_SITE_MONITOR
-+
-+
-+enum dot11AuthAlgrthmNum {
-+ dot11AuthAlgrthm_Open = 0,
-+ dot11AuthAlgrthm_Shared,
-+ dot11AuthAlgrthm_8021X,
-+ dot11AuthAlgrthm_Auto,
-+ dot11AuthAlgrthm_MaxNum
-+};
-+
-+// Scan type including active and passive scan.
-+typedef enum _RT_SCAN_TYPE
-+{
-+ SCAN_PASSIVE,
-+ SCAN_ACTIVE,
-+ SCAN_MIX,
-+}RT_SCAN_TYPE, *PRT_SCAN_TYPE;
-+
-+enum DriverInterface {
-+ DRIVER_WEXT = 1,
-+ DRIVER_CFG80211 = 2
-+};
-+
-+enum _BAND
-+{
-+ GHZ24_50 = 0,
-+ GHZ_50,
-+ GHZ_24,
-+ GHZ_MAX,
-+};
-+
-+#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
-+
-+enum SCAN_RESULT_TYPE
-+{
-+ SCAN_RESULT_P2P_ONLY = 0, // Will return all the P2P devices.
-+ SCAN_RESULT_ALL = 1, // Will return all the scanned device, include AP.
-+ SCAN_RESULT_WFD_TYPE = 2 // Will just return the correct WFD device.
-+ // If this device is Miracast sink device, it will just return all the Miracast source devices.
-+};
-+
-+/*
-+
-+there are several "locks" in mlme_priv,
-+since mlme_priv is a shared resource between many threads,
-+like ISR/Call-Back functions, the OID handlers, and even timer functions.
-+
-+
-+Each _queue has its own locks, already.
-+Other items are protected by mlme_priv.lock.
-+
-+To avoid possible dead lock, any thread trying to modifiying mlme_priv
-+SHALL not lock up more than one locks at a time!
-+
-+*/
-+
-+
-+#define traffic_threshold 10
-+#define traffic_scan_period 500
-+
-+struct sitesurvey_ctrl {
-+ u64 last_tx_pkts;
-+ uint last_rx_pkts;
-+ sint traffic_busy;
-+ _timer sitesurvey_ctrl_timer;
-+};
-+
-+typedef struct _RT_LINK_DETECT_T{
-+ u32 NumTxOkInPeriod;
-+ u32 NumRxOkInPeriod;
-+ u32 NumRxUnicastOkInPeriod;
-+ BOOLEAN bBusyTraffic;
-+ BOOLEAN bTxBusyTraffic;
-+ BOOLEAN bRxBusyTraffic;
-+ BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose.
-+ BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic.
-+ BOOLEAN bHigherBusyTxTraffic; // We may disable Tx interrupt according as Tx traffic.
-+}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
-+
-+struct profile_info {
-+ u8 ssidlen;
-+ u8 ssid[ WLAN_SSID_MAXLEN ];
-+ u8 peermac[ ETH_ALEN ];
-+};
-+
-+struct tx_invite_req_info{
-+ u8 token;
-+ u8 benable;
-+ u8 go_ssid[ WLAN_SSID_MAXLEN ];
-+ u8 ssidlen;
-+ u8 go_bssid[ ETH_ALEN ];
-+ u8 peer_macaddr[ ETH_ALEN ];
-+ u8 operating_ch; // This information will be set by using the p2p_set op_ch=x
-+ u8 peer_ch; // The listen channel for peer P2P device
-+
-+};
-+
-+struct tx_invite_resp_info{
-+ u8 token; // Used to record the dialog token of p2p invitation request frame.
-+};
-+
-+#ifdef CONFIG_WFD
-+
-+struct wifi_display_info{
-+ u16 wfd_enable; // Eanble/Disable the WFD function.
-+ u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
-+ u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
-+ // This filed should be filled when receiving the gropu negotiation request
-+
-+ u8 peer_session_avail; // WFD session is available or not for the peer wfd device.
-+ // This variable will be set when sending the provisioning discovery request to peer WFD device.
-+ // And this variable will be reset when it is read by using the iwpriv p2p_get wfd_sa command.
-+
-+ u8 ip_address[4];
-+ u8 peer_ip_address[4];
-+ u8 wfd_pc; // WFD preferred connection
-+ // 0 -> Prefer to use the P2P for WFD connection on peer side.
-+ // 1 -> Prefer to use the TDLS for WFD connection on peer side.
-+
-+ u8 wfd_device_type; // WFD Device Type
-+ // 0 -> WFD Source Device
-+ // 1 -> WFD Primary Sink Device
-+ enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
-+};
-+#endif //CONFIG_WFD
-+
-+struct tx_provdisc_req_info{
-+ u16 wps_config_method_request; // Used when sending the provisioning request frame
-+ u16 peer_channel_num[2]; // The channel number which the receiver stands.
-+ NDIS_802_11_SSID ssid;
-+ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
-+ u8 peerIFAddr[ ETH_ALEN ]; // Peer interface address
-+ u8 benable; // This provision discovery request frame is trigger to send or not
-+};
-+
-+struct rx_provdisc_req_info{ //When peer device issue prov_disc_req first, we should store the following informations
-+ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
-+ u8 strconfig_method_desc_of_prov_disc_req[4]; // description for the config method located in the provisioning discovery request frame.
-+ // The UI must know this information to know which config method the remote p2p device is requiring.
-+};
-+
-+struct tx_nego_req_info{
-+ u16 peer_channel_num[2]; // The channel number which the receiver stands.
-+ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
-+ u8 benable; // This negoitation request frame is trigger to send or not
-+};
-+
-+struct group_id_info{
-+ u8 go_device_addr[ ETH_ALEN ]; // The GO's device address of this P2P group
-+ u8 ssid[ WLAN_SSID_MAXLEN ]; // The SSID of this P2P group
-+};
-+
-+struct scan_limit_info{
-+ u8 scan_op_ch_only; // When this flag is set, the driver should just scan the operation channel
-+#ifndef P2P_OP_CHECK_SOCIAL_CH
-+ u8 operation_ch[2]; // Store the operation channel of invitation request frame
-+#else
-+ u8 operation_ch[5]; // Store additional channel 1,6,11 for Android 4.2 IOT & Nexus 4
-+#endif //P2P_OP_CHECK_SOCIAL_CH
-+};
-+
-+#ifdef CONFIG_IOCTL_CFG80211
-+struct cfg80211_wifidirect_info{
-+ _timer remain_on_ch_timer;
-+ u8 restore_channel;
-+ struct ieee80211_channel remain_on_ch_channel;
-+ enum nl80211_channel_type remain_on_ch_type;
-+ u64 remain_on_ch_cookie;
-+ bool is_ro_ch;
-+};
-+#endif //CONFIG_IOCTL_CFG80211
-+
-+struct wifidirect_info{
-+ _adapter* padapter;
-+ _timer find_phase_timer;
-+ _timer restore_p2p_state_timer;
-+
-+ // Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer.
-+ _timer pre_tx_scan_timer;
-+ _timer reset_ch_sitesurvey;
-+ _timer reset_ch_sitesurvey2; // Just for resetting the scan limit function by using p2p nego
-+#ifdef CONFIG_CONCURRENT_MODE
-+ // Used to switch the channel between legacy AP and listen state.
-+ _timer ap_p2p_switch_timer;
-+#endif
-+ struct tx_provdisc_req_info tx_prov_disc_info;
-+ struct rx_provdisc_req_info rx_prov_disc_info;
-+ struct tx_invite_req_info invitereq_info;
-+ struct profile_info profileinfo[ P2P_MAX_PERSISTENT_GROUP_NUM ]; // Store the profile information of persistent group
-+ struct tx_invite_resp_info inviteresp_info;
-+ struct tx_nego_req_info nego_req_info;
-+ struct group_id_info groupid_info; // Store the group id information when doing the group negotiation handshake.
-+ struct scan_limit_info rx_invitereq_info; // Used for get the limit scan channel from the Invitation procedure
-+ struct scan_limit_info p2p_info; // Used for get the limit scan channel from the P2P negotiation handshake
-+#ifdef CONFIG_WFD
-+ struct wifi_display_info *wfd_info;
-+#endif
-+ enum P2P_ROLE role;
-+ enum P2P_STATE pre_p2p_state;
-+ enum P2P_STATE p2p_state;
-+ u8 device_addr[ETH_ALEN]; // The device address should be the mac address of this device.
-+ u8 interface_addr[ETH_ALEN];
-+ u8 social_chan[4];
-+ u8 listen_channel;
-+ u8 operating_channel;
-+ u8 listen_dwell; // This value should be between 1 and 3
-+ u8 support_rate[8];
-+ u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
-+ u8 intent; // should only include the intent value.
-+ u8 p2p_peer_interface_addr[ ETH_ALEN ];
-+ u8 p2p_peer_device_addr[ ETH_ALEN ];
-+ u8 peer_intent; // Included the intent value and tie breaker value.
-+ u8 device_name[ WPS_MAX_DEVICE_NAME_LEN ]; // Device name for displaying on searching device screen
-+ u8 device_name_len;
-+ u8 profileindex; // Used to point to the index of profileinfo array
-+ u8 peer_operating_ch;
-+ u8 find_phase_state_exchange_cnt;
-+ u16 device_password_id_for_nego; // The device password ID for group negotation
-+ u8 negotiation_dialog_token;
-+ u8 nego_ssid[ WLAN_SSID_MAXLEN ]; // SSID information for group negotitation
-+ u8 nego_ssidlen;
-+ u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
-+ u8 p2p_group_ssid_len;
-+ u8 persistent_supported; // Flag to know the persistent function should be supported or not.
-+ // In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI.
-+ // 0: disable
-+ // 1: enable
-+ u8 session_available; // Flag to set the WFD session available to enable or disable "by Sigma"
-+ // In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI.
-+ // 0: disable
-+ // 1: enable
-+ u8 wfd_tdls_enable; // Flag to enable or disable the TDLS by WFD Sigma
-+ // 0: disable
-+ // 1: enable
-+ u8 wfd_tdls_weaksec; // Flag to enable or disable the weak security function for TDLS by WFD Sigma
-+ // 0: disable
-+ // In this case, the driver can't issue the tdsl setup request frame.
-+ // 1: enable
-+ // In this case, the driver can issue the tdls setup request frame
-+ // even the current security is weak security.
-+
-+ enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user.
-+ u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
-+ // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
-+ u8 external_uuid; // UUID flag
-+ u8 uuid[16]; // UUID
-+ uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame.
-+ u8 channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame.
-+ // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
-+ u8 driver_interface; // Indicate DRIVER_WEXT or DRIVER_CFG80211
-+
-+#ifdef CONFIG_CONCURRENT_MODE
-+ u16 ext_listen_interval; // The interval to be available with legacy AP (ms)
-+ u16 ext_listen_period; // The time period to be available for P2P listen state (ms)
-+#endif
-+#ifdef CONFIG_P2P_PS
-+ enum P2P_PS_MODE p2p_ps_mode; // indicate p2p ps mode
-+ enum P2P_PS_STATE p2p_ps_state; // indicate p2p ps state
-+ u8 noa_index; // Identifies and instance of Notice of Absence timing.
-+ u8 ctwindow; // Client traffic window. A period of time in TU after TBTT.
-+ u8 opp_ps; // opportunistic power save.
-+ u8 noa_num; // number of NoA descriptor in P2P IE.
-+ u8 noa_count[P2P_MAX_NOA_NUM]; // Count for owner, Type of client.
-+ u32 noa_duration[P2P_MAX_NOA_NUM]; // Max duration for owner, preferred or min acceptable duration for client.
-+ u32 noa_interval[P2P_MAX_NOA_NUM]; // Length of interval for owner, preferred or max acceptable interval of client.
-+ u32 noa_start_time[P2P_MAX_NOA_NUM]; // schedule expressed in terms of the lower 4 bytes of the TSF timer.
-+#endif // CONFIG_P2P_PS
-+};
-+
-+struct tdls_ss_record{ //signal strength record; recording the tdls sta with lowerest ss
-+ u8 macaddr[ETH_ALEN];
-+ u8 RxPWDBAll;
-+ u8 is_tdls_sta; // _TRUE: direct link sta, _FALSE: else
-+};
-+
-+struct tdls_info{
-+ u8 ap_prohibited;
-+ uint setup_state;
-+ u8 sta_cnt;
-+ u8 sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
-+ struct tdls_ss_record ss_record;
-+ u8 macid_index; //macid entry that is ready to write
-+ u8 clear_cam; //cam entry that is trying to clear, using it in direct link teardown
-+ u8 ch_sensing;
-+ u8 cur_channel;
-+ u8 candidate_ch;
-+ u8 collect_pkt_num[MAX_CHANNEL_NUM];
-+ _lock cmd_lock;
-+ _lock hdl_lock;
-+ u8 watchdog_count;
-+ u8 dev_discovered; //WFD_TDLS: for sigma test
-+ u8 enable;
-+#ifdef CONFIG_WFD
-+ struct wifi_display_info *wfd_info;
-+#endif
-+};
-+
-+struct mlme_priv {
-+
-+ _lock lock;
-+ sint fw_state; //shall we protect this variable? maybe not necessarily...
-+
-+ u8 to_join; //flag
-+ #ifdef CONFIG_LAYER2_ROAMING
-+ u8 to_roaming; // roaming trying times
-+ #endif
-+
-+ u8 *nic_hdl;
-+
-+ u8 not_indic_disco;
-+ _list *pscanned;
-+ _queue free_bss_pool;
-+ _queue scanned_queue;
-+ u8 *free_bss_buf;
-+ u32 num_of_scanned;
-+
-+ NDIS_802_11_SSID assoc_ssid;
-+ u8 assoc_bssid[6];
-+
-+ struct wlan_network cur_network;
-+
-+ //uint wireless_mode; no used, remove it
-+
-+ u32 scan_interval;
-+
-+ _timer assoc_timer;
-+
-+ uint assoc_by_bssid;
-+ uint assoc_by_rssi;
-+
-+ _timer scan_to_timer; // driver itself handles scan_timeout status.
-+ u32 scan_start_time; // used to evaluate the time spent in scanning
-+
-+ #ifdef CONFIG_SET_SCAN_DENY_TIMER
-+ _timer set_scan_deny_timer;
-+ ATOMIC_T set_scan_deny; //0: allowed, 1: deny
-+ #endif
-+
-+ struct qos_priv qospriv;
-+
-+#ifdef CONFIG_80211N_HT
-+
-+ /* Number of non-HT AP/stations */
-+ int num_sta_no_ht;
-+
-+ /* Number of HT AP/stations 20 MHz */
-+ //int num_sta_ht_20mhz;
-+
-+
-+ int num_FortyMHzIntolerant;
-+
-+ struct ht_priv htpriv;
-+
-+#endif
-+
-+ RT_LINK_DETECT_T LinkDetectInfo;
-+ _timer dynamic_chk_timer; //dynamic/periodic check timer
-+
-+ u8 acm_mask; // for wmm acm mask
-+ u8 ChannelPlan;
-+ RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
-+
-+ //u8 probereq_wpsie[MAX_WPS_IE_LEN];//added in probe req
-+ //int probereq_wpsie_len;
-+ u8 *wps_probe_req_ie;
-+ u32 wps_probe_req_ie_len;
-+
-+#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
-+ /* Number of associated Non-ERP stations (i.e., stations using 802.11b
-+ * in 802.11g BSS) */
-+ int num_sta_non_erp;
-+
-+ /* Number of associated stations that do not support Short Slot Time */
-+ int num_sta_no_short_slot_time;
-+
-+ /* Number of associated stations that do not support Short Preamble */
-+ int num_sta_no_short_preamble;
-+
-+ int olbc; /* Overlapping Legacy BSS Condition */
-+
-+ /* Number of HT associated stations that do not support greenfield */
-+ int num_sta_ht_no_gf;
-+
-+ /* Number of associated non-HT stations */
-+ //int num_sta_no_ht;
-+
-+ /* Number of HT associated stations 20 MHz */
-+ int num_sta_ht_20mhz;
-+
-+ /* Overlapping BSS information */
-+ int olbc_ht;
-+
-+#ifdef CONFIG_80211N_HT
-+ u16 ht_op_mode;
-+#endif /* CONFIG_80211N_HT */
-+
-+ u8 *assoc_req;
-+ u32 assoc_req_len;
-+ u8 *assoc_rsp;
-+ u32 assoc_rsp_len;
-+
-+ u8 *wps_beacon_ie;
-+ //u8 *wps_probe_req_ie;
-+ u8 *wps_probe_resp_ie;
-+ u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie / wfd ie
-+
-+ u32 wps_beacon_ie_len;
-+ //u32 wps_probe_req_ie_len;
-+ u32 wps_probe_resp_ie_len;
-+ u32 wps_assoc_resp_ie_len; // for CONFIG_IOCTL_CFG80211, this IE len could include p2p ie / wfd ie
-+
-+ u8 *p2p_beacon_ie;
-+ u8 *p2p_probe_req_ie;
-+ u8 *p2p_probe_resp_ie;
-+ u8 *p2p_go_probe_resp_ie; //for GO
-+ u8 *p2p_assoc_req_ie;
-+
-+ u32 p2p_beacon_ie_len;
-+ u32 p2p_probe_req_ie_len;
-+ u32 p2p_probe_resp_ie_len;
-+ u32 p2p_go_probe_resp_ie_len; //for GO
-+ u32 p2p_assoc_req_ie_len;
-+/*
-+#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
-+ //u8 *wps_p2p_beacon_ie;
-+ u8 *p2p_beacon_ie;
-+ u8 *wps_p2p_probe_resp_ie;
-+ u8 *wps_p2p_assoc_resp_ie;
-+ //u32 wps_p2p_beacon_ie_len;
-+ u32 p2p_beacon_ie_len;
-+ u32 wps_p2p_probe_resp_ie_len;
-+ u32 wps_p2p_assoc_resp_ie_len;
-+#endif
-+*/
-+
-+ _lock bcn_update_lock;
-+ u8 update_bcn;
-+
-+
-+#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
-+
-+#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
-+
-+ u8 *wfd_beacon_ie;
-+ u8 *wfd_probe_req_ie;
-+ u8 *wfd_probe_resp_ie;
-+ u8 *wfd_go_probe_resp_ie; //for GO
-+ u8 *wfd_assoc_req_ie;
-+
-+ u32 wfd_beacon_ie_len;
-+ u32 wfd_probe_req_ie_len;
-+ u32 wfd_probe_resp_ie_len;
-+ u32 wfd_go_probe_resp_ie_len; //for GO
-+ u32 wfd_assoc_req_ie_len;
-+
-+#endif
-+
-+#ifdef RTK_DMP_PLATFORM
-+ // DMP kobject_hotplug function signal need in passive level
-+ _workitem Linkup_workitem;
-+ _workitem Linkdown_workitem;
-+#endif
-+
-+#ifdef CONFIG_INTEL_WIDI
-+ int widi_state;
-+ int listen_state;
-+ _timer listen_timer;
-+ ATOMIC_T rx_probe_rsp; // 1:receive probe respone from RDS source.
-+ u8 *l2sdTaBuffer;
-+ u8 channel_idx;
-+ s8 group_cnt; //For WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed
-+ u8 sa_ext[L2SDTA_SERVICE_VE_LEN];
-+
-+ u8 widi_enable;
-+ /**
-+ * For WiDi 4; upper layer would set
-+ * p2p_primary_device_type_category_id
-+ * p2p_primary_device_type_sub_category_id
-+ * p2p_secondary_device_type_category_id
-+ * p2p_secondary_device_type_sub_category_id
-+ */
-+ u16 p2p_pdt_cid;
-+ u16 p2p_pdt_scid;
-+ u8 num_p2p_sdt;
-+ u16 p2p_sdt_cid[MAX_NUM_P2P_SDT];
-+ u16 p2p_sdt_scid[MAX_NUM_P2P_SDT];
-+ u8 p2p_reject_disable; //When starting NL80211 wpa_supplicant/hostapd, it will call netdev_close
-+ //such that it will cause p2p disabled. Use this flag to reject.
-+#endif // CONFIG_INTEL_WIDI
-+
-+#ifdef CONFIG_CONCURRENT_MODE
-+ u8 scanning_via_buddy_intf;
-+#endif
-+};
-+
-+#ifdef CONFIG_AP_MODE
-+
-+struct hostapd_priv
-+{
-+ _adapter *padapter;
-+
-+#ifdef CONFIG_HOSTAPD_MLME
-+ struct net_device *pmgnt_netdev;
-+ struct usb_anchor anchored;
-+#endif
-+
-+};
-+
-+extern int hostapd_mode_init(_adapter *padapter);
-+extern void hostapd_mode_unload(_adapter *padapter);
-+#endif
-+
-+
-+extern void rtw_joinbss_event_prehandle(_adapter *adapter, u8 *pbuf);
-+extern void rtw_survey_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_joinbss_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_stassoc_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_atimdone_event_callback(_adapter *adapter, u8 *pbuf);
-+extern void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf);
-+
-+#ifdef PLATFORM_WINDOWS
-+extern thread_return event_thread(void *context);
-+
-+extern void rtw_join_timeout_handler (
-+ IN PVOID SystemSpecific1,
-+ IN PVOID FunctionContext,
-+ IN PVOID SystemSpecific2,
-+ IN PVOID SystemSpecific3
-+ );
-+
-+extern void _rtw_scan_timeout_handler (
-+ IN PVOID SystemSpecific1,
-+ IN PVOID FunctionContext,
-+ IN PVOID SystemSpecific2,
-+ IN PVOID SystemSpecific3
-+ );
-+
-+#endif
-+
-+#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
-+extern int event_thread(void *context);
-+extern void rtw_join_timeout_handler(void* FunctionContext);
-+extern void _rtw_scan_timeout_handler(void* FunctionContext);
-+#endif
-+
-+extern void rtw_free_network_queue(_adapter *adapter,u8 isfreeall);
-+extern int rtw_init_mlme_priv(_adapter *adapter);// (struct mlme_priv *pmlmepriv);
-+
-+extern void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv);
-+
-+
-+extern sint rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
-+extern sint rtw_set_key(_adapter *adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx);
-+extern sint rtw_set_auth(_adapter *adapter,struct security_priv *psecuritypriv);
-+
-+__inline static u8 *get_bssid(struct mlme_priv *pmlmepriv)
-+{ //if sta_mode:pmlmepriv->cur_network.network.MacAddress=> bssid
-+ // if adhoc_mode:pmlmepriv->cur_network.network.MacAddress=> ibss mac address
-+ return pmlmepriv->cur_network.network.MacAddress;
-+}
-+
-+__inline static sint check_fwstate(struct mlme_priv *pmlmepriv, sint state)
-+{
-+ if (pmlmepriv->fw_state & state)
-+ return _TRUE;
-+
-+ return _FALSE;
-+}
-+
-+__inline static sint get_fwstate(struct mlme_priv *pmlmepriv)
-+{
-+ return pmlmepriv->fw_state;
-+}
-+
-+/*
-+ * No Limit on the calling context,
-+ * therefore set it to be the critical section...
-+ *
-+ * ### NOTE:#### (!!!!)
-+ * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
-+ */
-+__inline static void set_fwstate(struct mlme_priv *pmlmepriv, sint state)
-+{
-+ pmlmepriv->fw_state |= state;
-+}
-+
-+__inline static void _clr_fwstate_(struct mlme_priv *pmlmepriv, sint state)
-+{
-+ pmlmepriv->fw_state &= ~state;
-+}
-+
-+/*
-+ * No Limit on the calling context,
-+ * therefore set it to be the critical section...
-+ */
-+__inline static void clr_fwstate(struct mlme_priv *pmlmepriv, sint state)
-+{
-+ _irqL irqL;
-+
-+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
-+ if (check_fwstate(pmlmepriv, state) == _TRUE)
-+ pmlmepriv->fw_state ^= state;
-+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
-+}
-+
-+__inline static void clr_fwstate_ex(struct mlme_priv *pmlmepriv, sint state)
-+{
-+ _irqL irqL;
-+
-+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
-+ _clr_fwstate_(pmlmepriv, state);
-+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
-+}
-+
-+__inline static void up_scanned_network(struct mlme_priv *pmlmepriv)
-+{
-+ _irqL irqL;
-+
-+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
-+ pmlmepriv->num_of_scanned++;
-+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
-+}
-+
-+#ifdef CONFIG_CONCURRENT_MODE
-+sint rtw_buddy_adapter_up(_adapter *padapter);
-+sint check_buddy_fwstate(_adapter *padapter, sint state);
-+#endif //CONFIG_CONCURRENT_MODE
-+
-+__inline static void down_scanned_network(struct mlme_priv *pmlmepriv)
-+{
-+ _irqL irqL;
-+
-+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
-+ pmlmepriv->num_of_scanned--;
-+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
-+}
-+
-+__inline static void set_scanned_network_val(struct mlme_priv *pmlmepriv, sint val)
-+{
-+ _irqL irqL;
-+
-+ _enter_critical_bh(&pmlmepriv->lock, &irqL);
-+ pmlmepriv->num_of_scanned = val;
-+ _exit_critical_bh(&pmlmepriv->lock, &irqL);
-+}
-+
-+extern u16 rtw_get_capability(WLAN_BSSID_EX *bss);
-+extern void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target);
-+extern void rtw_disconnect_hdl_under_linked(_adapter* adapter, struct sta_info *psta, u8 free_assoc);
-+extern void rtw_generate_random_ibss(u8 *pibss);
-+extern struct wlan_network* rtw_find_network(_queue *scanned_queue, u8 *addr);
-+extern struct wlan_network* rtw_get_oldest_wlan_network(_queue *scanned_queue);
-+
-+extern void rtw_free_assoc_resources(_adapter* adapter, int lock_scanned_queue);
-+extern void rtw_indicate_disconnect(_adapter* adapter);
-+extern void rtw_indicate_connect(_adapter* adapter);
-+void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
-+void rtw_scan_abort(_adapter *adapter);
-+
-+extern int rtw_restruct_sec_ie(_adapter *adapter,u8 *in_ie,u8 *out_ie,uint in_len);
-+extern int rtw_restruct_wmm_ie(_adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len);
-+extern void rtw_init_registrypriv_dev_network(_adapter *adapter);
-+
-+extern void rtw_update_registrypriv_dev_network(_adapter *adapter);
-+
-+extern void rtw_get_encrypt_decrypt_from_registrypriv(_adapter *adapter);
-+
-+extern void _rtw_join_timeout_handler(_adapter *adapter);
-+extern void rtw_scan_timeout_handler(_adapter *adapter);
-+
-+extern void rtw_dynamic_check_timer_handlder(_adapter *adapter);
-+#ifdef CONFIG_SET_SCAN_DENY_TIMER
-+bool rtw_is_scan_deny(_adapter *adapter);
-+void rtw_clear_scan_deny(_adapter *adapter);
-+void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
-+void rtw_set_scan_deny(_adapter *adapter, u32 ms);
-+#else
-+#define rtw_is_scan_deny(adapter) _FALSE
-+#define rtw_clear_scan_deny(adapter) do {} while (0)
-+#define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0)
-+#define rtw_set_scan_deny(adapter, ms) do {} while (0)
-+#endif
-+
-+
-+extern int _rtw_init_mlme_priv(_adapter *padapter);
-+
-+void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
-+
-+extern void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
-+
-+extern int _rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork);
-+
-+extern struct wlan_network* _rtw_dequeue_network(_queue *queue);
-+
-+extern struct wlan_network* _rtw_alloc_network(struct mlme_priv *pmlmepriv);
-+
-+
-+extern void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall);
-+extern void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork);
-+
-+
-+extern struct wlan_network* _rtw_find_network(_queue *scanned_queue, u8 *addr);
-+
-+extern void _rtw_free_network_queue(_adapter* padapter, u8 isfreeall);
-+
-+extern sint rtw_if_up(_adapter *padapter);
-+
-+
-+u8 *rtw_get_capability_from_ie(u8 *ie);
-+u8 *rtw_get_timestampe_from_ie(u8 *ie);
-+u8 *rtw_get_beacon_interval_from_ie(u8 *ie);
-+
-+
-+void rtw_joinbss_reset(_adapter *padapter);
-+
-+#ifdef CONFIG_80211N_HT
-+unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel);
-+void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel);
-+void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe);
-+#endif
-+
-+int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork);
-+int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst);
-+
-+#ifdef CONFIG_LAYER2_ROAMING
-+void _rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
-+void rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
-+void rtw_set_roaming(_adapter *adapter, u8 to_roaming);
-+u8 rtw_to_roaming(_adapter *adapter);
-+#else
-+#define _rtw_roaming(adapter, tgt_network) do {} while(0)
-+#define rtw_roaming(adapter, tgt_network) do {} while(0)
-+#define rtw_set_roaming(adapter, to_roaming) do {} while(0)
-+#define rtw_to_roaming(adapter) 0
-+#endif
-+
-+
-+#ifdef CONFIG_INTEL_PROXIM
-+void rtw_proxim_enable(_adapter *padapter);
-+void rtw_proxim_disable(_adapter *padapter);
-+void rtw_proxim_send_packet(_adapter *padapter,u8 *pbuf,u16 len,u8 hw_rate);
-+#endif //CONFIG_INTEL_PROXIM
-+#endif //__RTL871X_MLME_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,962 @@
+/******************************************************************************
+ *
@@ -194407,9 +195394,856 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mlme_ext.h linu
+#endif//_RTL8192C_CMD_C_
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mlme.h 2015-10-07 16:40:51.000000000 +0200
+@@ -0,0 +1,843 @@
++/******************************************************************************
++ *
++ * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of version 2 of the GNU General Public License as
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program; if not, write to the Free Software Foundation, Inc.,
++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
++ *
++ *
++ ******************************************************************************/
++#ifndef __RTW_MLME_H_
++#define __RTW_MLME_H_
++
++#include <drv_conf.h>
++#include <osdep_service.h>
++#include <mlme_osdep.h>
++#include <drv_types.h>
++#include <wlan_bssdef.h>
++
++#ifdef CONFIG_INTEL_WIDI
++#include <rtw_intel_widi.h>
++#endif
++
++#define MAX_BSS_CNT 128
++//#define MAX_JOIN_TIMEOUT 2000
++//#define MAX_JOIN_TIMEOUT 2500
++#define MAX_JOIN_TIMEOUT 6500
++
++// Commented by Albert 20101105
++// Increase the scanning timeout because of increasing the SURVEY_TO value.
++
++#define SCANNING_TIMEOUT 8000
++
++#define SCAN_INTERVAL (30) // unit:2sec, 30*2=60sec
++
++#ifdef PALTFORM_OS_WINCE
++#define SCANQUEUE_LIFETIME 12000000 // unit:us
++#else
++#define SCANQUEUE_LIFETIME 20 // unit:sec
++#endif
++
++#define WIFI_NULL_STATE 0x00000000
++
++#define WIFI_ASOC_STATE 0x00000001 // Under Linked state...
++#define WIFI_REASOC_STATE 0x00000002
++#define WIFI_SLEEP_STATE 0x00000004
++#define WIFI_STATION_STATE 0x00000008
++
++#define WIFI_AP_STATE 0x00000010
++#define WIFI_ADHOC_STATE 0x00000020
++#define WIFI_ADHOC_MASTER_STATE 0x00000040
++#define WIFI_UNDER_LINKING 0x00000080
++
++#define WIFI_UNDER_WPS 0x00000100
++//#define WIFI_UNDER_CMD 0x00000200
++//#define WIFI_UNDER_P2P 0x00000400
++#define WIFI_STA_ALIVE_CHK_STATE 0x00000400
++#define WIFI_SITE_MONITOR 0x00000800 //to indicate the station is under site surveying
++
++#ifdef WDS
++#define WIFI_WDS 0x00001000
++#define WIFI_WDS_RX_BEACON 0x00002000 // already rx WDS AP beacon
++#endif
++#ifdef AUTO_CONFIG
++#define WIFI_AUTOCONF 0x00004000
++#define WIFI_AUTOCONF_IND 0x00008000
++#endif
++
++/*
++// ========== P2P Section Start ===============
++#define WIFI_P2P_LISTEN_STATE 0x00010000
++#define WIFI_P2P_GROUP_FORMATION_STATE 0x00020000
++// ========== P2P Section End ===============
++*/
++
++//#ifdef UNDER_MPTEST
++#define WIFI_MP_STATE 0x00010000
++#define WIFI_MP_CTX_BACKGROUND 0x00020000 // in continous tx background
++#define WIFI_MP_CTX_ST 0x00040000 // in continous tx with single-tone
++#define WIFI_MP_CTX_BACKGROUND_PENDING 0x00080000 // pending in continous tx background due to out of skb
++#define WIFI_MP_CTX_CCK_HW 0x00100000 // in continous tx
++#define WIFI_MP_CTX_CCK_CS 0x00200000 // in continous tx with carrier suppression
++#define WIFI_MP_LPBK_STATE 0x00400000
++//#endif
++
++//#define _FW_UNDER_CMD WIFI_UNDER_CMD
++#define _FW_UNDER_LINKING WIFI_UNDER_LINKING
++#define _FW_LINKED WIFI_ASOC_STATE
++#define _FW_UNDER_SURVEY WIFI_SITE_MONITOR
++
++
++enum dot11AuthAlgrthmNum {
++ dot11AuthAlgrthm_Open = 0,
++ dot11AuthAlgrthm_Shared,
++ dot11AuthAlgrthm_8021X,
++ dot11AuthAlgrthm_Auto,
++ dot11AuthAlgrthm_MaxNum
++};
++
++// Scan type including active and passive scan.
++typedef enum _RT_SCAN_TYPE
++{
++ SCAN_PASSIVE,
++ SCAN_ACTIVE,
++ SCAN_MIX,
++}RT_SCAN_TYPE, *PRT_SCAN_TYPE;
++
++enum DriverInterface {
++ DRIVER_WEXT = 1,
++ DRIVER_CFG80211 = 2
++};
++
++enum _BAND
++{
++ GHZ24_50 = 0,
++ GHZ_50,
++ GHZ_24,
++ GHZ_MAX,
++};
++
++#define rtw_band_valid(band) ((band) >= GHZ24_50 && (band) < GHZ_MAX)
++
++enum SCAN_RESULT_TYPE
++{
++ SCAN_RESULT_P2P_ONLY = 0, // Will return all the P2P devices.
++ SCAN_RESULT_ALL = 1, // Will return all the scanned device, include AP.
++ SCAN_RESULT_WFD_TYPE = 2 // Will just return the correct WFD device.
++ // If this device is Miracast sink device, it will just return all the Miracast source devices.
++};
++
++/*
++
++there are several "locks" in mlme_priv,
++since mlme_priv is a shared resource between many threads,
++like ISR/Call-Back functions, the OID handlers, and even timer functions.
++
++
++Each _queue has its own locks, already.
++Other items are protected by mlme_priv.lock.
++
++To avoid possible dead lock, any thread trying to modifiying mlme_priv
++SHALL not lock up more than one locks at a time!
++
++*/
++
++
++#define traffic_threshold 10
++#define traffic_scan_period 500
++
++struct sitesurvey_ctrl {
++ u64 last_tx_pkts;
++ uint last_rx_pkts;
++ sint traffic_busy;
++ _timer sitesurvey_ctrl_timer;
++};
++
++typedef struct _RT_LINK_DETECT_T{
++ u32 NumTxOkInPeriod;
++ u32 NumRxOkInPeriod;
++ u32 NumRxUnicastOkInPeriod;
++ BOOLEAN bBusyTraffic;
++ BOOLEAN bTxBusyTraffic;
++ BOOLEAN bRxBusyTraffic;
++ BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose.
++ BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic.
++ BOOLEAN bHigherBusyTxTraffic; // We may disable Tx interrupt according as Tx traffic.
++}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T;
++
++struct profile_info {
++ u8 ssidlen;
++ u8 ssid[ WLAN_SSID_MAXLEN ];
++ u8 peermac[ ETH_ALEN ];
++};
++
++struct tx_invite_req_info{
++ u8 token;
++ u8 benable;
++ u8 go_ssid[ WLAN_SSID_MAXLEN ];
++ u8 ssidlen;
++ u8 go_bssid[ ETH_ALEN ];
++ u8 peer_macaddr[ ETH_ALEN ];
++ u8 operating_ch; // This information will be set by using the p2p_set op_ch=x
++ u8 peer_ch; // The listen channel for peer P2P device
++
++};
++
++struct tx_invite_resp_info{
++ u8 token; // Used to record the dialog token of p2p invitation request frame.
++};
++
++#ifdef CONFIG_WFD
++
++struct wifi_display_info{
++ u16 wfd_enable; // Eanble/Disable the WFD function.
++ u16 rtsp_ctrlport; // TCP port number at which the this WFD device listens for RTSP messages
++ u16 peer_rtsp_ctrlport; // TCP port number at which the peer WFD device listens for RTSP messages
++ // This filed should be filled when receiving the gropu negotiation request
++
++ u8 peer_session_avail; // WFD session is available or not for the peer wfd device.
++ // This variable will be set when sending the provisioning discovery request to peer WFD device.
++ // And this variable will be reset when it is read by using the iwpriv p2p_get wfd_sa command.
++
++ u8 ip_address[4];
++ u8 peer_ip_address[4];
++ u8 wfd_pc; // WFD preferred connection
++ // 0 -> Prefer to use the P2P for WFD connection on peer side.
++ // 1 -> Prefer to use the TDLS for WFD connection on peer side.
++
++ u8 wfd_device_type; // WFD Device Type
++ // 0 -> WFD Source Device
++ // 1 -> WFD Primary Sink Device
++ enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
++};
++#endif //CONFIG_WFD
++
++struct tx_provdisc_req_info{
++ u16 wps_config_method_request; // Used when sending the provisioning request frame
++ u16 peer_channel_num[2]; // The channel number which the receiver stands.
++ NDIS_802_11_SSID ssid;
++ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
++ u8 peerIFAddr[ ETH_ALEN ]; // Peer interface address
++ u8 benable; // This provision discovery request frame is trigger to send or not
++};
++
++struct rx_provdisc_req_info{ //When peer device issue prov_disc_req first, we should store the following informations
++ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
++ u8 strconfig_method_desc_of_prov_disc_req[4]; // description for the config method located in the provisioning discovery request frame.
++ // The UI must know this information to know which config method the remote p2p device is requiring.
++};
++
++struct tx_nego_req_info{
++ u16 peer_channel_num[2]; // The channel number which the receiver stands.
++ u8 peerDevAddr[ ETH_ALEN ]; // Peer device address
++ u8 benable; // This negoitation request frame is trigger to send or not
++};
++
++struct group_id_info{
++ u8 go_device_addr[ ETH_ALEN ]; // The GO's device address of this P2P group
++ u8 ssid[ WLAN_SSID_MAXLEN ]; // The SSID of this P2P group
++};
++
++struct scan_limit_info{
++ u8 scan_op_ch_only; // When this flag is set, the driver should just scan the operation channel
++#ifndef P2P_OP_CHECK_SOCIAL_CH
++ u8 operation_ch[2]; // Store the operation channel of invitation request frame
++#else
++ u8 operation_ch[5]; // Store additional channel 1,6,11 for Android 4.2 IOT & Nexus 4
++#endif //P2P_OP_CHECK_SOCIAL_CH
++};
++
++#ifdef CONFIG_IOCTL_CFG80211
++struct cfg80211_wifidirect_info{
++ _timer remain_on_ch_timer;
++ u8 restore_channel;
++ struct ieee80211_channel remain_on_ch_channel;
++ enum nl80211_channel_type remain_on_ch_type;
++ u64 remain_on_ch_cookie;
++ bool is_ro_ch;
++};
++#endif //CONFIG_IOCTL_CFG80211
++
++struct wifidirect_info{
++ _adapter* padapter;
++ _timer find_phase_timer;
++ _timer restore_p2p_state_timer;
++
++ // Used to do the scanning. After confirming the peer is availalble, the driver transmits the P2P frame to peer.
++ _timer pre_tx_scan_timer;
++ _timer reset_ch_sitesurvey;
++ _timer reset_ch_sitesurvey2; // Just for resetting the scan limit function by using p2p nego
++#ifdef CONFIG_CONCURRENT_MODE
++ // Used to switch the channel between legacy AP and listen state.
++ _timer ap_p2p_switch_timer;
++#endif
++ struct tx_provdisc_req_info tx_prov_disc_info;
++ struct rx_provdisc_req_info rx_prov_disc_info;
++ struct tx_invite_req_info invitereq_info;
++ struct profile_info profileinfo[ P2P_MAX_PERSISTENT_GROUP_NUM ]; // Store the profile information of persistent group
++ struct tx_invite_resp_info inviteresp_info;
++ struct tx_nego_req_info nego_req_info;
++ struct group_id_info groupid_info; // Store the group id information when doing the group negotiation handshake.
++ struct scan_limit_info rx_invitereq_info; // Used for get the limit scan channel from the Invitation procedure
++ struct scan_limit_info p2p_info; // Used for get the limit scan channel from the P2P negotiation handshake
++#ifdef CONFIG_WFD
++ struct wifi_display_info *wfd_info;
++#endif
++ enum P2P_ROLE role;
++ enum P2P_STATE pre_p2p_state;
++ enum P2P_STATE p2p_state;
++ u8 device_addr[ETH_ALEN]; // The device address should be the mac address of this device.
++ u8 interface_addr[ETH_ALEN];
++ u8 social_chan[4];
++ u8 listen_channel;
++ u8 operating_channel;
++ u8 listen_dwell; // This value should be between 1 and 3
++ u8 support_rate[8];
++ u8 p2p_wildcard_ssid[P2P_WILDCARD_SSID_LEN];
++ u8 intent; // should only include the intent value.
++ u8 p2p_peer_interface_addr[ ETH_ALEN ];
++ u8 p2p_peer_device_addr[ ETH_ALEN ];
++ u8 peer_intent; // Included the intent value and tie breaker value.
++ u8 device_name[ WPS_MAX_DEVICE_NAME_LEN ]; // Device name for displaying on searching device screen
++ u8 device_name_len;
++ u8 profileindex; // Used to point to the index of profileinfo array
++ u8 peer_operating_ch;
++ u8 find_phase_state_exchange_cnt;
++ u16 device_password_id_for_nego; // The device password ID for group negotation
++ u8 negotiation_dialog_token;
++ u8 nego_ssid[ WLAN_SSID_MAXLEN ]; // SSID information for group negotitation
++ u8 nego_ssidlen;
++ u8 p2p_group_ssid[WLAN_SSID_MAXLEN];
++ u8 p2p_group_ssid_len;
++ u8 persistent_supported; // Flag to know the persistent function should be supported or not.
++ // In the Sigma test, the Sigma will provide this enable from the sta_set_p2p CAPI.
++ // 0: disable
++ // 1: enable
++ u8 session_available; // Flag to set the WFD session available to enable or disable "by Sigma"
++ // In the Sigma test, the Sigma will disable the session available by using the sta_preset CAPI.
++ // 0: disable
++ // 1: enable
++ u8 wfd_tdls_enable; // Flag to enable or disable the TDLS by WFD Sigma
++ // 0: disable
++ // 1: enable
++ u8 wfd_tdls_weaksec; // Flag to enable or disable the weak security function for TDLS by WFD Sigma
++ // 0: disable
++ // In this case, the driver can't issue the tdsl setup request frame.
++ // 1: enable
++ // In this case, the driver can issue the tdls setup request frame
++ // even the current security is weak security.
++
++ enum P2P_WPSINFO ui_got_wps_info; // This field will store the WPS value (PIN value or PBC) that UI had got from the user.
++ u16 supported_wps_cm; // This field describes the WPS config method which this driver supported.
++ // The value should be the combination of config method defined in page104 of WPS v2.0 spec.
++ u8 external_uuid; // UUID flag
++ u8 uuid[16]; // UUID
++ uint channel_list_attr_len; // This field will contain the length of body of P2P Channel List attribute of group negotitation response frame.
++ u8 channel_list_attr[100]; // This field will contain the body of P2P Channel List attribute of group negotitation response frame.
++ // We will use the channel_cnt and channel_list fields when constructing the group negotitation confirm frame.
++ u8 driver_interface; // Indicate DRIVER_WEXT or DRIVER_CFG80211
++
++#ifdef CONFIG_CONCURRENT_MODE
++ u16 ext_listen_interval; // The interval to be available with legacy AP (ms)
++ u16 ext_listen_period; // The time period to be available for P2P listen state (ms)
++#endif
++#ifdef CONFIG_P2P_PS
++ enum P2P_PS_MODE p2p_ps_mode; // indicate p2p ps mode
++ enum P2P_PS_STATE p2p_ps_state; // indicate p2p ps state
++ u8 noa_index; // Identifies and instance of Notice of Absence timing.
++ u8 ctwindow; // Client traffic window. A period of time in TU after TBTT.
++ u8 opp_ps; // opportunistic power save.
++ u8 noa_num; // number of NoA descriptor in P2P IE.
++ u8 noa_count[P2P_MAX_NOA_NUM]; // Count for owner, Type of client.
++ u32 noa_duration[P2P_MAX_NOA_NUM]; // Max duration for owner, preferred or min acceptable duration for client.
++ u32 noa_interval[P2P_MAX_NOA_NUM]; // Length of interval for owner, preferred or max acceptable interval of client.
++ u32 noa_start_time[P2P_MAX_NOA_NUM]; // schedule expressed in terms of the lower 4 bytes of the TSF timer.
++#endif // CONFIG_P2P_PS
++};
++
++struct tdls_ss_record{ //signal strength record; recording the tdls sta with lowerest ss
++ u8 macaddr[ETH_ALEN];
++ u8 RxPWDBAll;
++ u8 is_tdls_sta; // _TRUE: direct link sta, _FALSE: else
++};
++
++struct tdls_info{
++ u8 ap_prohibited;
++ uint setup_state;
++ u8 sta_cnt;
++ u8 sta_maximum; // 1:tdls sta is equal (NUM_STA-1), reach max direct link number; 0: else;
++ struct tdls_ss_record ss_record;
++ u8 macid_index; //macid entry that is ready to write
++ u8 clear_cam; //cam entry that is trying to clear, using it in direct link teardown
++ u8 ch_sensing;
++ u8 cur_channel;
++ u8 candidate_ch;
++ u8 collect_pkt_num[MAX_CHANNEL_NUM];
++ _lock cmd_lock;
++ _lock hdl_lock;
++ u8 watchdog_count;
++ u8 dev_discovered; //WFD_TDLS: for sigma test
++ u8 enable;
++#ifdef CONFIG_WFD
++ struct wifi_display_info *wfd_info;
++#endif
++};
++
++struct mlme_priv {
++
++ _lock lock;
++ sint fw_state; //shall we protect this variable? maybe not necessarily...
++
++ u8 to_join; //flag
++ #ifdef CONFIG_LAYER2_ROAMING
++ u8 to_roaming; // roaming trying times
++ #endif
++
++ u8 *nic_hdl;
++
++ u8 not_indic_disco;
++ _list *pscanned;
++ _queue free_bss_pool;
++ _queue scanned_queue;
++ u8 *free_bss_buf;
++ u32 num_of_scanned;
++
++ NDIS_802_11_SSID assoc_ssid;
++ u8 assoc_bssid[6];
++
++ struct wlan_network cur_network;
++
++ //uint wireless_mode; no used, remove it
++
++ u32 scan_interval;
++
++ _timer assoc_timer;
++
++ uint assoc_by_bssid;
++ uint assoc_by_rssi;
++
++ _timer scan_to_timer; // driver itself handles scan_timeout status.
++ u32 scan_start_time; // used to evaluate the time spent in scanning
++
++ #ifdef CONFIG_SET_SCAN_DENY_TIMER
++ _timer set_scan_deny_timer;
++ ATOMIC_T set_scan_deny; //0: allowed, 1: deny
++ #endif
++
++ struct qos_priv qospriv;
++
++#ifdef CONFIG_80211N_HT
++
++ /* Number of non-HT AP/stations */
++ int num_sta_no_ht;
++
++ /* Number of HT AP/stations 20 MHz */
++ //int num_sta_ht_20mhz;
++
++
++ int num_FortyMHzIntolerant;
++
++ struct ht_priv htpriv;
++
++#endif
++
++ RT_LINK_DETECT_T LinkDetectInfo;
++ _timer dynamic_chk_timer; //dynamic/periodic check timer
++
++ u8 acm_mask; // for wmm acm mask
++ u8 ChannelPlan;
++ RT_SCAN_TYPE scan_mode; // active: 1, passive: 0
++
++ //u8 probereq_wpsie[MAX_WPS_IE_LEN];//added in probe req
++ //int probereq_wpsie_len;
++ u8 *wps_probe_req_ie;
++ u32 wps_probe_req_ie_len;
++
++#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
++ /* Number of associated Non-ERP stations (i.e., stations using 802.11b
++ * in 802.11g BSS) */
++ int num_sta_non_erp;
++
++ /* Number of associated stations that do not support Short Slot Time */
++ int num_sta_no_short_slot_time;
++
++ /* Number of associated stations that do not support Short Preamble */
++ int num_sta_no_short_preamble;
++
++ int olbc; /* Overlapping Legacy BSS Condition */
++
++ /* Number of HT associated stations that do not support greenfield */
++ int num_sta_ht_no_gf;
++
++ /* Number of associated non-HT stations */
++ //int num_sta_no_ht;
++
++ /* Number of HT associated stations 20 MHz */
++ int num_sta_ht_20mhz;
++
++ /* Overlapping BSS information */
++ int olbc_ht;
++
++#ifdef CONFIG_80211N_HT
++ u16 ht_op_mode;
++#endif /* CONFIG_80211N_HT */
++
++ u8 *assoc_req;
++ u32 assoc_req_len;
++ u8 *assoc_rsp;
++ u32 assoc_rsp_len;
++
++ u8 *wps_beacon_ie;
++ //u8 *wps_probe_req_ie;
++ u8 *wps_probe_resp_ie;
++ u8 *wps_assoc_resp_ie; // for CONFIG_IOCTL_CFG80211, this IE could include p2p ie / wfd ie
++
++ u32 wps_beacon_ie_len;
++ //u32 wps_probe_req_ie_len;
++ u32 wps_probe_resp_ie_len;
++ u32 wps_assoc_resp_ie_len; // for CONFIG_IOCTL_CFG80211, this IE len could include p2p ie / wfd ie
++
++ u8 *p2p_beacon_ie;
++ u8 *p2p_probe_req_ie;
++ u8 *p2p_probe_resp_ie;
++ u8 *p2p_go_probe_resp_ie; //for GO
++ u8 *p2p_assoc_req_ie;
++
++ u32 p2p_beacon_ie_len;
++ u32 p2p_probe_req_ie_len;
++ u32 p2p_probe_resp_ie_len;
++ u32 p2p_go_probe_resp_ie_len; //for GO
++ u32 p2p_assoc_req_ie_len;
++/*
++#if defined(CONFIG_P2P) && defined(CONFIG_IOCTL_CFG80211)
++ //u8 *wps_p2p_beacon_ie;
++ u8 *p2p_beacon_ie;
++ u8 *wps_p2p_probe_resp_ie;
++ u8 *wps_p2p_assoc_resp_ie;
++ //u32 wps_p2p_beacon_ie_len;
++ u32 p2p_beacon_ie_len;
++ u32 wps_p2p_probe_resp_ie_len;
++ u32 wps_p2p_assoc_resp_ie_len;
++#endif
++*/
++
++ _lock bcn_update_lock;
++ u8 update_bcn;
++
++
++#endif //#if defined (CONFIG_AP_MODE) && defined (CONFIG_NATIVEAP_MLME)
++
++#if defined(CONFIG_WFD) && defined(CONFIG_IOCTL_CFG80211)
++
++ u8 *wfd_beacon_ie;
++ u8 *wfd_probe_req_ie;
++ u8 *wfd_probe_resp_ie;
++ u8 *wfd_go_probe_resp_ie; //for GO
++ u8 *wfd_assoc_req_ie;
++
++ u32 wfd_beacon_ie_len;
++ u32 wfd_probe_req_ie_len;
++ u32 wfd_probe_resp_ie_len;
++ u32 wfd_go_probe_resp_ie_len; //for GO
++ u32 wfd_assoc_req_ie_len;
++
++#endif
++
++#ifdef RTK_DMP_PLATFORM
++ // DMP kobject_hotplug function signal need in passive level
++ _workitem Linkup_workitem;
++ _workitem Linkdown_workitem;
++#endif
++
++#ifdef CONFIG_INTEL_WIDI
++ int widi_state;
++ int listen_state;
++ _timer listen_timer;
++ ATOMIC_T rx_probe_rsp; // 1:receive probe respone from RDS source.
++ u8 *l2sdTaBuffer;
++ u8 channel_idx;
++ s8 group_cnt; //For WiDi 3.5, they specified another scan algo. for WFD/RDS co-existed
++ u8 sa_ext[L2SDTA_SERVICE_VE_LEN];
++
++ u8 widi_enable;
++ /**
++ * For WiDi 4; upper layer would set
++ * p2p_primary_device_type_category_id
++ * p2p_primary_device_type_sub_category_id
++ * p2p_secondary_device_type_category_id
++ * p2p_secondary_device_type_sub_category_id
++ */
++ u16 p2p_pdt_cid;
++ u16 p2p_pdt_scid;
++ u8 num_p2p_sdt;
++ u16 p2p_sdt_cid[MAX_NUM_P2P_SDT];
++ u16 p2p_sdt_scid[MAX_NUM_P2P_SDT];
++ u8 p2p_reject_disable; //When starting NL80211 wpa_supplicant/hostapd, it will call netdev_close
++ //such that it will cause p2p disabled. Use this flag to reject.
++#endif // CONFIG_INTEL_WIDI
++
++#ifdef CONFIG_CONCURRENT_MODE
++ u8 scanning_via_buddy_intf;
++#endif
++};
++
++#ifdef CONFIG_AP_MODE
++
++struct hostapd_priv
++{
++ _adapter *padapter;
++
++#ifdef CONFIG_HOSTAPD_MLME
++ struct net_device *pmgnt_netdev;
++ struct usb_anchor anchored;
++#endif
++
++};
++
++extern int hostapd_mode_init(_adapter *padapter);
++extern void hostapd_mode_unload(_adapter *padapter);
++#endif
++
++
++extern void rtw_joinbss_event_prehandle(_adapter *adapter, u8 *pbuf);
++extern void rtw_survey_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_joinbss_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_stassoc_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_stadel_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_atimdone_event_callback(_adapter *adapter, u8 *pbuf);
++extern void rtw_cpwm_event_callback(_adapter *adapter, u8 *pbuf);
++
++#ifdef PLATFORM_WINDOWS
++extern thread_return event_thread(void *context);
++
++extern void rtw_join_timeout_handler (
++ IN PVOID SystemSpecific1,
++ IN PVOID FunctionContext,
++ IN PVOID SystemSpecific2,
++ IN PVOID SystemSpecific3
++ );
++
++extern void _rtw_scan_timeout_handler (
++ IN PVOID SystemSpecific1,
++ IN PVOID FunctionContext,
++ IN PVOID SystemSpecific2,
++ IN PVOID SystemSpecific3
++ );
++
++#endif
++
++#if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD)
++extern int event_thread(void *context);
++extern void rtw_join_timeout_handler(void* FunctionContext);
++extern void _rtw_scan_timeout_handler(void* FunctionContext);
++#endif
++
++extern void rtw_free_network_queue(_adapter *adapter,u8 isfreeall);
++extern int rtw_init_mlme_priv(_adapter *adapter);// (struct mlme_priv *pmlmepriv);
++
++extern void rtw_free_mlme_priv (struct mlme_priv *pmlmepriv);
++
++
++extern sint rtw_select_and_join_from_scanned_queue(struct mlme_priv *pmlmepriv);
++extern sint rtw_set_key(_adapter *adapter,struct security_priv *psecuritypriv,sint keyid, u8 set_tx);
++extern sint rtw_set_auth(_adapter *adapter,struct security_priv *psecuritypriv);
++
++__inline static u8 *get_bssid(struct mlme_priv *pmlmepriv)
++{ //if sta_mode:pmlmepriv->cur_network.network.MacAddress=> bssid
++ // if adhoc_mode:pmlmepriv->cur_network.network.MacAddress=> ibss mac address
++ return pmlmepriv->cur_network.network.MacAddress;
++}
++
++__inline static sint check_fwstate(struct mlme_priv *pmlmepriv, sint state)
++{
++ if (pmlmepriv->fw_state & state)
++ return _TRUE;
++
++ return _FALSE;
++}
++
++__inline static sint get_fwstate(struct mlme_priv *pmlmepriv)
++{
++ return pmlmepriv->fw_state;
++}
++
++/*
++ * No Limit on the calling context,
++ * therefore set it to be the critical section...
++ *
++ * ### NOTE:#### (!!!!)
++ * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
++ */
++__inline static void set_fwstate(struct mlme_priv *pmlmepriv, sint state)
++{
++ pmlmepriv->fw_state |= state;
++}
++
++__inline static void _clr_fwstate_(struct mlme_priv *pmlmepriv, sint state)
++{
++ pmlmepriv->fw_state &= ~state;
++}
++
++/*
++ * No Limit on the calling context,
++ * therefore set it to be the critical section...
++ */
++__inline static void clr_fwstate(struct mlme_priv *pmlmepriv, sint state)
++{
++ _irqL irqL;
++
++ _enter_critical_bh(&pmlmepriv->lock, &irqL);
++ if (check_fwstate(pmlmepriv, state) == _TRUE)
++ pmlmepriv->fw_state ^= state;
++ _exit_critical_bh(&pmlmepriv->lock, &irqL);
++}
++
++__inline static void clr_fwstate_ex(struct mlme_priv *pmlmepriv, sint state)
++{
++ _irqL irqL;
++
++ _enter_critical_bh(&pmlmepriv->lock, &irqL);
++ _clr_fwstate_(pmlmepriv, state);
++ _exit_critical_bh(&pmlmepriv->lock, &irqL);
++}
++
++__inline static void up_scanned_network(struct mlme_priv *pmlmepriv)
++{
++ _irqL irqL;
++
++ _enter_critical_bh(&pmlmepriv->lock, &irqL);
++ pmlmepriv->num_of_scanned++;
++ _exit_critical_bh(&pmlmepriv->lock, &irqL);
++}
++
++#ifdef CONFIG_CONCURRENT_MODE
++sint rtw_buddy_adapter_up(_adapter *padapter);
++sint check_buddy_fwstate(_adapter *padapter, sint state);
++#endif //CONFIG_CONCURRENT_MODE
++
++__inline static void down_scanned_network(struct mlme_priv *pmlmepriv)
++{
++ _irqL irqL;
++
++ _enter_critical_bh(&pmlmepriv->lock, &irqL);
++ pmlmepriv->num_of_scanned--;
++ _exit_critical_bh(&pmlmepriv->lock, &irqL);
++}
++
++__inline static void set_scanned_network_val(struct mlme_priv *pmlmepriv, sint val)
++{
++ _irqL irqL;
++
++ _enter_critical_bh(&pmlmepriv->lock, &irqL);
++ pmlmepriv->num_of_scanned = val;
++ _exit_critical_bh(&pmlmepriv->lock, &irqL);
++}
++
++extern u16 rtw_get_capability(WLAN_BSSID_EX *bss);
++extern void rtw_update_scanned_network(_adapter *adapter, WLAN_BSSID_EX *target);
++extern void rtw_disconnect_hdl_under_linked(_adapter* adapter, struct sta_info *psta, u8 free_assoc);
++extern void rtw_generate_random_ibss(u8 *pibss);
++extern struct wlan_network* rtw_find_network(_queue *scanned_queue, u8 *addr);
++extern struct wlan_network* rtw_get_oldest_wlan_network(_queue *scanned_queue);
++
++extern void rtw_free_assoc_resources(_adapter* adapter, int lock_scanned_queue);
++extern void rtw_indicate_disconnect(_adapter* adapter);
++extern void rtw_indicate_connect(_adapter* adapter);
++void rtw_indicate_scan_done( _adapter *padapter, bool aborted);
++void rtw_scan_abort(_adapter *adapter);
++
++extern int rtw_restruct_sec_ie(_adapter *adapter,u8 *in_ie,u8 *out_ie,uint in_len);
++extern int rtw_restruct_wmm_ie(_adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_len, uint initial_out_len);
++extern void rtw_init_registrypriv_dev_network(_adapter *adapter);
++
++extern void rtw_update_registrypriv_dev_network(_adapter *adapter);
++
++extern void rtw_get_encrypt_decrypt_from_registrypriv(_adapter *adapter);
++
++extern void _rtw_join_timeout_handler(_adapter *adapter);
++extern void rtw_scan_timeout_handler(_adapter *adapter);
++
++extern void rtw_dynamic_check_timer_handlder(_adapter *adapter);
++#ifdef CONFIG_SET_SCAN_DENY_TIMER
++bool rtw_is_scan_deny(_adapter *adapter);
++void rtw_clear_scan_deny(_adapter *adapter);
++void rtw_set_scan_deny_timer_hdl(_adapter *adapter);
++void rtw_set_scan_deny(_adapter *adapter, u32 ms);
++#else
++#define rtw_is_scan_deny(adapter) _FALSE
++#define rtw_clear_scan_deny(adapter) do {} while (0)
++#define rtw_set_scan_deny_timer_hdl(adapter) do {} while (0)
++#define rtw_set_scan_deny(adapter, ms) do {} while (0)
++#endif
++
++
++extern int _rtw_init_mlme_priv(_adapter *padapter);
++
++void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
++
++extern void _rtw_free_mlme_priv(struct mlme_priv *pmlmepriv);
++
++extern int _rtw_enqueue_network(_queue *queue, struct wlan_network *pnetwork);
++
++extern struct wlan_network* _rtw_dequeue_network(_queue *queue);
++
++extern struct wlan_network* _rtw_alloc_network(struct mlme_priv *pmlmepriv);
++
++
++extern void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork, u8 isfreeall);
++extern void _rtw_free_network_nolock(struct mlme_priv *pmlmepriv, struct wlan_network *pnetwork);
++
++
++extern struct wlan_network* _rtw_find_network(_queue *scanned_queue, u8 *addr);
++
++extern void _rtw_free_network_queue(_adapter* padapter, u8 isfreeall);
++
++extern sint rtw_if_up(_adapter *padapter);
++
++
++u8 *rtw_get_capability_from_ie(u8 *ie);
++u8 *rtw_get_timestampe_from_ie(u8 *ie);
++u8 *rtw_get_beacon_interval_from_ie(u8 *ie);
++
++
++void rtw_joinbss_reset(_adapter *padapter);
++
++#ifdef CONFIG_80211N_HT
++unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel);
++void rtw_update_ht_cap(_adapter *padapter, u8 *pie, uint ie_len, u8 channel);
++void rtw_issue_addbareq_cmd(_adapter *padapter, struct xmit_frame *pxmitframe);
++#endif
++
++int rtw_is_same_ibss(_adapter *adapter, struct wlan_network *pnetwork);
++int is_same_network(WLAN_BSSID_EX *src, WLAN_BSSID_EX *dst);
++
++#ifdef CONFIG_LAYER2_ROAMING
++void _rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
++void rtw_roaming(_adapter *adapter, struct wlan_network *tgt_network);
++void rtw_set_roaming(_adapter *adapter, u8 to_roaming);
++u8 rtw_to_roaming(_adapter *adapter);
++#else
++#define _rtw_roaming(adapter, tgt_network) do {} while(0)
++#define rtw_roaming(adapter, tgt_network) do {} while(0)
++#define rtw_set_roaming(adapter, to_roaming) do {} while(0)
++#define rtw_to_roaming(adapter) 0
++#endif
++
++
++#ifdef CONFIG_INTEL_PROXIM
++void rtw_proxim_enable(_adapter *padapter);
++void rtw_proxim_disable(_adapter *padapter);
++void rtw_proxim_send_packet(_adapter *padapter,u8 *pbuf,u16 len,u8 hw_rate);
++#endif //CONFIG_INTEL_PROXIM
++#endif //__RTL871X_MLME_H_
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,711 @@
+/******************************************************************************
+ *
@@ -195122,9 +196956,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp.h linux-rpi/
+extern void Hal_ProSetCrystalCap (PADAPTER pAdapter , u32 CrystalCapVal);
+
+#endif //_RTW_MP_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h 2015-08-26 10:26:08.761316441 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,595 @@
+/******************************************************************************
+ *
@@ -195721,9 +197555,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_ioctl.h linu
+#endif /* _RTW_MP_IOCTL_C_ */
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1096 @@
+/******************************************************************************
+ *
@@ -196821,9 +198655,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_mp_phy_regdef.h
+
+
+#endif //__INC_HAL8192SPHYREG_H
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,160 @@
+/******************************************************************************
+ *
@@ -196985,9 +198819,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_p2p.h linux-rpi
+ (wdinfo)->find_phase_state_exchange_cnt != P2P_FINDPHASE_EX_NONE)
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,362 @@
+/******************************************************************************
+ *
@@ -197351,9 +199185,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_pwrctrl.h linux
+int rtw_pm_set_lps(_adapter *padapter, u8 mode);
+
+#endif //__RTL871X_PWRCTRL_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_qos.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_qos.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_qos.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_qos.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_qos.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_qos.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_qos.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,39 @@
+/******************************************************************************
+ *
@@ -197394,9 +199228,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_qos.h linux-rpi
+
+
+#endif //_RTL871X_QOS_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_recv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_recv.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_recv.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_recv.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_recv.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_recv.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,730 @@
+/******************************************************************************
+ *
@@ -198128,9 +199962,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_recv.h linux-rp
+extern void mgt_dispatcher(_adapter *padapter, union recv_frame *precv_frame);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_rf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_rf.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_rf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_rf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_rf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_rf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,151 @@
+/******************************************************************************
+ *
@@ -198283,9 +200117,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_rf.h linux-rpi/
+
+
+#endif //_RTL8711_RF_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_security.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_security.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_security.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_security.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_security.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_security.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_security.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_security.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,446 @@
+/******************************************************************************
+ *
@@ -198733,9 +200567,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_security.h linu
+u8 rtw_handle_tkip_countermeasure(_adapter* adapter, const char *caller);
+
+#endif //__RTL871X_SECURITY_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,73 @@
+/******************************************************************************
+ *
@@ -198810,9 +200644,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_sreset.h linux-
+void sreset_reset(_adapter *padapter);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,142 @@
+/******************************************************************************
+ *
@@ -198956,14 +200790,14 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_tdls.h linux-rp
+#endif //CONFIG_TDLS
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_version.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_version.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_version.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_version.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_version.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_version.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_version.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_version.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1 @@
+#define DRIVERVERSION "v4.0.2_9000.20130911"
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,753 @@
+/******************************************************************************
+ *
@@ -199718,9 +201552,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/rtw_xmit.h linux-rp
+#include <xmit_osdep.h>
+
+#endif //_RTL871X_XMIT_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/sta_info.h linux-rpi/drivers/net/wireless/rtl8192cu/include/sta_info.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/sta_info.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/sta_info.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/sta_info.h linux-rpi/drivers/net/wireless/rtl8192cu/include/sta_info.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/sta_info.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/sta_info.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,431 @@
+/******************************************************************************
+ *
@@ -200153,9 +201987,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/sta_info.h linux-rp
+extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr);
+
+#endif //_STA_INFO_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_hal.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_hal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_hal.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_hal.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_hal.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_hal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_hal.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,36 @@
+/******************************************************************************
+ *
@@ -200193,9 +202027,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_hal.h linux-rpi
+#endif // CONFIG_WOWLAN_MANUAL
+#endif //CONFIG_WOWLAN
+#endif //__USB_HAL_H__
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_ops.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_ops.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,109 @@
+/******************************************************************************
+ *
@@ -200306,9 +202140,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops.h linux-rpi
+}
+
+#endif //__USB_OPS_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,62 @@
+/******************************************************************************
+ *
@@ -200372,9 +202206,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_ops_linux.h lin
+void usb_write_port_cancel(struct intf_hdl *pintfhdl);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_osintf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_osintf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_osintf.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_osintf.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_osintf.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_osintf.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_osintf.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,37 @@
+/******************************************************************************
+ *
@@ -200413,9 +202247,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_osintf.h linux-
+
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,59 @@
+/******************************************************************************
+ *
@@ -200476,9 +202310,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/usb_vendor_req.h li
+//BOOLEAN CEusbGetDescriptorRequest(PCE_USB_DEVICE CEdevice, IN short urbLength, IN UCHAR DescriptorType, IN UCHAR Index, IN USHORT LanguageId, IN PVOID TransferBuffer, IN ULONG TransferBufferLength);
+
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wifi.h linux-rpi/drivers/net/wireless/rtl8192cu/include/wifi.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wifi.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/wifi.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/wifi.h linux-rpi/drivers/net/wireless/rtl8192cu/include/wifi.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/wifi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/wifi.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1245 @@
+/******************************************************************************
+ *
@@ -201725,9 +203559,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wifi.h linux-rpi/dr
+
+
+#endif // _WIFI_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h linux-rpi/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h linux-rpi/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,702 @@
+/******************************************************************************
+ *
@@ -202431,9 +204265,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/wlan_bssdef.h linux
+
+
+#endif //#ifndef WLAN_BSSDEF_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h linux-rpi/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,94 @@
+/******************************************************************************
+ *
@@ -202529,9 +204363,641 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/include/xmit_osdep.h linux-
+extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe);
+
+#endif //__XMIT_OSDEP_H_
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/Kconfig linux-rpi/drivers/net/wireless/rtl8192cu/Kconfig
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/Kconfig 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,9 @@
++config RTL8192CU
++ tristate "Realtek 8192C USB WiFi"
++ depends on MAC80211 && USB
++ select CFG80211_WEXT
++ select WIRELESS_EXT
++ select WEXT_PRIV
++ ---help---
++ This option adds the Realtek RTL8192CU USB device such as Edimax EW-7811Un.
++
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/Makefile linux-rpi/drivers/net/wireless/rtl8192cu/Makefile
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/Makefile 2015-10-07 16:40:50.000000000 +0200
+@@ -0,0 +1,615 @@
++EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS)
++EXTRA_CFLAGS += -O1
++#EXTRA_CFLAGS += -O3
++#EXTRA_CFLAGS += -Wall
++#EXTRA_CFLAGS += -Wextra
++#EXTRA_CFLAGS += -Werror
++#EXTRA_CFLAGS += -pedantic
++#EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes
++
++EXTRA_CFLAGS += -Wno-unused-variable
++EXTRA_CFLAGS += -Wno-unused-value
++EXTRA_CFLAGS += -Wno-unused-label
++EXTRA_CFLAGS += -Wno-unused-parameter
++EXTRA_CFLAGS += -Wno-unused-function
++EXTRA_CFLAGS += -Wno-unused
++
++EXTRA_CFLAGS += -Wno-uninitialized
++
++EXTRA_CFLAGS += -I$(src)/include
++
++CONFIG_AUTOCFG_CP = n
++
++CONFIG_RTL8192C = y
++CONFIG_RTL8192D = n
++CONFIG_RTL8723A = n
++
++CONFIG_USB_HCI = y
++CONFIG_PCI_HCI = n
++CONFIG_SDIO_HCI = n
++
++CONFIG_MP_INCLUDED = n
++CONFIG_POWER_SAVING = y
++CONFIG_USB_AUTOSUSPEND = n
++CONFIG_HW_PWRP_DETECTION = n
++CONFIG_WIFI_TEST = n
++CONFIG_BT_COEXISTENCE = n
++CONFIG_RTL8192CU_REDEFINE_1X1 = n
++CONFIG_INTEL_WIDI = n
++CONFIG_WAKE_ON_WLAN = n
++
++CONFIG_PLATFORM_I386_PC = y
++CONFIG_PLATFORM_TI_AM3517 = n
++CONFIG_PLATFORM_ANDROID_X86 = n
++CONFIG_PLATFORM_JB_X86 = n
++CONFIG_PLATFORM_ARM_S3C2K4 = n
++CONFIG_PLATFORM_ARM_PXA2XX = n
++CONFIG_PLATFORM_ARM_S3C6K4 = n
++CONFIG_PLATFORM_MIPS_RMI = n
++CONFIG_PLATFORM_RTD2880B = n
++CONFIG_PLATFORM_MIPS_AR9132 = n
++CONFIG_PLATFORM_RTK_DMP = n
++CONFIG_PLATFORM_MIPS_PLM = n
++CONFIG_PLATFORM_MSTAR389 = n
++CONFIG_PLATFORM_MT53XX = n
++CONFIG_PLATFORM_ARM_MX51_241H = n
++CONFIG_PLATFORM_FS_MX61 = n
++CONFIG_PLATFORM_ACTIONS_ATJ227X = n
++CONFIG_PLATFORM_TEGRA3_CARDHU = n
++CONFIG_PLATFORM_TEGRA4_DALMORE = n
++CONFIG_PLATFORM_ARM_TCC8900 = n
++CONFIG_PLATFORM_ARM_TCC8920 = n
++CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
++CONFIG_PLATFORM_ARM_RK2818 = n
++CONFIG_PLATFORM_ARM_TI_PANDA = n
++CONFIG_PLATFORM_MIPS_JZ4760 = n
++CONFIG_PLATFORM_DMP_PHILIPS = n
++CONFIG_PLATFORM_TI_DM365 = n
++CONFIG_PLATFORM_MN10300 = n
++CONFIG_PLATFORM_MSTAR_TITANIA12 = n
++CONFIG_PLATFORM_MSTAR_A3 = n
++CONFIG_PLATFORM_ARM_SUNxI = n
++CONFIG_PLATFORM_ARM_SUN6I = n
++
++CONFIG_DRVEXT_MODULE = n
++
++export TopDIR ?= $(shell pwd)
++
++
++ifeq ($(CONFIG_RTL8192C), y)
++
++RTL871X = rtl8192c
++
++ifeq ($(CONFIG_USB_HCI), y)
++MODULE_NAME = 8192cu
++FW_FILES := hal/$(RTL871X)/usb/Hal8192CUHWImg.o
++ifneq ($(CONFIG_WAKE_ON_WLAN), n)
++FW_FILES += hal/$(RTL871X)/usb/Hal8192CUHWImg_wowlan.o
++endif
++endif
++ifeq ($(CONFIG_PCI_HCI), y)
++MODULE_NAME = 8192ce
++FW_FILES := hal/$(RTL871X)/pci/Hal8192CEHWImg.o
++endif
++
++CHIP_FILES := \
++ hal/$(RTL871X)/$(RTL871X)_sreset.o \
++ hal/$(RTL871X)/$(RTL871X)_xmit.o
++CHIP_FILES += $(FW_FILES)
++endif
++
++ifeq ($(CONFIG_RTL8192D), y)
++
++RTL871X = rtl8192d
++
++ifeq ($(CONFIG_USB_HCI), y)
++MODULE_NAME = 8192du
++FW_FILES := hal/$(RTL871X)/usb/Hal8192DUHWImg.o
++ifneq ($(CONFIG_WAKE_ON_WLAN), n)
++FW_FILES += hal/$(RTL871X)/usb/Hal8192DUHWImg_wowlan.o
++endif
++endif
++ifeq ($(CONFIG_PCI_HCI), y)
++MODULE_NAME = 8192de
++FW_FILES := hal/$(RTL871X)/pci/Hal8192DEHWImg.o
++endif
++
++CHIP_FILES := \
++ hal/$(RTL871X)/$(RTL871X)_xmit.o
++CHIP_FILES += $(FW_FILES)
++endif
++
++ifeq ($(CONFIG_RTL8723A), y)
++
++RTL871X = rtl8723a
++
++ifeq ($(CONFIG_SDIO_HCI), y)
++MODULE_NAME = 8723as
++FW_FILES := hal/$(RTL871X)/sdio/Hal8723SHWImg.o
++endif
++
++ifeq ($(CONFIG_USB_HCI), y)
++MODULE_NAME = 8723au
++FW_FILES := hal/$(RTL871X)/usb/Hal8723UHWImg.o
++endif
++
++ifeq ($(CONFIG_PCI_HCI), y)
++MODULE_NAME = 8723ae
++FW_FILES := hal/$(RTL871X)/pci/Hal8723EHWImg.o
++endif
++
++PWRSEQ_FILES := hal/HalPwrSeqCmd.o \
++ hal/$(RTL871X)/Hal8723PwrSeq.o
++
++CHIP_FILES += $(FW_FILES) $(PWRSEQ_FILES)
++
++endif
++
++ifeq ($(CONFIG_SDIO_HCI), y)
++HCI_NAME = sdio
++endif
++
++ifeq ($(CONFIG_USB_HCI), y)
++HCI_NAME = usb
++endif
++
++ifeq ($(CONFIG_PCI_HCI), y)
++HCI_NAME = pci
++endif
++
++
++_OS_INTFS_FILES := os_dep/osdep_service.o \
++ os_dep/linux/os_intfs.o \
++ os_dep/linux/$(HCI_NAME)_intf.o \
++ os_dep/linux/$(HCI_NAME)_ops_linux.o \
++ os_dep/linux/ioctl_linux.o \
++ os_dep/linux/xmit_linux.o \
++ os_dep/linux/mlme_linux.o \
++ os_dep/linux/recv_linux.o \
++ os_dep/linux/ioctl_cfg80211.o \
++ os_dep/linux/rtw_android.o
++
++
++_HAL_INTFS_FILES := hal/hal_intf.o \
++ hal/hal_com.o \
++ hal/dm.o \
++ hal/$(RTL871X)/$(RTL871X)_hal_init.o \
++ hal/$(RTL871X)/$(RTL871X)_phycfg.o \
++ hal/$(RTL871X)/$(RTL871X)_rf6052.o \
++ hal/$(RTL871X)/$(RTL871X)_dm.o \
++ hal/$(RTL871X)/$(RTL871X)_rxdesc.o \
++ hal/$(RTL871X)/$(RTL871X)_cmd.o \
++ hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_halinit.o \
++ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_led.o \
++ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_xmit.o \
++ hal/$(RTL871X)/$(HCI_NAME)/rtl$(MODULE_NAME)_recv.o
++
++ifeq ($(CONFIG_SDIO_HCI), y)
++_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops.o
++else
++_HAL_INTFS_FILES += hal/$(RTL871X)/$(HCI_NAME)/$(HCI_NAME)_ops_linux.o
++endif
++
++ifeq ($(CONFIG_MP_INCLUDED), y)
++_HAL_INTFS_FILES += hal/$(RTL871X)/$(RTL871X)_mp.o
++endif
++
++_HAL_INTFS_FILES += $(CHIP_FILES)
++
++
++ifeq ($(CONFIG_AUTOCFG_CP), y)
++$(shell cp $(TopDIR)/autoconf_$(RTL871X)_$(HCI_NAME)_linux.h $(TopDIR)/include/autoconf.h)
++endif
++
++
++ifeq ($(CONFIG_USB_HCI), y)
++ifeq ($(CONFIG_USB_AUTOSUSPEND), y)
++EXTRA_CFLAGS += -DCONFIG_USB_AUTOSUSPEND
++endif
++endif
++
++ifeq ($(CONFIG_POWER_SAVING), y)
++EXTRA_CFLAGS += -DCONFIG_POWER_SAVING
++endif
++
++ifeq ($(CONFIG_HW_PWRP_DETECTION), y)
++EXTRA_CFLAGS += -DCONFIG_HW_PWRP_DETECTION
++endif
++
++ifeq ($(CONFIG_WIFI_TEST), y)
++EXTRA_CFLAGS += -DCONFIG_WIFI_TEST
++endif
++
++ifeq ($(CONFIG_BT_COEXISTENCE), y)
++EXTRA_CFLAGS += -DCONFIG_BT_COEXISTENCE
++endif
++
++ifeq ($(CONFIG_RTL8192CU_REDEFINE_1X1), y)
++EXTRA_CFLAGS += -DRTL8192C_RECONFIG_TO_1T1R
++endif
++
++ifeq ($(CONFIG_WAKE_ON_WLAN), y)
++EXTRA_CFLAGS += -DCONFIG_WAKE_ON_WLAN
++endif
++
++ifeq ($(CONFIG_INTEL_WIDI), y)
++EXTRA_CFLAGS += -DCONFIG_INTEL_WIDI
++endif
++
++ifeq ($(CONFIG_PLATFORM_I386_PC), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
++ARCH ?= $(SUBARCH)
++CROSS_COMPILE ?=
++KVER := $(shell uname -r)
++KSRC := /lib/modules/$(KVER)/build
++MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/
++INSTALL_PREFIX :=
++endif
++
++ifeq ($(CONFIG_PLATFORM_TI_AM3517), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_SHUTTLE
++CROSS_COMPILE := arm-eabi-
++KSRC := $(shell pwd)/../../../Android/kernel
++ARCH := arm
++endif
++
++ifeq ($(CONFIG_PLATFORM_MSTAR_TITANIA12), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_TITANIA12
++ARCH:=mips
++CROSS_COMPILE:= /usr/src/Mstar_kernel/mips-4.3/bin/mips-linux-gnu-
++KVER:= 2.6.28.9
++KSRC:= /usr/src/Mstar_kernel/2.6.28.9/
++endif
++
++ifeq ($(CONFIG_PLATFORM_MSTAR_A3), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR -DCONFIG_PLATFORM_MSTAR_A3
++ARCH:=arm
++CROSS_COMPILE:= arm-none-linux-gnueabi-
++KVER:= 2.6.35.11
++KSRC:= /home/gary/PERFORCE/THEALE/RedLion/2.6.35.11/
++MODULE_NAME = wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ANDROID_X86), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
++ARCH := $(SUBARCH)
++CROSS_COMPILE := /media/DATA-2/android-x86/ics-x86_20120130/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin/i686-unknown-linux-gnu-
++KSRC := /media/DATA-2/android-x86/ics-x86_20120130/out/target/product/generic_x86/obj/kernel
++MODULE_NAME :=wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_JB_X86), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
++EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
++EXTRA_CFLAGS += -DCONFIG_P2P_IPS
++SUBARCH := $(shell uname -m | sed -e s/i.86/i386/)
++ARCH := $(SUBARCH)
++CROSS_COMPILE := /home/android_sdk/android-x86_JB/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7/bin/i686-linux-android-
++KSRC := /home/android_sdk/android-x86_JB/out/target/product/x86/obj/kernel/
++MODULE_NAME :=wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_PXA2XX), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := arm-none-linux-gnueabi-
++KVER := 2.6.34.1
++KSRC ?= /usr/src/linux-2.6.34.1
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_S3C2K4), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := arm-linux-
++KVER := 2.6.24.7_$(ARCH)
++KSRC := /usr/src/kernels/linux-$(KVER)
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_S3C6K4), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := arm-none-linux-gnueabi-
++KVER := 2.6.34.1
++KSRC ?= /usr/src/linux-2.6.34.1
++endif
++
++ifeq ($(CONFIG_PLATFORM_RTD2880B), y)
++EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN -DCONFIG_PLATFORM_RTD2880B
++ARCH:=
++CROSS_COMPILE:=
++KVER:=
++KSRC:=
++endif
++
++ifeq ($(CONFIG_PLATFORM_MIPS_RMI), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH:=mips
++CROSS_COMPILE:=mipsisa32r2-uclibc-
++KVER:=
++KSRC:= /root/work/kernel_realtek
++endif
++
++ifeq ($(CONFIG_PLATFORM_MIPS_PLM), y)
++EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
++ARCH:=mips
++CROSS_COMPILE:=mipsisa32r2-uclibc-
++KVER:=
++KSRC:= /root/work/kernel_realtek
++endif
++
++ifeq ($(CONFIG_PLATFORM_MSTAR389), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MSTAR389
++ARCH:=mips
++CROSS_COMPILE:= mips-linux-gnu-
++KVER:= 2.6.28.10
++KSRC:= /home/mstar/mstar_linux/2.6.28.9/
++endif
++
++ifeq ($(CONFIG_PLATFORM_MIPS_AR9132), y)
++EXTRA_CFLAGS += -DCONFIG_BIG_ENDIAN
++ARCH := mips
++CROSS_COMPILE := mips-openwrt-linux-
++KSRC := /home/alex/test_openwrt/tmp/linux-2.6.30.9
++endif
++
++ifeq ($(CONFIG_PLATFORM_DMP_PHILIPS), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
++ARCH := mips
++#CROSS_COMPILE:=/usr/local/msdk-4.3.6-mips-EL-2.6.12.6-0.9.30.3/bin/mipsel-linux-
++CROSS_COMPILE:=/usr/local/toolchain_mipsel/bin/mipsel-linux-
++KSRC ?=/usr/local/Jupiter/linux-2.6.12
++endif
++
++ifeq ($(CONFIG_PLATFORM_RTK_DMP), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DRTK_DMP_PLATFORM
++ARCH:=mips
++CROSS_COMPILE:=mipsel-linux-
++KVER:=
++KSRC ?= /usr/src/DMP_Kernel/jupiter/linux-2.6.12
++endif
++
++ifeq ($(CONFIG_PLATFORM_MT53XX), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MT53XX
++ARCH:= arm
++CROSS_COMPILE:= arm11_mtk_le-
++KVER:= 2.6.27
++KSRC?= /proj/mtk00802/BD_Compare/BDP/Dev/BDP_V301/BDP_Linux/linux-2.6.27
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_MX51_241H), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_WISTRON_PLATFORM
++ARCH := arm
++CROSS_COMPILE := /opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/arm-none-linux-gnueabi-
++KVER := 2.6.31
++KSRC ?= /lib/modules/2.6.31-770-g0e46b52/source
++endif
++
++ifeq ($(CONFIG_PLATFORM_FS_MX61), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := /home/share/CusEnv/FreeScale/arm-eabi-4.4.3/bin/arm-eabi-
++KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env
++endif
++
++
++
++ifeq ($(CONFIG_PLATFORM_ACTIONS_ATJ227X), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ACTIONS_ATJ227X
++ARCH := mips
++CROSS_COMPILE := /home/cnsd4/project/actions/tools-2.6.27/bin/mipsel-linux-gnu-
++KVER := 2.6.27
++KSRC := /home/cnsd4/project/actions/linux-2.6.27.28
++endif
++
++ifeq ($(CONFIG_PLATFORM_TI_DM365), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_TI_DM365
++ARCH := arm
++CROSS_COMPILE := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/arm/v5t_le/bin/arm_v5t_le-
++KVER := 2.6.18
++KSRC := /home/cnsd4/Appro/mv_pro_5.0/montavista/pro/devkit/lsp/ti-davinci/linux-dm365
++endif
++
++ifeq ($(CONFIG_PLATFORM_TEGRA3_CARDHU), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++# default setting for Android 4.1, 4.2
++EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
++EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
++EXTRA_CFLAGS += -DCONFIG_P2P_IPS
++ARCH := arm
++CROSS_COMPILE := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
++KSRC := /home/android_sdk/nvidia/tegra-16r3-partner-android-4.1_20120723/out/target/product/cardhu/obj/KERNEL
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_TEGRA4_DALMORE), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++# default setting for Android 4.1, 4.2
++EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC
++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
++EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
++EXTRA_CFLAGS += -DCONFIG_P2P_IPS
++ARCH := arm
++CROSS_COMPILE := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
++KSRC := /home/android_sdk/nvidia/tegra-17r9-partner-android-4.2-dalmore_20130131/out/target/product/dalmore/obj/KERNEL
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_TCC8900), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := /home/android_sdk/Telechips/SDK_2304_20110613/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
++KSRC := /home/android_sdk/Telechips/SDK_2304_20110613/kernel
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_TCC8920), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++ARCH := arm
++CROSS_COMPILE := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
++KSRC := /home/android_sdk/Telechips/v12.06_r1-tcc-android-4.0.4/kernel
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_TCC8920_JB42), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++# default setting for Android 4.1, 4.2
++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
++EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
++EXTRA_CFLAGS += -DCONFIG_P2P_IPS
++ARCH := arm
++CROSS_COMPILE := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
++KSRC := /home/android_sdk/Telechips/v13.03_r1-tcc-android-4.2.2_ds_patched/kernel
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_RK2818), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_ROCKCHIPS -DCONFIG_MINIMAL_MEMORY_USAGE
++ARCH := arm
++CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi-
++KSRC := /usr/src/release_fae_version/kernel25_A7_281x
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_TI_PANDA), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN #-DCONFIG_MINIMAL_MEMORY_USAGE
++ARCH := arm
++#CROSS_COMPILE := /media/DATA-1/aosp/ics-aosp_20111227/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
++#KSRC := /media/DATA-1/aosp/android-omap-panda-3.0_20120104
++CROSS_COMPILE := /media/DATA-1/android-4.0/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
++KSRC := /media/DATA-1/android-4.0/panda_kernel/omap
++MODULE_NAME := wlan
++endif
++
++ifeq ($(CONFIG_PLATFORM_MIPS_JZ4760), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_MINIMAL_MEMORY_USAGE
++ARCH ?= mips
++CROSS_COMPILE ?= /mnt/sdb5/Ingenic/Umido/mips-4.3/bin/mips-linux-gnu-
++KSRC ?= /mnt/sdb5/Ingenic/Umido/kernel
++endif
++
++#Add setting for MN10300
++ifeq ($(CONFIG_PLATFORM_MN10300), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MN10300
++ARCH := mn10300
++CROSS_COMPILE := mn10300-linux-
++KVER := 2.6.32.2
++KSRC := /home/winuser/work/Plat_sLD2T_V3010/usr/src/linux-2.6.32.2
++INSTALL_PREFIX :=
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_SUNxI), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ARM_SUNxI
++ARCH := arm
++CROSS_COMPILE := arm-none-linux-gnueabi-
++KVER := 3.0.8
++#KSRC:= ../lichee/linux-3.0/
++endif
++
++ifeq ($(CONFIG_PLATFORM_ARM_SUN6I), y)
++EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
++EXTRA_CFLAGS += -DCONFIG_PLATFORM_ARM_SUN6I
++EXTRA_CFLAGS += -DCONFIG_USE_USB_BUFFER_ALLOC_TX
++EXTRA_CFLAGS += -DCONFIG_TRAFFIC_PROTECT
++# default setting for Android 4.1, 4.2
++EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
++EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
++EXTRA_CFLAGS += -DCONFIG_P2P_IPS
++ARCH := arm
++CROSS_COMPILE := arm-none-linux-gnueabi-
++KVER := 3.3.0
++#KSRC:= ../lichee/linux-3.3/
++endif
++
++ifneq ($(USER_MODULE_NAME),)
++MODULE_NAME := $(USER_MODULE_NAME)
++endif
++
++ifeq ($(CONFIG_MP_INCLUDED), y)
++MODULE_NAME := $(MODULE_NAME)_mp
++EXTRA_CFLAGS += -DCONFIG_MP_INCLUDED
++endif
++
++
++ifneq ($(KERNELRELEASE),)
++
++
++rtk_core := core/rtw_cmd.o \
++ core/rtw_security.o \
++ core/rtw_debug.o \
++ core/rtw_io.o \
++ core/rtw_ioctl_query.o \
++ core/rtw_ioctl_set.o \
++ core/rtw_ieee80211.o \
++ core/rtw_mlme.o \
++ core/rtw_mlme_ext.o \
++ core/rtw_wlan_util.o \
++ core/rtw_pwrctrl.o \
++ core/rtw_rf.o \
++ core/rtw_recv.o \
++ core/rtw_sta_mgt.o \
++ core/rtw_ap.o \
++ core/rtw_xmit.o \
++ core/rtw_p2p.o \
++ core/rtw_tdls.o \
++ core/rtw_br_ext.o \
++ core/rtw_iol.o \
++ core/rtw_sreset.o
++
++$(MODULE_NAME)-y += $(rtk_core)
++
++$(MODULE_NAME)-$(CONFIG_INTEL_WIDI) += core/rtw_intel_widi.o
++
++$(MODULE_NAME)-y += core/efuse/rtw_efuse.o
++
++$(MODULE_NAME)-y += $(_HAL_INTFS_FILES)
++
++$(MODULE_NAME)-y += $(_OS_INTFS_FILES)
++
++$(MODULE_NAME)-$(CONFIG_MP_INCLUDED) += core/rtw_mp.o \
++ core/rtw_mp_ioctl.o
++
++obj-$(CONFIG_RTL8192CU) := $(MODULE_NAME).o
++
++else
++
++export CONFIG_RTL8192CU = m
++
++all: modules
++
++modules:
++ $(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) modules
++
++strip:
++ $(CROSS_COMPILE)strip $(MODULE_NAME).ko --strip-unneeded
++
++install:
++ install -p -m 644 $(MODULE_NAME).ko $(MODDESTDIR)
++ /sbin/depmod -a ${KVER}
++
++uninstall:
++ rm -f $(MODDESTDIR)/$(MODULE_NAME).ko
++ /sbin/depmod -a ${KVER}
++
++
++config_r:
++ @echo "make config"
++ /bin/bash script/Configure script/config.in
++
++.PHONY: modules clean
++
++clean:
++ rm -fr *.mod.c *.mod *.o .*.cmd *.ko *~
++ rm .tmp_versions -fr ; rm Module.symvers -fr
++ rm -fr Module.markers ; rm -fr modules.order
++ cd core/efuse ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd core ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd hal/$(RTL871X)/$(HCI_NAME) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd hal/$(RTL871X) ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd hal ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd os_dep/linux ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++ cd os_dep ; rm -fr *.mod.c *.mod *.o .*.cmd *.ko
++endif
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,5488 @@
+/******************************************************************************
+ *
@@ -208021,9 +210487,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_cfg80211
+}
+
+#endif //CONFIG_IOCTL_CFG80211
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,11908 @@
+/******************************************************************************
+ *
@@ -219933,9 +222399,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/ioctl_linux.c
+#endif
+};
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,585 @@
+/******************************************************************************
+ *
@@ -220522,9 +222988,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/mlme_linux.c l
+
+#endif
+#endif
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,2748 @@
+/******************************************************************************
+ *
@@ -223274,9 +225740,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/os_intfs.c lin
+#endif
+ free_netdev(ndev);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1996 @@
+/******************************************************************************
+ *
@@ -225274,9 +227740,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_intf.c lin
+
+module_init(rtw_drv_entry);
+module_exit(rtw_drv_halt);
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,21 @@
+/******************************************************************************
+ *
@@ -225299,9 +227765,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/pci_ops_linux.
+#define _PCI_OPS_LINUX_C_
+
+#include <drv_types.h>
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,447 @@
+/******************************************************************************
+ *
@@ -225750,9 +228216,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/recv_linux.c l
+ _init_timer(&(preorder_ctrl->reordering_ctrl_timer), padapter->pnetdev, _rtw_reordering_ctrl_timeout_handler, preorder_ctrl);
+
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,838 @@
+/******************************************************************************
+ *
@@ -226592,9 +229058,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/rtw_android.c
+ platform_driver_unregister(&wifi_device_legacy);
+}
+#endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,1655 @@
+/******************************************************************************
+ *
@@ -228251,9 +230717,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_intf.c lin
+}
+EXPORT_SYMBOL(rtw_usb_get_sw_pointer);
+#endif //CONFIG_INTEL_PROXIM
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,648 @@
+/******************************************************************************
+ *
@@ -228903,9 +231369,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/usb_ops_linux.
+ pxmitbuf++;
+ }
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,420 @@
+/******************************************************************************
+ *
@@ -229327,9 +231793,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/linux/xmit_linux.c l
+ rtw_mstat_update(MSTAT_TYPE_SKB, MSTAT_ALLOC_SUCCESS, pkt->truesize);
+ return _rtw_xmit_entry(pkt, pnetdev);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c 2015-08-26 10:26:08.765316497 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,2299 @@
+/******************************************************************************
+ *
@@ -231630,9 +234096,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/os_dep/osdep_service.c linu
+{
+ rtw_mfree((u8*)cbuf, sizeof(*cbuf) + sizeof(void*)*cbuf->size);
+}
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/runwpa linux-rpi/drivers/net/wireless/rtl8192cu/runwpa
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/runwpa 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/runwpa 2015-08-26 10:26:08.769316552 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/runwpa linux-rpi/drivers/net/wireless/rtl8192cu/runwpa
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/runwpa 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/runwpa 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,18 @@
+#!/bin/bash
+
@@ -231652,9 +234118,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/runwpa linux-rpi/drivers/ne
+
+ fi
+fi
-diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/wlan0dhcp linux-rpi/drivers/net/wireless/rtl8192cu/wlan0dhcp
---- linux-4.1.6/drivers/net/wireless/rtl8192cu/wlan0dhcp 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/net/wireless/rtl8192cu/wlan0dhcp 2015-08-26 10:26:08.769316552 +0200
+diff -Nur linux-4.1.10/drivers/net/wireless/rtl8192cu/wlan0dhcp linux-rpi/drivers/net/wireless/rtl8192cu/wlan0dhcp
+--- linux-4.1.10/drivers/net/wireless/rtl8192cu/wlan0dhcp 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/net/wireless/rtl8192cu/wlan0dhcp 2015-10-07 16:40:51.000000000 +0200
@@ -0,0 +1,15 @@
+#!/bin/bash
+
@@ -231671,9 +234137,9 @@ diff -Nur linux-4.1.6/drivers/net/wireless/rtl8192cu/wlan0dhcp linux-rpi/drivers
+rm -f /etc/sysconfig/network-scripts/ifcfg-wlan0
+
+echo "get ip: $var1"
-diff -Nur linux-4.1.6/drivers/of/fdt.c linux-rpi/drivers/of/fdt.c
---- linux-4.1.6/drivers/of/fdt.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/of/fdt.c 2015-08-26 10:26:08.809317108 +0200
+diff -Nur linux-4.1.10/drivers/of/fdt.c linux-rpi/drivers/of/fdt.c
+--- linux-4.1.10/drivers/of/fdt.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/of/fdt.c 2015-10-07 16:40:51.000000000 +0200
@@ -933,19 +933,38 @@
/* Retrieve command line */
@@ -231718,20 +234184,9 @@ diff -Nur linux-4.1.6/drivers/of/fdt.c linux-rpi/drivers/of/fdt.c
#endif /* CONFIG_CMDLINE */
pr_debug("Command line is: %s\n", (char*)data);
-diff -Nur linux-4.1.6/drivers/pinctrl/Makefile linux-rpi/drivers/pinctrl/Makefile
---- linux-4.1.6/drivers/pinctrl/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/pinctrl/Makefile 2015-08-26 10:26:08.837317497 +0200
-@@ -38,6 +38,7 @@
- obj-$(CONFIG_PINCTRL_ST) += pinctrl-st.o
- obj-$(CONFIG_PINCTRL_ZYNQ) += pinctrl-zynq.o
-
-+obj-$(CONFIG_ARCH_BCM2708)$(CONFIG_ARCH_BCM2709) += bcm/
- obj-$(CONFIG_ARCH_BCM) += bcm/
- obj-$(CONFIG_ARCH_BERLIN) += berlin/
- obj-y += freescale/
-diff -Nur linux-4.1.6/drivers/pinctrl/bcm/pinctrl-bcm2835.c linux-rpi/drivers/pinctrl/bcm/pinctrl-bcm2835.c
---- linux-4.1.6/drivers/pinctrl/bcm/pinctrl-bcm2835.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/pinctrl/bcm/pinctrl-bcm2835.c 2015-08-26 10:26:08.837317497 +0200
+diff -Nur linux-4.1.10/drivers/pinctrl/bcm/pinctrl-bcm2835.c linux-rpi/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+--- linux-4.1.10/drivers/pinctrl/bcm/pinctrl-bcm2835.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/pinctrl/bcm/pinctrl-bcm2835.c 2015-10-07 16:40:51.000000000 +0200
@@ -47,6 +47,7 @@
#define MODULE_NAME "pinctrl-bcm2835"
#define BCM2835_NUM_GPIOS 54
@@ -231886,9 +234341,20 @@ diff -Nur linux-4.1.6/drivers/pinctrl/bcm/pinctrl-bcm2835.c linux-rpi/drivers/pi
.of_match_table = bcm2835_pinctrl_match,
},
};
-diff -Nur linux-4.1.6/drivers/power/reset/gpio-poweroff.c linux-rpi/drivers/power/reset/gpio-poweroff.c
---- linux-4.1.6/drivers/power/reset/gpio-poweroff.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/power/reset/gpio-poweroff.c 2015-08-26 10:26:08.881318109 +0200
+diff -Nur linux-4.1.10/drivers/pinctrl/Makefile linux-rpi/drivers/pinctrl/Makefile
+--- linux-4.1.10/drivers/pinctrl/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/pinctrl/Makefile 2015-10-07 16:40:51.000000000 +0200
+@@ -38,6 +38,7 @@
+ obj-$(CONFIG_PINCTRL_ST) += pinctrl-st.o
+ obj-$(CONFIG_PINCTRL_ZYNQ) += pinctrl-zynq.o
+
++obj-$(CONFIG_ARCH_BCM2708)$(CONFIG_ARCH_BCM2709) += bcm/
+ obj-$(CONFIG_ARCH_BCM) += bcm/
+ obj-$(CONFIG_ARCH_BERLIN) += berlin/
+ obj-y += freescale/
+diff -Nur linux-4.1.10/drivers/power/reset/gpio-poweroff.c linux-rpi/drivers/power/reset/gpio-poweroff.c
+--- linux-4.1.10/drivers/power/reset/gpio-poweroff.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/power/reset/gpio-poweroff.c 2015-10-07 16:40:51.000000000 +0200
@@ -48,9 +48,11 @@
static int gpio_poweroff_probe(struct platform_device *pdev)
{
@@ -231902,9 +234368,9 @@ diff -Nur linux-4.1.6/drivers/power/reset/gpio-poweroff.c linux-rpi/drivers/powe
dev_err(&pdev->dev,
"%s: pm_power_off function already registered",
__func__);
-diff -Nur linux-4.1.6/drivers/pwm/Kconfig linux-rpi/drivers/pwm/Kconfig
---- linux-4.1.6/drivers/pwm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/pwm/Kconfig 2015-08-26 10:26:08.885318164 +0200
+diff -Nur linux-4.1.10/drivers/pwm/Kconfig linux-rpi/drivers/pwm/Kconfig
+--- linux-4.1.10/drivers/pwm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/pwm/Kconfig 2015-10-07 16:40:51.000000000 +0200
@@ -85,7 +85,7 @@
config PWM_BCM2835
@@ -231914,9 +234380,9 @@ diff -Nur linux-4.1.6/drivers/pwm/Kconfig linux-rpi/drivers/pwm/Kconfig
help
PWM framework driver for BCM2835 controller (Raspberry Pi)
-diff -Nur linux-4.1.6/drivers/rtc/rtc-ds1307.c linux-rpi/drivers/rtc/rtc-ds1307.c
---- linux-4.1.6/drivers/rtc/rtc-ds1307.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/rtc/rtc-ds1307.c 2015-08-26 10:26:08.905318442 +0200
+diff -Nur linux-4.1.10/drivers/rtc/rtc-ds1307.c linux-rpi/drivers/rtc/rtc-ds1307.c
+--- linux-4.1.10/drivers/rtc/rtc-ds1307.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/rtc/rtc-ds1307.c 2015-10-07 16:40:51.000000000 +0200
@@ -1242,6 +1242,14 @@
return 0;
}
@@ -231932,9 +234398,9 @@ diff -Nur linux-4.1.6/drivers/rtc/rtc-ds1307.c linux-rpi/drivers/rtc/rtc-ds1307.
static struct i2c_driver ds1307_driver = {
.driver = {
.name = "rtc-ds1307",
-diff -Nur linux-4.1.6/drivers/spi/Kconfig linux-rpi/drivers/spi/Kconfig
---- linux-4.1.6/drivers/spi/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/spi/Kconfig 2015-08-26 10:26:09.069320718 +0200
+diff -Nur linux-4.1.10/drivers/spi/Kconfig linux-rpi/drivers/spi/Kconfig
+--- linux-4.1.10/drivers/spi/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/spi/Kconfig 2015-10-07 16:40:53.000000000 +0200
@@ -77,7 +77,7 @@
config SPI_BCM2835
@@ -231959,9 +234425,9 @@ diff -Nur linux-4.1.6/drivers/spi/Kconfig linux-rpi/drivers/spi/Kconfig
config SPI_BFIN5XX
tristate "SPI controller driver for ADI Blackfin5xx"
depends on BLACKFIN && !BF60x
-diff -Nur linux-4.1.6/drivers/spi/Makefile linux-rpi/drivers/spi/Makefile
---- linux-4.1.6/drivers/spi/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/spi/Makefile 2015-08-26 10:26:09.069320718 +0200
+diff -Nur linux-4.1.10/drivers/spi/Makefile linux-rpi/drivers/spi/Makefile
+--- linux-4.1.10/drivers/spi/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/spi/Makefile 2015-10-07 16:40:53.000000000 +0200
@@ -20,6 +20,7 @@
obj-$(CONFIG_SPI_BCM63XX_HSSPI) += spi-bcm63xx-hsspi.o
obj-$(CONFIG_SPI_BFIN5XX) += spi-bfin5xx.o
@@ -231970,9 +234436,9 @@ diff -Nur linux-4.1.6/drivers/spi/Makefile linux-rpi/drivers/spi/Makefile
obj-$(CONFIG_SPI_BFIN_SPORT) += spi-bfin-sport.o
obj-$(CONFIG_SPI_BITBANG) += spi-bitbang.o
obj-$(CONFIG_SPI_BUTTERFLY) += spi-butterfly.o
-diff -Nur linux-4.1.6/drivers/spi/spi-bcm2708.c linux-rpi/drivers/spi/spi-bcm2708.c
---- linux-4.1.6/drivers/spi/spi-bcm2708.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/spi/spi-bcm2708.c 2015-08-26 10:26:09.069320718 +0200
+diff -Nur linux-4.1.10/drivers/spi/spi-bcm2708.c linux-rpi/drivers/spi/spi-bcm2708.c
+--- linux-4.1.10/drivers/spi/spi-bcm2708.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/spi/spi-bcm2708.c 2015-10-07 16:40:53.000000000 +0200
@@ -0,0 +1,628 @@
+/*
+ * Driver for Broadcom BCM2708 SPI Controllers
@@ -232602,9 +235068,9 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2708.c linux-rpi/drivers/spi/spi-bcm270
+MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:" DRV_NAME);
-diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm2835.c
---- linux-4.1.6/drivers/spi/spi-bcm2835.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/spi/spi-bcm2835.c 2015-08-26 10:26:09.069320718 +0200
+diff -Nur linux-4.1.10/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm2835.c
+--- linux-4.1.10/drivers/spi/spi-bcm2835.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/spi/spi-bcm2835.c 2015-10-07 16:40:53.000000000 +0200
@@ -20,18 +20,22 @@
* GNU General Public License for more details.
*/
@@ -232707,7 +235173,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
static int bcm2835_spi_transfer_one_irq(struct spi_master *master,
struct spi_device *spi,
struct spi_transfer *tfr,
-@@ -229,6 +202,329 @@
+@@ -229,13 +202,337 @@
return 1;
}
@@ -232895,14 +235361,14 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
+ /* otherwise we only allow transfers within the same page
+ * to avoid wasting time on dma_mapping when it is not practical
+ */
-+ if (((size_t)tfr->tx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) {
++ if (((size_t)tfr->tx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) {
+ dev_warn_once(&spi->dev,
+ "Unaligned spi tx-transfer bridging page\n");
+ return false;
+ }
-+ if (((size_t)tfr->rx_buf & PAGE_MASK) + tfr->len > PAGE_SIZE) {
++ if (((size_t)tfr->rx_buf & (PAGE_SIZE - 1)) + tfr->len > PAGE_SIZE) {
+ dev_warn_once(&spi->dev,
-+ "Unaligned spi tx-transfer bridging page\n");
++ "Unaligned spi rx-transfer bridging page\n");
+ return false;
+ }
+
@@ -232989,7 +235455,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
+ struct spi_device *spi,
+ struct spi_transfer *tfr,
+ u32 cs,
-+ unsigned long xfer_time_us)
++ unsigned long long xfer_time_us)
+{
+ struct bcm2835_spi *bs = spi_master_get_devdata(master);
+ unsigned long timeout;
@@ -233037,7 +235503,28 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
static int bcm2835_spi_transfer_one(struct spi_master *master,
struct spi_device *spi,
struct spi_transfer *tfr)
-@@ -288,12 +584,26 @@
+ {
+ struct bcm2835_spi *bs = spi_master_get_devdata(master);
+ unsigned long spi_hz, clk_hz, cdiv;
+- unsigned long spi_used_hz, xfer_time_us;
++ unsigned long spi_used_hz;
++ unsigned long long xfer_time_us;
+ u32 cs = bcm2835_rd(bs, BCM2835_SPI_CS);
+
+ /* set clock */
+@@ -277,15 +574,21 @@
+ bs->rx_len = tfr->len;
+
+ /* calculate the estimated time in us the transfer runs */
+- xfer_time_us = tfr->len
++ xfer_time_us = (unsigned long long)tfr->len
+ * 9 /* clocks/byte - SPI-HW waits 1 clock after each byte */
+- * 1000000 / spi_used_hz;
++ * 1000000;
++ do_div(xfer_time_us, spi_used_hz);
+
+ /* for short requests run polling*/
+ if (xfer_time_us <= BCM2835_SPI_POLLING_LIMIT_US)
return bcm2835_spi_transfer_one_poll(master, spi, tfr,
cs, xfer_time_us);
@@ -233049,6 +235536,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
return bcm2835_spi_transfer_one_irq(master, spi, tfr, cs);
}
+@@ -311,6 +614,15 @@
static void bcm2835_spi_handle_err(struct spi_master *master,
struct spi_message *msg)
{
@@ -233064,7 +235552,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
bcm2835_spi_reset_hw(master);
}
-@@ -359,6 +669,8 @@
+@@ -376,6 +688,8 @@
{
int err;
struct gpio_chip *chip;
@@ -233073,7 +235561,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
/*
* sanity checking the native-chipselects
*/
-@@ -375,15 +687,42 @@
+@@ -392,15 +706,42 @@
"setup: only two native chip-selects are supported\n");
return -EINVAL;
}
@@ -233123,7 +235611,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
/* and set up the "mode" and level */
dev_info(&spi->dev, "setting up native-CS%i as GPIO %i\n",
-@@ -463,6 +802,8 @@
+@@ -481,6 +822,8 @@
goto out_clk_disable;
}
@@ -233132,7 +235620,7 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
/* initialise the hardware with the default polarities */
bcm2835_wr(bs, BCM2835_SPI_CS,
BCM2835_SPI_CS_CLEAR_RX | BCM2835_SPI_CS_CLEAR_TX);
-@@ -493,6 +834,8 @@
+@@ -511,6 +854,8 @@
clk_disable_unprepare(bs->clk);
@@ -233141,9 +235629,9 @@ diff -Nur linux-4.1.6/drivers/spi/spi-bcm2835.c linux-rpi/drivers/spi/spi-bcm283
return 0;
}
-diff -Nur linux-4.1.6/drivers/spi/spidev.c linux-rpi/drivers/spi/spidev.c
---- linux-4.1.6/drivers/spi/spidev.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/spi/spidev.c 2015-08-26 10:26:09.077320829 +0200
+diff -Nur linux-4.1.10/drivers/spi/spidev.c linux-rpi/drivers/spi/spidev.c
+--- linux-4.1.10/drivers/spi/spidev.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/spi/spidev.c 2015-10-07 16:40:53.000000000 +0200
@@ -706,6 +706,7 @@
#ifdef CONFIG_OF
static const struct of_device_id spidev_dt_ids[] = {
@@ -233152,9 +235640,9 @@ diff -Nur linux-4.1.6/drivers/spi/spidev.c linux-rpi/drivers/spi/spidev.c
{},
};
MODULE_DEVICE_TABLE(of, spidev_dt_ids);
-diff -Nur linux-4.1.6/drivers/staging/fbtft/fbtft-core.c linux-rpi/drivers/staging/fbtft/fbtft-core.c
---- linux-4.1.6/drivers/staging/fbtft/fbtft-core.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/staging/fbtft/fbtft-core.c 2015-08-26 10:26:09.109321272 +0200
+diff -Nur linux-4.1.10/drivers/staging/fbtft/fbtft-core.c linux-rpi/drivers/staging/fbtft/fbtft-core.c
+--- linux-4.1.10/drivers/staging/fbtft/fbtft-core.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/staging/fbtft/fbtft-core.c 2015-10-07 16:40:53.000000000 +0200
@@ -1074,6 +1074,11 @@
p = of_prop_next_u32(prop, NULL, &val);
if (!p)
@@ -233167,9 +235655,9 @@ diff -Nur linux-4.1.6/drivers/staging/fbtft/fbtft-core.c linux-rpi/drivers/stagi
while (p) {
if (val & FBTFT_OF_INIT_CMD) {
val &= 0xFFFF;
-diff -Nur linux-4.1.6/drivers/staging/media/lirc/Kconfig linux-rpi/drivers/staging/media/lirc/Kconfig
---- linux-4.1.6/drivers/staging/media/lirc/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/staging/media/lirc/Kconfig 2015-08-26 10:26:09.169322103 +0200
+diff -Nur linux-4.1.10/drivers/staging/media/lirc/Kconfig linux-rpi/drivers/staging/media/lirc/Kconfig
+--- linux-4.1.10/drivers/staging/media/lirc/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/staging/media/lirc/Kconfig 2015-10-07 16:40:54.000000000 +0200
@@ -32,6 +32,12 @@
help
Driver for Homebrew Parallel Port Receivers
@@ -233183,20 +235671,9 @@ diff -Nur linux-4.1.6/drivers/staging/media/lirc/Kconfig linux-rpi/drivers/stagi
config LIRC_SASEM
tristate "Sasem USB IR Remote"
depends on LIRC && USB
-diff -Nur linux-4.1.6/drivers/staging/media/lirc/Makefile linux-rpi/drivers/staging/media/lirc/Makefile
---- linux-4.1.6/drivers/staging/media/lirc/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/staging/media/lirc/Makefile 2015-08-26 10:26:09.169322103 +0200
-@@ -6,6 +6,7 @@
- obj-$(CONFIG_LIRC_BT829) += lirc_bt829.o
- obj-$(CONFIG_LIRC_IMON) += lirc_imon.o
- obj-$(CONFIG_LIRC_PARALLEL) += lirc_parallel.o
-+obj-$(CONFIG_LIRC_RPI) += lirc_rpi.o
- obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o
- obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o
- obj-$(CONFIG_LIRC_SIR) += lirc_sir.o
-diff -Nur linux-4.1.6/drivers/staging/media/lirc/lirc_rpi.c linux-rpi/drivers/staging/media/lirc/lirc_rpi.c
---- linux-4.1.6/drivers/staging/media/lirc/lirc_rpi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/staging/media/lirc/lirc_rpi.c 2015-08-26 10:26:09.169322103 +0200
+diff -Nur linux-4.1.10/drivers/staging/media/lirc/lirc_rpi.c linux-rpi/drivers/staging/media/lirc/lirc_rpi.c
+--- linux-4.1.10/drivers/staging/media/lirc/lirc_rpi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/staging/media/lirc/lirc_rpi.c 2015-10-07 16:40:54.000000000 +0200
@@ -0,0 +1,765 @@
+/*
+ * lirc_rpi.c
@@ -233963,37 +236440,20 @@ diff -Nur linux-4.1.6/drivers/staging/media/lirc/lirc_rpi.c linux-rpi/drivers/st
+
+module_param(debug, bool, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(debug, "Enable debugging messages");
-diff -Nur linux-4.1.6/drivers/thermal/Kconfig linux-rpi/drivers/thermal/Kconfig
---- linux-4.1.6/drivers/thermal/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/thermal/Kconfig 2015-08-26 10:26:11.733357477 +0200
-@@ -238,6 +238,13 @@
- enforce idle time which results in more package C-state residency. The
- user interface is exposed via generic thermal framework.
-
-+config THERMAL_BCM2835
-+ depends on RASPBERRYPI_FIRMWARE
-+ tristate "BCM2835 Thermal Driver"
-+ help
-+ This will enable temperature monitoring for the Broadcom BCM2835
-+ chip. If built as a module, it will be called 'bcm2835-thermal'.
-+
- config X86_PKG_TEMP_THERMAL
- tristate "X86 package temperature thermal driver"
- depends on X86_THERMAL_VECTOR
-diff -Nur linux-4.1.6/drivers/thermal/Makefile linux-rpi/drivers/thermal/Makefile
---- linux-4.1.6/drivers/thermal/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/thermal/Makefile 2015-08-26 10:26:11.733357477 +0200
-@@ -33,6 +33,7 @@
- obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
- obj-$(CONFIG_DB8500_CPUFREQ_COOLING) += db8500_cpufreq_cooling.o
- obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o
-+obj-$(CONFIG_THERMAL_BCM2835) += bcm2835-thermal.o
- obj-$(CONFIG_X86_PKG_TEMP_THERMAL) += x86_pkg_temp_thermal.o
- obj-$(CONFIG_INTEL_SOC_DTS_THERMAL) += intel_soc_dts_thermal.o
- obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/
-diff -Nur linux-4.1.6/drivers/thermal/bcm2835-thermal.c linux-rpi/drivers/thermal/bcm2835-thermal.c
---- linux-4.1.6/drivers/thermal/bcm2835-thermal.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/thermal/bcm2835-thermal.c 2015-08-26 10:26:11.733357477 +0200
+diff -Nur linux-4.1.10/drivers/staging/media/lirc/Makefile linux-rpi/drivers/staging/media/lirc/Makefile
+--- linux-4.1.10/drivers/staging/media/lirc/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/staging/media/lirc/Makefile 2015-10-07 16:40:54.000000000 +0200
+@@ -6,6 +6,7 @@
+ obj-$(CONFIG_LIRC_BT829) += lirc_bt829.o
+ obj-$(CONFIG_LIRC_IMON) += lirc_imon.o
+ obj-$(CONFIG_LIRC_PARALLEL) += lirc_parallel.o
++obj-$(CONFIG_LIRC_RPI) += lirc_rpi.o
+ obj-$(CONFIG_LIRC_SASEM) += lirc_sasem.o
+ obj-$(CONFIG_LIRC_SERIAL) += lirc_serial.o
+ obj-$(CONFIG_LIRC_SIR) += lirc_sir.o
+diff -Nur linux-4.1.10/drivers/thermal/bcm2835-thermal.c linux-rpi/drivers/thermal/bcm2835-thermal.c
+--- linux-4.1.10/drivers/thermal/bcm2835-thermal.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/thermal/bcm2835-thermal.c 2015-10-07 16:40:55.000000000 +0200
@@ -0,0 +1,141 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -234136,9 +236596,37 @@ diff -Nur linux-4.1.6/drivers/thermal/bcm2835-thermal.c linux-rpi/drivers/therma
+MODULE_AUTHOR("Noralf Trønnes");
+MODULE_DESCRIPTION("Thermal driver for bcm2835 chip");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/drivers/tty/serial/8250/8250_core.c linux-rpi/drivers/tty/serial/8250/8250_core.c
---- linux-4.1.6/drivers/tty/serial/8250/8250_core.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/tty/serial/8250/8250_core.c 2015-08-26 10:26:11.745357642 +0200
+diff -Nur linux-4.1.10/drivers/thermal/Kconfig linux-rpi/drivers/thermal/Kconfig
+--- linux-4.1.10/drivers/thermal/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/thermal/Kconfig 2015-10-07 16:40:55.000000000 +0200
+@@ -238,6 +238,13 @@
+ enforce idle time which results in more package C-state residency. The
+ user interface is exposed via generic thermal framework.
+
++config THERMAL_BCM2835
++ depends on RASPBERRYPI_FIRMWARE
++ tristate "BCM2835 Thermal Driver"
++ help
++ This will enable temperature monitoring for the Broadcom BCM2835
++ chip. If built as a module, it will be called 'bcm2835-thermal'.
++
+ config X86_PKG_TEMP_THERMAL
+ tristate "X86 package temperature thermal driver"
+ depends on X86_THERMAL_VECTOR
+diff -Nur linux-4.1.10/drivers/thermal/Makefile linux-rpi/drivers/thermal/Makefile
+--- linux-4.1.10/drivers/thermal/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/thermal/Makefile 2015-10-07 16:40:55.000000000 +0200
+@@ -33,6 +33,7 @@
+ obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
+ obj-$(CONFIG_DB8500_CPUFREQ_COOLING) += db8500_cpufreq_cooling.o
+ obj-$(CONFIG_INTEL_POWERCLAMP) += intel_powerclamp.o
++obj-$(CONFIG_THERMAL_BCM2835) += bcm2835-thermal.o
+ obj-$(CONFIG_X86_PKG_TEMP_THERMAL) += x86_pkg_temp_thermal.o
+ obj-$(CONFIG_INTEL_SOC_DTS_THERMAL) += intel_soc_dts_thermal.o
+ obj-$(CONFIG_TI_SOC_THERMAL) += ti-soc-thermal/
+diff -Nur linux-4.1.10/drivers/tty/serial/8250/8250_core.c linux-rpi/drivers/tty/serial/8250/8250_core.c
+--- linux-4.1.10/drivers/tty/serial/8250/8250_core.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/tty/serial/8250/8250_core.c 2015-10-07 16:40:55.000000000 +0200
@@ -3262,6 +3262,8 @@
if (nr_uarts > UART_NR)
@@ -234148,9 +236636,9 @@ diff -Nur linux-4.1.6/drivers/tty/serial/8250/8250_core.c linux-rpi/drivers/tty/
for (i = 0; i < nr_uarts; i++) {
struct uart_8250_port *up = &serial8250_ports[i];
-diff -Nur linux-4.1.6/drivers/tty/serial/amba-pl011.c linux-rpi/drivers/tty/serial/amba-pl011.c
---- linux-4.1.6/drivers/tty/serial/amba-pl011.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/tty/serial/amba-pl011.c 2015-08-26 10:26:11.745357642 +0200
+diff -Nur linux-4.1.10/drivers/tty/serial/amba-pl011.c linux-rpi/drivers/tty/serial/amba-pl011.c
+--- linux-4.1.10/drivers/tty/serial/amba-pl011.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/tty/serial/amba-pl011.c 2015-10-07 16:40:55.000000000 +0200
@@ -85,7 +85,7 @@
static unsigned int get_fifosize_arm(struct amba_device *dev)
@@ -234160,20 +236648,9 @@ diff -Nur linux-4.1.6/drivers/tty/serial/amba-pl011.c linux-rpi/drivers/tty/seri
}
static struct vendor_data vendor_arm = {
-diff -Nur linux-4.1.6/drivers/usb/Makefile linux-rpi/drivers/usb/Makefile
---- linux-4.1.6/drivers/usb/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/Makefile 2015-08-26 10:26:11.769357972 +0200
-@@ -7,6 +7,7 @@
- obj-$(CONFIG_USB) += core/
- obj-$(CONFIG_USB_SUPPORT) += phy/
-
-+obj-$(CONFIG_USB_DWCOTG) += host/
- obj-$(CONFIG_USB_DWC3) += dwc3/
- obj-$(CONFIG_USB_DWC2) += dwc2/
- obj-$(CONFIG_USB_ISP1760) += isp1760/
-diff -Nur linux-4.1.6/drivers/usb/core/generic.c linux-rpi/drivers/usb/core/generic.c
---- linux-4.1.6/drivers/usb/core/generic.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/core/generic.c 2015-08-26 10:26:11.773358027 +0200
+diff -Nur linux-4.1.10/drivers/usb/core/generic.c linux-rpi/drivers/usb/core/generic.c
+--- linux-4.1.10/drivers/usb/core/generic.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/core/generic.c 2015-10-07 16:40:56.000000000 +0200
@@ -152,6 +152,7 @@
dev_warn(&udev->dev,
"no configuration chosen from %d choice%s\n",
@@ -234182,9 +236659,9 @@ diff -Nur linux-4.1.6/drivers/usb/core/generic.c linux-rpi/drivers/usb/core/gene
}
return i;
}
-diff -Nur linux-4.1.6/drivers/usb/core/hub.c linux-rpi/drivers/usb/core/hub.c
---- linux-4.1.6/drivers/usb/core/hub.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/core/hub.c 2015-08-26 10:26:11.777358082 +0200
+diff -Nur linux-4.1.10/drivers/usb/core/hub.c linux-rpi/drivers/usb/core/hub.c
+--- linux-4.1.10/drivers/usb/core/hub.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/core/hub.c 2015-10-07 16:40:56.000000000 +0200
@@ -4906,7 +4906,7 @@
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
u16 status = 0, unused;
@@ -234194,9 +236671,9 @@ diff -Nur linux-4.1.6/drivers/usb/core/hub.c linux-rpi/drivers/usb/core/hub.c
usb_clear_port_feature(hdev, port1,
USB_PORT_FEAT_C_OVER_CURRENT);
msleep(100); /* Cool down */
-diff -Nur linux-4.1.6/drivers/usb/core/message.c linux-rpi/drivers/usb/core/message.c
---- linux-4.1.6/drivers/usb/core/message.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/core/message.c 2015-08-26 10:26:11.777358082 +0200
+diff -Nur linux-4.1.10/drivers/usb/core/message.c linux-rpi/drivers/usb/core/message.c
+--- linux-4.1.10/drivers/usb/core/message.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/core/message.c 2015-10-07 16:40:56.000000000 +0200
@@ -1872,6 +1872,85 @@
if (cp->string == NULL &&
!(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
@@ -234283,9 +236760,9 @@ diff -Nur linux-4.1.6/drivers/usb/core/message.c linux-rpi/drivers/usb/core/mess
/* Now that the interfaces are installed, re-enable LPM. */
usb_unlocked_enable_lpm(dev);
-diff -Nur linux-4.1.6/drivers/usb/core/otg_whitelist.h linux-rpi/drivers/usb/core/otg_whitelist.h
---- linux-4.1.6/drivers/usb/core/otg_whitelist.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/core/otg_whitelist.h 2015-08-26 10:26:11.777358082 +0200
+diff -Nur linux-4.1.10/drivers/usb/core/otg_whitelist.h linux-rpi/drivers/usb/core/otg_whitelist.h
+--- linux-4.1.10/drivers/usb/core/otg_whitelist.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/core/otg_whitelist.h 2015-10-07 16:40:56.000000000 +0200
@@ -19,33 +19,82 @@
static struct usb_device_id whitelist_table [] = {
@@ -234439,9 +236916,9 @@ diff -Nur linux-4.1.6/drivers/usb/core/otg_whitelist.h linux-rpi/drivers/usb/cor
return 0;
}
-diff -Nur linux-4.1.6/drivers/usb/gadget/file_storage.c linux-rpi/drivers/usb/gadget/file_storage.c
---- linux-4.1.6/drivers/usb/gadget/file_storage.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/gadget/file_storage.c 2015-08-26 10:26:11.785358192 +0200
+diff -Nur linux-4.1.10/drivers/usb/gadget/file_storage.c linux-rpi/drivers/usb/gadget/file_storage.c
+--- linux-4.1.10/drivers/usb/gadget/file_storage.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/gadget/file_storage.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,3676 @@
+/*
+ * file_storage.c -- File-backed USB Storage Gadget, for USB development
@@ -238119,180 +240596,9 @@ diff -Nur linux-4.1.6/drivers/usb/gadget/file_storage.c linux-rpi/drivers/usb/ga
+ kref_put(&fsg->ref, fsg_release);
+}
+module_exit(fsg_cleanup);
-diff -Nur linux-4.1.6/drivers/usb/host/Kconfig linux-rpi/drivers/usb/host/Kconfig
---- linux-4.1.6/drivers/usb/host/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/host/Kconfig 2015-08-26 10:26:11.801358412 +0200
-@@ -738,6 +738,19 @@
- To compile this driver a module, choose M here: the module
- will be called "hwa-hc".
-
-+config USB_DWCOTG
-+ tristate "Synopsis DWC host support"
-+ depends on USB
-+ help
-+ The Synopsis DWC controller is a dual-role
-+ host/peripheral/OTG ("On The Go") USB controllers.
-+
-+ Enable this option to support this IP in host controller mode.
-+ If unsure, say N.
-+
-+ To compile this driver as a module, choose M here: the
-+ modules built will be called dwc_otg and dwc_common_port.
-+
- config USB_IMX21_HCD
- tristate "i.MX21 HCD support"
- depends on ARM && ARCH_MXC
-diff -Nur linux-4.1.6/drivers/usb/host/Makefile linux-rpi/drivers/usb/host/Makefile
---- linux-4.1.6/drivers/usb/host/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/usb/host/Makefile 2015-08-26 10:26:11.801358412 +0200
-@@ -68,6 +68,8 @@
- obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
- obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
- obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
-+
-+obj-$(CONFIG_USB_DWCOTG) += dwc_otg/ dwc_common_port/
- obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
- obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
- obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile linux-rpi/drivers/usb/host/dwc_common_port/Makefile
---- linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile 2015-08-26 10:26:11.801358412 +0200
-@@ -0,0 +1,58 @@
-+#
-+# Makefile for DWC_common library
-+#
-+
-+ifneq ($(KERNELRELEASE),)
-+
-+ccflags-y += -DDWC_LINUX
-+#ccflags-y += -DDEBUG
-+#ccflags-y += -DDWC_DEBUG_REGS
-+#ccflags-y += -DDWC_DEBUG_MEMORY
-+
-+ccflags-y += -DDWC_LIBMODULE
-+ccflags-y += -DDWC_CCLIB
-+#ccflags-y += -DDWC_CRYPTOLIB
-+ccflags-y += -DDWC_NOTIFYLIB
-+ccflags-y += -DDWC_UTFLIB
-+
-+obj-$(CONFIG_USB_DWCOTG) += dwc_common_port_lib.o
-+dwc_common_port_lib-objs := dwc_cc.o dwc_modpow.o dwc_dh.o \
-+ dwc_crypto.o dwc_notifier.o \
-+ dwc_common_linux.o dwc_mem.o
-+
-+kernrelwd := $(subst ., ,$(KERNELRELEASE))
-+kernrel3 := $(word 1,$(kernrelwd)).$(word 2,$(kernrelwd)).$(word 3,$(kernrelwd))
-+
-+ifneq ($(kernrel3),2.6.20)
-+# grayg - I only know that we use ccflags-y in 2.6.31 actually
-+ccflags-y += $(CPPFLAGS)
-+endif
-+
-+else
-+
-+#ifeq ($(KDIR),)
-+#$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
-+#endif
-+
-+ifeq ($(ARCH),)
-+$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
-+ cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
-+endif
-+
-+ifeq ($(DOXYGEN),)
-+DOXYGEN := doxygen
-+endif
-+
-+default:
-+ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
-+
-+docs: $(wildcard *.[hc]) doc/doxygen.cfg
-+ $(DOXYGEN) doc/doxygen.cfg
-+
-+tags: $(wildcard *.[hc])
-+ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
-+
-+endif
-+
-+clean:
-+ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile.fbsd linux-rpi/drivers/usb/host/dwc_common_port/Makefile.fbsd
---- linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile.fbsd 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile.fbsd 2015-08-26 10:26:11.801358412 +0200
-@@ -0,0 +1,17 @@
-+CFLAGS += -I/sys/i386/compile/GENERIC -I/sys/i386/include -I/usr/include
-+CFLAGS += -DDWC_FREEBSD
-+CFLAGS += -DDEBUG
-+#CFLAGS += -DDWC_DEBUG_REGS
-+#CFLAGS += -DDWC_DEBUG_MEMORY
-+
-+#CFLAGS += -DDWC_LIBMODULE
-+#CFLAGS += -DDWC_CCLIB
-+#CFLAGS += -DDWC_CRYPTOLIB
-+#CFLAGS += -DDWC_NOTIFYLIB
-+#CFLAGS += -DDWC_UTFLIB
-+
-+KMOD = dwc_common_port_lib
-+SRCS = dwc_cc.c dwc_modpow.c dwc_dh.c dwc_crypto.c dwc_notifier.c \
-+ dwc_common_fbsd.c dwc_mem.c
-+
-+.include <bsd.kmod.mk>
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile.linux linux-rpi/drivers/usb/host/dwc_common_port/Makefile.linux
---- linux-4.1.6/drivers/usb/host/dwc_common_port/Makefile.linux 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile.linux 2015-08-26 10:26:11.801358412 +0200
-@@ -0,0 +1,49 @@
-+#
-+# Makefile for DWC_common library
-+#
-+ifneq ($(KERNELRELEASE),)
-+
-+ccflags-y += -DDWC_LINUX
-+#ccflags-y += -DDEBUG
-+#ccflags-y += -DDWC_DEBUG_REGS
-+#ccflags-y += -DDWC_DEBUG_MEMORY
-+
-+ccflags-y += -DDWC_LIBMODULE
-+ccflags-y += -DDWC_CCLIB
-+ccflags-y += -DDWC_CRYPTOLIB
-+ccflags-y += -DDWC_NOTIFYLIB
-+ccflags-y += -DDWC_UTFLIB
-+
-+obj-m := dwc_common_port_lib.o
-+dwc_common_port_lib-objs := dwc_cc.o dwc_modpow.o dwc_dh.o \
-+ dwc_crypto.o dwc_notifier.o \
-+ dwc_common_linux.o dwc_mem.o
-+
-+else
-+
-+ifeq ($(KDIR),)
-+$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
-+endif
-+
-+ifeq ($(ARCH),)
-+$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
-+ cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
-+endif
-+
-+ifeq ($(DOXYGEN),)
-+DOXYGEN := doxygen
-+endif
-+
-+default:
-+ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
-+
-+docs: $(wildcard *.[hc]) doc/doxygen.cfg
-+ $(DOXYGEN) doc/doxygen.cfg
-+
-+tags: $(wildcard *.[hc])
-+ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
-+
-+endif
-+
-+clean:
-+ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/changes.txt linux-rpi/drivers/usb/host/dwc_common_port/changes.txt
---- linux-4.1.6/drivers/usb/host/dwc_common_port/changes.txt 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/changes.txt 2015-08-26 10:26:11.801358412 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/changes.txt linux-rpi/drivers/usb/host/dwc_common_port/changes.txt
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/changes.txt 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/changes.txt 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,174 @@
+
+dwc_read_reg32() and friends now take an additional parameter, a pointer to an
@@ -238468,9 +240774,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/changes.txt linux-rpi/dri
+A DWC_LIBMODULE #define has also been added. If this is not defined, then the
+module code in dwc_common_linux.c is not compiled in. This allows linking the
+library code directly into a driver module, instead of as a standalone module.
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/doc/doxygen.cfg linux-rpi/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
---- linux-4.1.6/drivers/usb/host/dwc_common_port/doc/doxygen.cfg 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/doc/doxygen.cfg 2015-08-26 10:26:11.801358412 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/doc/doxygen.cfg linux-rpi/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/doc/doxygen.cfg 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/doc/doxygen.cfg 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,270 @@
+# Doxyfile 1.4.5
+
@@ -238742,9 +241048,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/doc/doxygen.cfg linux-rpi
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.c 2015-08-26 10:26:11.801358412 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_cc.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_cc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,532 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_cc.c $
@@ -239278,9 +241584,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.c linux-rpi/driver
+}
+
+#endif /* DWC_CCLIB */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_cc.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_cc.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_cc.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,224 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_cc.h $
@@ -239506,9 +241812,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_cc.h linux-rpi/driver
+#endif
+
+#endif /* _DWC_CC_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1308 @@
+#include "dwc_os.h"
+#include "dwc_list.h"
@@ -240818,9 +243124,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c linux-r
+{
+ return wq->pending;
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_linux.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_linux.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_linux.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_linux.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_linux.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_linux.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1434 @@
+#include <linux/kernel.h>
+#include <linux/init.h>
@@ -242256,9 +244562,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_linux.c linux-
+MODULE_LICENSE ("GPL");
+
+#endif /* DWC_LIBMODULE */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1275 @@
+#include "dwc_os.h"
+#include "dwc_list.h"
@@ -243535,9 +245841,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c linux-r
+{
+ return wq->pending;
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_crypto.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_crypto.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,308 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_crypto.c $
@@ -243847,9 +246153,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.c linux-rpi/dr
+}
+
+#endif /* DWC_CRYPTOLIB */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_crypto.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_crypto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_crypto.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,111 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_crypto.h $
@@ -243962,9 +246268,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_crypto.h linux-rpi/dr
+#endif
+
+#endif /* _DWC_CRYPTO_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_dh.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_dh.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,291 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_dh.c $
@@ -244257,9 +246563,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.c linux-rpi/driver
+#endif /* !CONFIG_MACH_IPMATE */
+
+#endif /* DWC_CRYPTOLIB */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_dh.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_dh.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_dh.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,106 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_dh.h $
@@ -244367,9 +246673,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_dh.h linux-rpi/driver
+#endif
+
+#endif /* _DWC_DH_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_list.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_list.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_list.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_list.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_list.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_list.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_list.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_list.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,594 @@
+/* $OpenBSD: queue.h,v 1.26 2004/05/04 16:59:32 grange Exp $ */
+/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
@@ -244965,9 +247271,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_list.h linux-rpi/driv
+#endif
+
+#endif /* _DWC_LIST_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_mem.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_mem.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_mem.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_mem.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_mem.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_mem.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_mem.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_mem.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,245 @@
+/* Memory Debugging */
+#ifdef DWC_DEBUG_MEMORY
@@ -245214,9 +247520,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_mem.c linux-rpi/drive
+}
+
+#endif /* DWC_DEBUG_MEMORY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_modpow.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_modpow.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,636 @@
+/* Bignum routines adapted from PUTTY sources. PuTTY copyright notice follows.
+ *
@@ -245854,9 +248160,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.c linux-rpi/dr
+#endif /* CONFIG_MACH_IPMATE */
+
+#endif /*DWC_CRYPTOLIB */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_modpow.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_modpow.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_modpow.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,34 @@
+/*
+ * dwc_modpow.h
@@ -245892,9 +248198,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_modpow.h linux-rpi/dr
+#endif
+
+#endif /* _LINUX_BIGNUM_H */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.c
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_notifier.c linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.c
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_notifier.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,319 @@
+#ifdef DWC_NOTIFYLIB
+
@@ -246215,9 +248521,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.c linux-rpi/
+}
+
+#endif /* DWC_NOTIFYLIB */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_notifier.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_notifier.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_notifier.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,122 @@
+
+#ifndef __DWC_NOTIFIER_H__
@@ -246341,9 +248647,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_notifier.h linux-rpi/
+#endif
+
+#endif /* __DWC_NOTIFIER_H__ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_os.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_os.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_os.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_os.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_os.h linux-rpi/drivers/usb/host/dwc_common_port/dwc_os.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/dwc_os.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/dwc_os.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1276 @@
+/* =========================================================================
+ * $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_os.h $
@@ -247621,9 +249927,145 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/dwc_os.h linux-rpi/driver
+#endif
+
+#endif /* _DWC_OS_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/usb.h linux-rpi/drivers/usb/host/dwc_common_port/usb.h
---- linux-4.1.6/drivers/usb/host/dwc_common_port/usb.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_common_port/usb.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile linux-rpi/drivers/usb/host/dwc_common_port/Makefile
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,58 @@
++#
++# Makefile for DWC_common library
++#
++
++ifneq ($(KERNELRELEASE),)
++
++ccflags-y += -DDWC_LINUX
++#ccflags-y += -DDEBUG
++#ccflags-y += -DDWC_DEBUG_REGS
++#ccflags-y += -DDWC_DEBUG_MEMORY
++
++ccflags-y += -DDWC_LIBMODULE
++ccflags-y += -DDWC_CCLIB
++#ccflags-y += -DDWC_CRYPTOLIB
++ccflags-y += -DDWC_NOTIFYLIB
++ccflags-y += -DDWC_UTFLIB
++
++obj-$(CONFIG_USB_DWCOTG) += dwc_common_port_lib.o
++dwc_common_port_lib-objs := dwc_cc.o dwc_modpow.o dwc_dh.o \
++ dwc_crypto.o dwc_notifier.o \
++ dwc_common_linux.o dwc_mem.o
++
++kernrelwd := $(subst ., ,$(KERNELRELEASE))
++kernrel3 := $(word 1,$(kernrelwd)).$(word 2,$(kernrelwd)).$(word 3,$(kernrelwd))
++
++ifneq ($(kernrel3),2.6.20)
++# grayg - I only know that we use ccflags-y in 2.6.31 actually
++ccflags-y += $(CPPFLAGS)
++endif
++
++else
++
++#ifeq ($(KDIR),)
++#$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
++#endif
++
++ifeq ($(ARCH),)
++$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
++ cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
++endif
++
++ifeq ($(DOXYGEN),)
++DOXYGEN := doxygen
++endif
++
++default:
++ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
++
++docs: $(wildcard *.[hc]) doc/doxygen.cfg
++ $(DOXYGEN) doc/doxygen.cfg
++
++tags: $(wildcard *.[hc])
++ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
++
++endif
++
++clean:
++ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile.fbsd linux-rpi/drivers/usb/host/dwc_common_port/Makefile.fbsd
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile.fbsd 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile.fbsd 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,17 @@
++CFLAGS += -I/sys/i386/compile/GENERIC -I/sys/i386/include -I/usr/include
++CFLAGS += -DDWC_FREEBSD
++CFLAGS += -DDEBUG
++#CFLAGS += -DDWC_DEBUG_REGS
++#CFLAGS += -DDWC_DEBUG_MEMORY
++
++#CFLAGS += -DDWC_LIBMODULE
++#CFLAGS += -DDWC_CCLIB
++#CFLAGS += -DDWC_CRYPTOLIB
++#CFLAGS += -DDWC_NOTIFYLIB
++#CFLAGS += -DDWC_UTFLIB
++
++KMOD = dwc_common_port_lib
++SRCS = dwc_cc.c dwc_modpow.c dwc_dh.c dwc_crypto.c dwc_notifier.c \
++ dwc_common_fbsd.c dwc_mem.c
++
++.include <bsd.kmod.mk>
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile.linux linux-rpi/drivers/usb/host/dwc_common_port/Makefile.linux
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/Makefile.linux 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/Makefile.linux 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,49 @@
++#
++# Makefile for DWC_common library
++#
++ifneq ($(KERNELRELEASE),)
++
++ccflags-y += -DDWC_LINUX
++#ccflags-y += -DDEBUG
++#ccflags-y += -DDWC_DEBUG_REGS
++#ccflags-y += -DDWC_DEBUG_MEMORY
++
++ccflags-y += -DDWC_LIBMODULE
++ccflags-y += -DDWC_CCLIB
++ccflags-y += -DDWC_CRYPTOLIB
++ccflags-y += -DDWC_NOTIFYLIB
++ccflags-y += -DDWC_UTFLIB
++
++obj-m := dwc_common_port_lib.o
++dwc_common_port_lib-objs := dwc_cc.o dwc_modpow.o dwc_dh.o \
++ dwc_crypto.o dwc_notifier.o \
++ dwc_common_linux.o dwc_mem.o
++
++else
++
++ifeq ($(KDIR),)
++$(error Must give "KDIR=/path/to/kernel/source" on command line or in environment)
++endif
++
++ifeq ($(ARCH),)
++$(error Must give "ARCH=<arch>" on command line or in environment. Also, if \
++ cross-compiling, must give "CROSS_COMPILE=/path/to/compiler/plus/tool-prefix-")
++endif
++
++ifeq ($(DOXYGEN),)
++DOXYGEN := doxygen
++endif
++
++default:
++ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
++
++docs: $(wildcard *.[hc]) doc/doxygen.cfg
++ $(DOXYGEN) doc/doxygen.cfg
++
++tags: $(wildcard *.[hc])
++ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
++
++endif
++
++clean:
++ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_common_port/usb.h linux-rpi/drivers/usb/host/dwc_common_port/usb.h
+--- linux-4.1.10/drivers/usb/host/dwc_common_port/usb.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_common_port/usb.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,946 @@
+/*
+ * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -248571,95 +251013,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_common_port/usb.h linux-rpi/drivers/u
+#endif
+
+#endif /* _USB_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/Makefile linux-rpi/drivers/usb/host/dwc_otg/Makefile
---- linux-4.1.6/drivers/usb/host/dwc_otg/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/Makefile 2015-08-26 10:26:11.805358467 +0200
-@@ -0,0 +1,82 @@
-+#
-+# Makefile for DWC_otg Highspeed USB controller driver
-+#
-+
-+ifneq ($(KERNELRELEASE),)
-+
-+# Use the BUS_INTERFACE variable to compile the software for either
-+# PCI(PCI_INTERFACE) or LM(LM_INTERFACE) bus.
-+ifeq ($(BUS_INTERFACE),)
-+# BUS_INTERFACE = -DPCI_INTERFACE
-+# BUS_INTERFACE = -DLM_INTERFACE
-+ BUS_INTERFACE = -DPLATFORM_INTERFACE
-+endif
-+
-+#ccflags-y += -DDEBUG
-+#ccflags-y += -DDWC_OTG_DEBUGLEV=1 # reduce common debug msgs
-+
-+# Use one of the following flags to compile the software in host-only or
-+# device-only mode.
-+#ccflags-y += -DDWC_HOST_ONLY
-+#ccflags-y += -DDWC_DEVICE_ONLY
-+
-+ccflags-y += -Dlinux -DDWC_HS_ELECT_TST
-+#ccflags-y += -DDWC_EN_ISOC
-+ccflags-y += -I$(obj)/../dwc_common_port
-+#ccflags-y += -I$(PORTLIB)
-+ccflags-y += -DDWC_LINUX
-+ccflags-y += $(CFI)
-+ccflags-y += $(BUS_INTERFACE)
-+#ccflags-y += -DDWC_DEV_SRPCAP
-+
-+obj-$(CONFIG_USB_DWCOTG) += dwc_otg.o
-+
-+dwc_otg-objs := dwc_otg_driver.o dwc_otg_attr.o
-+dwc_otg-objs += dwc_otg_cil.o dwc_otg_cil_intr.o
-+dwc_otg-objs += dwc_otg_pcd_linux.o dwc_otg_pcd.o dwc_otg_pcd_intr.o
-+dwc_otg-objs += dwc_otg_hcd.o dwc_otg_hcd_linux.o dwc_otg_hcd_intr.o dwc_otg_hcd_queue.o dwc_otg_hcd_ddma.o
-+dwc_otg-objs += dwc_otg_adp.o
-+dwc_otg-objs += dwc_otg_fiq_fsm.o
-+dwc_otg-objs += dwc_otg_fiq_stub.o
-+ifneq ($(CFI),)
-+dwc_otg-objs += dwc_otg_cfi.o
-+endif
-+
-+kernrelwd := $(subst ., ,$(KERNELRELEASE))
-+kernrel3 := $(word 1,$(kernrelwd)).$(word 2,$(kernrelwd)).$(word 3,$(kernrelwd))
-+
-+ifneq ($(kernrel3),2.6.20)
-+ccflags-y += $(CPPFLAGS)
-+endif
-+
-+else
-+
-+PWD := $(shell pwd)
-+PORTLIB := $(PWD)/../dwc_common_port
-+
-+# Command paths
-+CTAGS := $(CTAGS)
-+DOXYGEN := $(DOXYGEN)
-+
-+default: portlib
-+ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
-+
-+install: default
-+ $(MAKE) -C$(KDIR) M=$(PORTLIB) modules_install
-+ $(MAKE) -C$(KDIR) M=$(PWD) modules_install
-+
-+portlib:
-+ $(MAKE) -C$(KDIR) M=$(PORTLIB) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
-+ cp $(PORTLIB)/Module.symvers $(PWD)/
-+
-+docs: $(wildcard *.[hc]) doc/doxygen.cfg
-+ $(DOXYGEN) doc/doxygen.cfg
-+
-+tags: $(wildcard *.[hc])
-+ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
-+
-+
-+clean:
-+ rm -rf *.o *.ko .*cmd *.mod.c .tmp_versions Module.symvers
-+
-+endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/doc/doxygen.cfg linux-rpi/drivers/usb/host/dwc_otg/doc/doxygen.cfg
---- linux-4.1.6/drivers/usb/host/dwc_otg/doc/doxygen.cfg 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/doc/doxygen.cfg 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/doc/doxygen.cfg linux-rpi/drivers/usb/host/dwc_otg/doc/doxygen.cfg
+--- linux-4.1.10/drivers/usb/host/dwc_otg/doc/doxygen.cfg 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/doc/doxygen.cfg 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,224 @@
+# Doxyfile 1.3.9.1
+
@@ -248885,9 +251241,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/doc/doxygen.cfg linux-rpi/drivers
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dummy_audio.c linux-rpi/drivers/usb/host/dwc_otg/dummy_audio.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dummy_audio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dummy_audio.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dummy_audio.c linux-rpi/drivers/usb/host/dwc_otg/dummy_audio.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dummy_audio.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dummy_audio.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1575 @@
+/*
+ * zero.c -- Gadget Zero, for USB development
@@ -250464,9 +252820,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dummy_audio.c linux-rpi/drivers/u
+ remove_proc_entry("isoc_test", NULL);
+}
+module_exit (cleanup);
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_cfi_common.h linux-rpi/drivers/usb/host/dwc_otg/dwc_cfi_common.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_cfi_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_cfi_common.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_cfi_common.h linux-rpi/drivers/usb/host/dwc_otg/dwc_cfi_common.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_cfi_common.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_cfi_common.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,142 @@
+/* ==========================================================================
+ * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
@@ -250610,9 +252966,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_cfi_common.h linux-rpi/driver
+typedef struct cfi_string cfi_string_t;
+
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_adp.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_adp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,854 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_adp.c $
@@ -251468,9 +253824,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.c linux-rpi/drivers/u
+#endif
+ return 1;
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_adp.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_adp.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_adp.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,80 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_adp.h $
@@ -251552,9 +253908,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_adp.h linux-rpi/drivers/u
+extern int32_t dwc_otg_adp_handle_srp_intr(dwc_otg_core_if_t * core_if);
+
+#endif //__DWC_OTG_ADP_H__
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_attr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_attr.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1210 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_attr.c $
@@ -252766,9 +255122,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.c linux-rpi/drivers/
+ device_remove_file(&dev->dev, &dev_attr_sleep_status);
+#endif
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_attr.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_attr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_attr.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,89 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_attr.h $
@@ -252859,9 +255215,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_attr.h linux-rpi/drivers/
+#endif
+ );
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cfi.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cfi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1876 @@
+/* ==========================================================================
+ * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
@@ -254739,9 +257095,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.c linux-rpi/drivers/u
+}
+
+#endif //DWC_UTE_CFI
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cfi.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cfi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cfi.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,320 @@
+/* ==========================================================================
+ * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
@@ -255063,9 +257419,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cfi.h linux-rpi/drivers/u
+int cfi_setup(struct dwc_otg_pcd *pcd, struct cfi_usb_ctrlrequest *ctrl);
+
+#endif /* (__DWC_OTG_CFI_H__) */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,7141 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_cil.c $
@@ -255261,7 +257617,7 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.c linux-rpi/drivers/u
+ core_if->hptxfsiz.d32 =
+ DWC_READ_REG32(&core_if->core_global_regs->hptxfsiz);
+ gusbcfg.d32 = DWC_READ_REG32(&core_if->core_global_regs->gusbcfg);
-+ gusbcfg.b.force_host_mode = 0;
++ gusbcfg.b.force_host_mode = 1;
+ DWC_WRITE_REG32(&core_if->core_global_regs->gusbcfg, gusbcfg.d32);
+ dwc_mdelay(100);
+ }
@@ -262208,9 +264564,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.c linux-rpi/drivers/u
+ dwc_otg_pcd_start_srp_timer(core_if);
+ return;
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1464 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_cil.h $
@@ -263676,9 +266032,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil.h linux-rpi/drivers/u
+//////////////////////////////////////////////////////////////////////
+
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1594 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_cil_intr.c $
@@ -265274,9 +267630,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c linux-rpi/driv
+ DWC_SPINUNLOCK(core_if->lock);
+ return retval;
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_core_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_core_if.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_core_if.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_core_if.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_core_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_core_if.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_core_if.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_core_if.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,705 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_core_if.h $
@@ -265983,9 +268339,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_core_if.h linux-rpi/drive
+/** @} */
+
+#endif /* __DWC_CORE_IF_H__ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_dbg.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_dbg.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_dbg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_dbg.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_dbg.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_dbg.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_dbg.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_dbg.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,117 @@
+/* ==========================================================================
+ *
@@ -266104,9 +268460,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_dbg.h linux-rpi/drivers/u
+
+#endif /*DEBUG*/
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_driver.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_driver.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1757 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_driver.c $
@@ -267865,9 +270221,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.c linux-rpi/driver
+ </td></tr>
+
+*/
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_driver.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_driver.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_driver.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,86 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_driver.h $
@@ -267955,9 +270311,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_driver.h linux-rpi/driver
+#endif
+
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1355 @@
+/*
+ * dwc_otg_fiq_fsm.c - The finite state machine FIQ
@@ -269314,9 +271670,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c linux-rpi/drive
+ mb();
+ fiq_fsm_spin_unlock(&state->lock);
+}
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h 2015-08-26 10:26:11.805358467 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,370 @@
+/*
+ * dwc_otg_fiq_fsm.h - Finite state machine FIQ header definitions
@@ -269688,9 +272044,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h linux-rpi/drive
+extern void dwc_otg_fiq_nop(struct fiq_state *state);
+
+#endif /* DWC_OTG_FIQ_FSM_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,80 @@
+/*
+ * dwc_otg_fiq_fsm.S - assembly stub for the FSM FIQ
@@ -269772,9 +272128,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S linux-rpi/driv
+ subs pc, lr, #4;
+_dwc_otg_fiq_stub_end:
+END(_dwc_otg_fiq_stub)
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,4257 @@
+
+/* ==========================================================================
@@ -274033,875 +276389,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd.c linux-rpi/drivers/u
+}
+
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.h 2015-08-26 10:26:11.809358522 +0200
-@@ -0,0 +1,862 @@
-+/* ==========================================================================
-+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd.h $
-+ * $Revision: #58 $
-+ * $Date: 2011/09/15 $
-+ * $Change: 1846647 $
-+ *
-+ * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
-+ * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
-+ * otherwise expressly agreed to in writing between Synopsys and you.
-+ *
-+ * The Software IS NOT an item of Licensed Software or Licensed Product under
-+ * any End User Software License Agreement or Agreement for Licensed Product
-+ * with Synopsys or any supplement thereto. You are permitted to use and
-+ * redistribute this Software in source and binary forms, with or without
-+ * modification, provided that redistributions of source code must retain this
-+ * notice. You may not view, use, disclose, copy or distribute this file or
-+ * any information contained herein except pursuant to this license grant from
-+ * Synopsys. If you do not agree with this notice, including the disclaimer
-+ * below, then you are not authorized to use the Software.
-+ *
-+ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
-+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-+ * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
-+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-+ * DAMAGE.
-+ * ========================================================================== */
-+#ifndef DWC_DEVICE_ONLY
-+#ifndef __DWC_HCD_H__
-+#define __DWC_HCD_H__
-+
-+#include "dwc_otg_os_dep.h"
-+#include "usb.h"
-+#include "dwc_otg_hcd_if.h"
-+#include "dwc_otg_core_if.h"
-+#include "dwc_list.h"
-+#include "dwc_otg_cil.h"
-+#include "dwc_otg_fiq_fsm.h"
-+
-+
-+/**
-+ * @file
-+ *
-+ * This file contains the structures, constants, and interfaces for
-+ * the Host Contoller Driver (HCD).
-+ *
-+ * The Host Controller Driver (HCD) is responsible for translating requests
-+ * from the USB Driver into the appropriate actions on the DWC_otg controller.
-+ * It isolates the USBD from the specifics of the controller by providing an
-+ * API to the USBD.
-+ */
-+
-+struct dwc_otg_hcd_pipe_info {
-+ uint8_t dev_addr;
-+ uint8_t ep_num;
-+ uint8_t pipe_type;
-+ uint8_t pipe_dir;
-+ uint16_t mps;
-+};
-+
-+struct dwc_otg_hcd_iso_packet_desc {
-+ uint32_t offset;
-+ uint32_t length;
-+ uint32_t actual_length;
-+ uint32_t status;
-+};
-+
-+struct dwc_otg_qtd;
-+
-+struct dwc_otg_hcd_urb {
-+ void *priv;
-+ struct dwc_otg_qtd *qtd;
-+ void *buf;
-+ dwc_dma_t dma;
-+ void *setup_packet;
-+ dwc_dma_t setup_dma;
-+ uint32_t length;
-+ uint32_t actual_length;
-+ uint32_t status;
-+ uint32_t error_count;
-+ uint32_t packet_count;
-+ uint32_t flags;
-+ uint16_t interval;
-+ struct dwc_otg_hcd_pipe_info pipe_info;
-+ struct dwc_otg_hcd_iso_packet_desc iso_descs[0];
-+};
-+
-+static inline uint8_t dwc_otg_hcd_get_ep_num(struct dwc_otg_hcd_pipe_info *pipe)
-+{
-+ return pipe->ep_num;
-+}
-+
-+static inline uint8_t dwc_otg_hcd_get_pipe_type(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return pipe->pipe_type;
-+}
-+
-+static inline uint16_t dwc_otg_hcd_get_mps(struct dwc_otg_hcd_pipe_info *pipe)
-+{
-+ return pipe->mps;
-+}
-+
-+static inline uint8_t dwc_otg_hcd_get_dev_addr(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return pipe->dev_addr;
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_isoc(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return (pipe->pipe_type == UE_ISOCHRONOUS);
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_int(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return (pipe->pipe_type == UE_INTERRUPT);
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_bulk(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return (pipe->pipe_type == UE_BULK);
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_control(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return (pipe->pipe_type == UE_CONTROL);
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_in(struct dwc_otg_hcd_pipe_info *pipe)
-+{
-+ return (pipe->pipe_dir == UE_DIR_IN);
-+}
-+
-+static inline uint8_t dwc_otg_hcd_is_pipe_out(struct dwc_otg_hcd_pipe_info
-+ *pipe)
-+{
-+ return (!dwc_otg_hcd_is_pipe_in(pipe));
-+}
-+
-+static inline void dwc_otg_hcd_fill_pipe(struct dwc_otg_hcd_pipe_info *pipe,
-+ uint8_t devaddr, uint8_t ep_num,
-+ uint8_t pipe_type, uint8_t pipe_dir,
-+ uint16_t mps)
-+{
-+ pipe->dev_addr = devaddr;
-+ pipe->ep_num = ep_num;
-+ pipe->pipe_type = pipe_type;
-+ pipe->pipe_dir = pipe_dir;
-+ pipe->mps = mps;
-+}
-+
-+/**
-+ * Phases for control transfers.
-+ */
-+typedef enum dwc_otg_control_phase {
-+ DWC_OTG_CONTROL_SETUP,
-+ DWC_OTG_CONTROL_DATA,
-+ DWC_OTG_CONTROL_STATUS
-+} dwc_otg_control_phase_e;
-+
-+/** Transaction types. */
-+typedef enum dwc_otg_transaction_type {
-+ DWC_OTG_TRANSACTION_NONE = 0,
-+ DWC_OTG_TRANSACTION_PERIODIC = 1,
-+ DWC_OTG_TRANSACTION_NON_PERIODIC = 2,
-+ DWC_OTG_TRANSACTION_ALL = DWC_OTG_TRANSACTION_PERIODIC + DWC_OTG_TRANSACTION_NON_PERIODIC
-+} dwc_otg_transaction_type_e;
-+
-+struct dwc_otg_qh;
-+
-+/**
-+ * A Queue Transfer Descriptor (QTD) holds the state of a bulk, control,
-+ * interrupt, or isochronous transfer. A single QTD is created for each URB
-+ * (of one of these types) submitted to the HCD. The transfer associated with
-+ * a QTD may require one or multiple transactions.
-+ *
-+ * A QTD is linked to a Queue Head, which is entered in either the
-+ * non-periodic or periodic schedule for execution. When a QTD is chosen for
-+ * execution, some or all of its transactions may be executed. After
-+ * execution, the state of the QTD is updated. The QTD may be retired if all
-+ * its transactions are complete or if an error occurred. Otherwise, it
-+ * remains in the schedule so more transactions can be executed later.
-+ */
-+typedef struct dwc_otg_qtd {
-+ /**
-+ * Determines the PID of the next data packet for the data phase of
-+ * control transfers. Ignored for other transfer types.<br>
-+ * One of the following values:
-+ * - DWC_OTG_HC_PID_DATA0
-+ * - DWC_OTG_HC_PID_DATA1
-+ */
-+ uint8_t data_toggle;
-+
-+ /** Current phase for control transfers (Setup, Data, or Status). */
-+ dwc_otg_control_phase_e control_phase;
-+
-+ /** Keep track of the current split type
-+ * for FS/LS endpoints on a HS Hub */
-+ uint8_t complete_split;
-+
-+ /** How many bytes transferred during SSPLIT OUT */
-+ uint32_t ssplit_out_xfer_count;
-+
-+ /**
-+ * Holds the number of bus errors that have occurred for a transaction
-+ * within this transfer.
-+ */
-+ uint8_t error_count;
-+
-+ /**
-+ * Index of the next frame descriptor for an isochronous transfer. A
-+ * frame descriptor describes the buffer position and length of the
-+ * data to be transferred in the next scheduled (micro)frame of an
-+ * isochronous transfer. It also holds status for that transaction.
-+ * The frame index starts at 0.
-+ */
-+ uint16_t isoc_frame_index;
-+
-+ /** Position of the ISOC split on full/low speed */
-+ uint8_t isoc_split_pos;
-+
-+ /** Position of the ISOC split in the buffer for the current frame */
-+ uint16_t isoc_split_offset;
-+
-+ /** URB for this transfer */
-+ struct dwc_otg_hcd_urb *urb;
-+
-+ struct dwc_otg_qh *qh;
-+
-+ /** This list of QTDs */
-+ DWC_CIRCLEQ_ENTRY(dwc_otg_qtd) qtd_list_entry;
-+
-+ /** Indicates if this QTD is currently processed by HW. */
-+ uint8_t in_process;
-+
-+ /** Number of DMA descriptors for this QTD */
-+ uint8_t n_desc;
-+
-+ /**
-+ * Last activated frame(packet) index.
-+ * Used in Descriptor DMA mode only.
-+ */
-+ uint16_t isoc_frame_index_last;
-+
-+} dwc_otg_qtd_t;
-+
-+DWC_CIRCLEQ_HEAD(dwc_otg_qtd_list, dwc_otg_qtd);
-+
-+/**
-+ * A Queue Head (QH) holds the static characteristics of an endpoint and
-+ * maintains a list of transfers (QTDs) for that endpoint. A QH structure may
-+ * be entered in either the non-periodic or periodic schedule.
-+ */
-+typedef struct dwc_otg_qh {
-+ /**
-+ * Endpoint type.
-+ * One of the following values:
-+ * - UE_CONTROL
-+ * - UE_BULK
-+ * - UE_INTERRUPT
-+ * - UE_ISOCHRONOUS
-+ */
-+ uint8_t ep_type;
-+ uint8_t ep_is_in;
-+
-+ /** wMaxPacketSize Field of Endpoint Descriptor. */
-+ uint16_t maxp;
-+
-+ /**
-+ * Device speed.
-+ * One of the following values:
-+ * - DWC_OTG_EP_SPEED_LOW
-+ * - DWC_OTG_EP_SPEED_FULL
-+ * - DWC_OTG_EP_SPEED_HIGH
-+ */
-+ uint8_t dev_speed;
-+
-+ /**
-+ * Determines the PID of the next data packet for non-control
-+ * transfers. Ignored for control transfers.<br>
-+ * One of the following values:
-+ * - DWC_OTG_HC_PID_DATA0
-+ * - DWC_OTG_HC_PID_DATA1
-+ */
-+ uint8_t data_toggle;
-+
-+ /** Ping state if 1. */
-+ uint8_t ping_state;
-+
-+ /**
-+ * List of QTDs for this QH.
-+ */
-+ struct dwc_otg_qtd_list qtd_list;
-+
-+ /** Host channel currently processing transfers for this QH. */
-+ struct dwc_hc *channel;
-+
-+ /** Full/low speed endpoint on high-speed hub requires split. */
-+ uint8_t do_split;
-+
-+ /** @name Periodic schedule information */
-+ /** @{ */
-+
-+ /** Bandwidth in microseconds per (micro)frame. */
-+ uint16_t usecs;
-+
-+ /** Interval between transfers in (micro)frames. */
-+ uint16_t interval;
-+
-+ /**
-+ * (micro)frame to initialize a periodic transfer. The transfer
-+ * executes in the following (micro)frame.
-+ */
-+ uint16_t sched_frame;
-+
-+ /*
-+ ** Frame a NAK was received on this queue head, used to minimise NAK retransmission
-+ */
-+ uint16_t nak_frame;
-+
-+ /** (micro)frame at which last start split was initialized. */
-+ uint16_t start_split_frame;
-+
-+ /** @} */
-+
-+ /**
-+ * Used instead of original buffer if
-+ * it(physical address) is not dword-aligned.
-+ */
-+ uint8_t *dw_align_buf;
-+ dwc_dma_t dw_align_buf_dma;
-+
-+ /** Entry for QH in either the periodic or non-periodic schedule. */
-+ dwc_list_link_t qh_list_entry;
-+
-+ /** @name Descriptor DMA support */
-+ /** @{ */
-+
-+ /** Descriptor List. */
-+ dwc_otg_host_dma_desc_t *desc_list;
-+
-+ /** Descriptor List physical address. */
-+ dwc_dma_t desc_list_dma;
-+
-+ /**
-+ * Xfer Bytes array.
-+ * Each element corresponds to a descriptor and indicates
-+ * original XferSize size value for the descriptor.
-+ */
-+ uint32_t *n_bytes;
-+
-+ /** Actual number of transfer descriptors in a list. */
-+ uint16_t ntd;
-+
-+ /** First activated isochronous transfer descriptor index. */
-+ uint8_t td_first;
-+ /** Last activated isochronous transfer descriptor index. */
-+ uint8_t td_last;
-+
-+ /** @} */
-+
-+
-+ uint16_t speed;
-+ uint16_t frame_usecs[8];
-+
-+ uint32_t skip_count;
-+} dwc_otg_qh_t;
-+
-+DWC_CIRCLEQ_HEAD(hc_list, dwc_hc);
-+
-+typedef struct urb_tq_entry {
-+ struct urb *urb;
-+ DWC_TAILQ_ENTRY(urb_tq_entry) urb_tq_entries;
-+} urb_tq_entry_t;
-+
-+DWC_TAILQ_HEAD(urb_list, urb_tq_entry);
-+
-+/**
-+ * This structure holds the state of the HCD, including the non-periodic and
-+ * periodic schedules.
-+ */
-+struct dwc_otg_hcd {
-+ /** The DWC otg device pointer */
-+ struct dwc_otg_device *otg_dev;
-+ /** DWC OTG Core Interface Layer */
-+ dwc_otg_core_if_t *core_if;
-+
-+ /** Function HCD driver callbacks */
-+ struct dwc_otg_hcd_function_ops *fops;
-+
-+ /** Internal DWC HCD Flags */
-+ volatile union dwc_otg_hcd_internal_flags {
-+ uint32_t d32;
-+ struct {
-+ unsigned port_connect_status_change:1;
-+ unsigned port_connect_status:1;
-+ unsigned port_reset_change:1;
-+ unsigned port_enable_change:1;
-+ unsigned port_suspend_change:1;
-+ unsigned port_over_current_change:1;
-+ unsigned port_l1_change:1;
-+ unsigned reserved:26;
-+ } b;
-+ } flags;
-+
-+ /**
-+ * Inactive items in the non-periodic schedule. This is a list of
-+ * Queue Heads. Transfers associated with these Queue Heads are not
-+ * currently assigned to a host channel.
-+ */
-+ dwc_list_link_t non_periodic_sched_inactive;
-+
-+ /**
-+ * Active items in the non-periodic schedule. This is a list of
-+ * Queue Heads. Transfers associated with these Queue Heads are
-+ * currently assigned to a host channel.
-+ */
-+ dwc_list_link_t non_periodic_sched_active;
-+
-+ /**
-+ * Pointer to the next Queue Head to process in the active
-+ * non-periodic schedule.
-+ */
-+ dwc_list_link_t *non_periodic_qh_ptr;
-+
-+ /**
-+ * Inactive items in the periodic schedule. This is a list of QHs for
-+ * periodic transfers that are _not_ scheduled for the next frame.
-+ * Each QH in the list has an interval counter that determines when it
-+ * needs to be scheduled for execution. This scheduling mechanism
-+ * allows only a simple calculation for periodic bandwidth used (i.e.
-+ * must assume that all periodic transfers may need to execute in the
-+ * same frame). However, it greatly simplifies scheduling and should
-+ * be sufficient for the vast majority of OTG hosts, which need to
-+ * connect to a small number of peripherals at one time.
-+ *
-+ * Items move from this list to periodic_sched_ready when the QH
-+ * interval counter is 0 at SOF.
-+ */
-+ dwc_list_link_t periodic_sched_inactive;
-+
-+ /**
-+ * List of periodic QHs that are ready for execution in the next
-+ * frame, but have not yet been assigned to host channels.
-+ *
-+ * Items move from this list to periodic_sched_assigned as host
-+ * channels become available during the current frame.
-+ */
-+ dwc_list_link_t periodic_sched_ready;
-+
-+ /**
-+ * List of periodic QHs to be executed in the next frame that are
-+ * assigned to host channels.
-+ *
-+ * Items move from this list to periodic_sched_queued as the
-+ * transactions for the QH are queued to the DWC_otg controller.
-+ */
-+ dwc_list_link_t periodic_sched_assigned;
-+
-+ /**
-+ * List of periodic QHs that have been queued for execution.
-+ *
-+ * Items move from this list to either periodic_sched_inactive or
-+ * periodic_sched_ready when the channel associated with the transfer
-+ * is released. If the interval for the QH is 1, the item moves to
-+ * periodic_sched_ready because it must be rescheduled for the next
-+ * frame. Otherwise, the item moves to periodic_sched_inactive.
-+ */
-+ dwc_list_link_t periodic_sched_queued;
-+
-+ /**
-+ * Total bandwidth claimed so far for periodic transfers. This value
-+ * is in microseconds per (micro)frame. The assumption is that all
-+ * periodic transfers may occur in the same (micro)frame.
-+ */
-+ uint16_t periodic_usecs;
-+
-+ /**
-+ * Total bandwidth claimed so far for all periodic transfers
-+ * in a frame.
-+ * This will include a mixture of HS and FS transfers.
-+ * Units are microseconds per (micro)frame.
-+ * We have a budget per frame and have to schedule
-+ * transactions accordingly.
-+ * Watch out for the fact that things are actually scheduled for the
-+ * "next frame".
-+ */
-+ uint16_t frame_usecs[8];
-+
-+
-+ /**
-+ * Frame number read from the core at SOF. The value ranges from 0 to
-+ * DWC_HFNUM_MAX_FRNUM.
-+ */
-+ uint16_t frame_number;
-+
-+ /**
-+ * Count of periodic QHs, if using several eps. For SOF enable/disable.
-+ */
-+ uint16_t periodic_qh_count;
-+
-+ /**
-+ * Free host channels in the controller. This is a list of
-+ * dwc_hc_t items.
-+ */
-+ struct hc_list free_hc_list;
-+ /**
-+ * Number of host channels assigned to periodic transfers. Currently
-+ * assuming that there is a dedicated host channel for each periodic
-+ * transaction and at least one host channel available for
-+ * non-periodic transactions.
-+ */
-+ int periodic_channels; /* microframe_schedule==0 */
-+
-+ /**
-+ * Number of host channels assigned to non-periodic transfers.
-+ */
-+ int non_periodic_channels; /* microframe_schedule==0 */
-+
-+ /**
-+ * Number of host channels assigned to non-periodic transfers.
-+ */
-+ int available_host_channels;
-+
-+ /**
-+ * Array of pointers to the host channel descriptors. Allows accessing
-+ * a host channel descriptor given the host channel number. This is
-+ * useful in interrupt handlers.
-+ */
-+ struct dwc_hc *hc_ptr_array[MAX_EPS_CHANNELS];
-+
-+ /**
-+ * Buffer to use for any data received during the status phase of a
-+ * control transfer. Normally no data is transferred during the status
-+ * phase. This buffer is used as a bit bucket.
-+ */
-+ uint8_t *status_buf;
-+
-+ /**
-+ * DMA address for status_buf.
-+ */
-+ dma_addr_t status_buf_dma;
-+#define DWC_OTG_HCD_STATUS_BUF_SIZE 64
-+
-+ /**
-+ * Connection timer. An OTG host must display a message if the device
-+ * does not connect. Started when the VBus power is turned on via
-+ * sysfs attribute "buspower".
-+ */
-+ dwc_timer_t *conn_timer;
-+
-+ /* Tasket to do a reset */
-+ dwc_tasklet_t *reset_tasklet;
-+
-+ dwc_tasklet_t *completion_tasklet;
-+ struct urb_list completed_urb_list;
-+
-+ /* */
-+ dwc_spinlock_t *lock;
-+ dwc_spinlock_t *channel_lock;
-+ /**
-+ * Private data that could be used by OS wrapper.
-+ */
-+ void *priv;
-+
-+ uint8_t otg_port;
-+
-+ /** Frame List */
-+ uint32_t *frame_list;
-+
-+ /** Hub - Port assignment */
-+ int hub_port[128];
-+#ifdef FIQ_DEBUG
-+ int hub_port_alloc[2048];
-+#endif
-+
-+ /** Frame List DMA address */
-+ dma_addr_t frame_list_dma;
-+
-+ struct fiq_stack *fiq_stack;
-+ struct fiq_state *fiq_state;
-+
-+ /** Virtual address for split transaction DMA bounce buffers */
-+ struct fiq_dma_blob *fiq_dmab;
-+
-+#ifdef DEBUG
-+ uint32_t frrem_samples;
-+ uint64_t frrem_accum;
-+
-+ uint32_t hfnum_7_samples_a;
-+ uint64_t hfnum_7_frrem_accum_a;
-+ uint32_t hfnum_0_samples_a;
-+ uint64_t hfnum_0_frrem_accum_a;
-+ uint32_t hfnum_other_samples_a;
-+ uint64_t hfnum_other_frrem_accum_a;
-+
-+ uint32_t hfnum_7_samples_b;
-+ uint64_t hfnum_7_frrem_accum_b;
-+ uint32_t hfnum_0_samples_b;
-+ uint64_t hfnum_0_frrem_accum_b;
-+ uint32_t hfnum_other_samples_b;
-+ uint64_t hfnum_other_frrem_accum_b;
-+#endif
-+};
-+
-+/** @name Transaction Execution Functions */
-+/** @{ */
-+extern dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t
-+ * hcd);
-+extern void dwc_otg_hcd_queue_transactions(dwc_otg_hcd_t * hcd,
-+ dwc_otg_transaction_type_e tr_type);
-+
-+int dwc_otg_hcd_allocate_port(dwc_otg_hcd_t * hcd, dwc_otg_qh_t *qh);
-+void dwc_otg_hcd_release_port(dwc_otg_hcd_t * dwc_otg_hcd, dwc_otg_qh_t *qh);
-+
-+extern int fiq_fsm_queue_transaction(dwc_otg_hcd_t *hcd, dwc_otg_qh_t *qh);
-+extern int fiq_fsm_transaction_suitable(dwc_otg_qh_t *qh);
-+extern void dwc_otg_cleanup_fiq_channel(dwc_otg_hcd_t *hcd, uint32_t num);
-+
-+/** @} */
-+
-+/** @name Interrupt Handler Functions */
-+/** @{ */
-+extern int32_t dwc_otg_hcd_handle_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_sof_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_rx_status_q_level_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_np_tx_fifo_empty_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_perio_tx_fifo_empty_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_incomplete_periodic_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_port_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_conn_id_status_change_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_disconnect_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_hc_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd,
-+ uint32_t num);
-+extern int32_t dwc_otg_hcd_handle_session_req_intr(dwc_otg_hcd_t * dwc_otg_hcd);
-+extern int32_t dwc_otg_hcd_handle_wakeup_detected_intr(dwc_otg_hcd_t *
-+ dwc_otg_hcd);
-+/** @} */
-+
-+/** @name Schedule Queue Functions */
-+/** @{ */
-+
-+/* Implemented in dwc_otg_hcd_queue.c */
-+extern dwc_otg_qh_t *dwc_otg_hcd_qh_create(dwc_otg_hcd_t * hcd,
-+ dwc_otg_hcd_urb_t * urb, int atomic_alloc);
-+extern void dwc_otg_hcd_qh_free(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+extern int dwc_otg_hcd_qh_add(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+extern void dwc_otg_hcd_qh_remove(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+extern void dwc_otg_hcd_qh_deactivate(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh,
-+ int sched_csplit);
-+
-+/** Remove and free a QH */
-+static inline void dwc_otg_hcd_qh_remove_and_free(dwc_otg_hcd_t * hcd,
-+ dwc_otg_qh_t * qh)
-+{
-+ dwc_irqflags_t flags;
-+ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags);
-+ dwc_otg_hcd_qh_remove(hcd, qh);
-+ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
-+ dwc_otg_hcd_qh_free(hcd, qh);
-+}
-+
-+/** Allocates memory for a QH structure.
-+ * @return Returns the memory allocate or NULL on error. */
-+static inline dwc_otg_qh_t *dwc_otg_hcd_qh_alloc(int atomic_alloc)
-+{
-+ if (atomic_alloc)
-+ return (dwc_otg_qh_t *) DWC_ALLOC_ATOMIC(sizeof(dwc_otg_qh_t));
-+ else
-+ return (dwc_otg_qh_t *) DWC_ALLOC(sizeof(dwc_otg_qh_t));
-+}
-+
-+extern dwc_otg_qtd_t *dwc_otg_hcd_qtd_create(dwc_otg_hcd_urb_t * urb,
-+ int atomic_alloc);
-+extern void dwc_otg_hcd_qtd_init(dwc_otg_qtd_t * qtd, dwc_otg_hcd_urb_t * urb);
-+extern int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, dwc_otg_hcd_t * dwc_otg_hcd,
-+ dwc_otg_qh_t ** qh, int atomic_alloc);
-+
-+/** Allocates memory for a QTD structure.
-+ * @return Returns the memory allocate or NULL on error. */
-+static inline dwc_otg_qtd_t *dwc_otg_hcd_qtd_alloc(int atomic_alloc)
-+{
-+ if (atomic_alloc)
-+ return (dwc_otg_qtd_t *) DWC_ALLOC_ATOMIC(sizeof(dwc_otg_qtd_t));
-+ else
-+ return (dwc_otg_qtd_t *) DWC_ALLOC(sizeof(dwc_otg_qtd_t));
-+}
-+
-+/** Frees the memory for a QTD structure. QTD should already be removed from
-+ * list.
-+ * @param qtd QTD to free.*/
-+static inline void dwc_otg_hcd_qtd_free(dwc_otg_qtd_t * qtd)
-+{
-+ DWC_FREE(qtd);
-+}
-+
-+/** Removes a QTD from list.
-+ * @param hcd HCD instance.
-+ * @param qtd QTD to remove from list.
-+ * @param qh QTD belongs to.
-+ */
-+static inline void dwc_otg_hcd_qtd_remove(dwc_otg_hcd_t * hcd,
-+ dwc_otg_qtd_t * qtd,
-+ dwc_otg_qh_t * qh)
-+{
-+ DWC_CIRCLEQ_REMOVE(&qh->qtd_list, qtd, qtd_list_entry);
-+}
-+
-+/** Remove and free a QTD
-+ * Need to disable IRQ and hold hcd lock while calling this function out of
-+ * interrupt servicing chain */
-+static inline void dwc_otg_hcd_qtd_remove_and_free(dwc_otg_hcd_t * hcd,
-+ dwc_otg_qtd_t * qtd,
-+ dwc_otg_qh_t * qh)
-+{
-+ dwc_otg_hcd_qtd_remove(hcd, qtd, qh);
-+ dwc_otg_hcd_qtd_free(qtd);
-+}
-+
-+/** @} */
-+
-+/** @name Descriptor DMA Supporting Functions */
-+/** @{ */
-+
-+extern void dwc_otg_hcd_start_xfer_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+extern void dwc_otg_hcd_complete_xfer_ddma(dwc_otg_hcd_t * hcd,
-+ dwc_hc_t * hc,
-+ dwc_otg_hc_regs_t * hc_regs,
-+ dwc_otg_halt_status_e halt_status);
-+
-+extern int dwc_otg_hcd_qh_init_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+extern void dwc_otg_hcd_qh_free_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
-+
-+/** @} */
-+
-+/** @name Internal Functions */
-+/** @{ */
-+dwc_otg_qh_t *dwc_urb_to_qh(dwc_otg_hcd_urb_t * urb);
-+/** @} */
-+
-+#ifdef CONFIG_USB_DWC_OTG_LPM
-+extern int dwc_otg_hcd_get_hc_for_lpm_tran(dwc_otg_hcd_t * hcd,
-+ uint8_t devaddr);
-+extern void dwc_otg_hcd_free_hc_from_lpm(dwc_otg_hcd_t * hcd);
-+#endif
-+
-+/** Gets the QH that contains the list_head */
-+#define dwc_list_to_qh(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qh_t, qh_list_entry)
-+
-+/** Gets the QTD that contains the list_head */
-+#define dwc_list_to_qtd(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qtd_t, qtd_list_entry)
-+
-+/** Check if QH is non-periodic */
-+#define dwc_qh_is_non_per(_qh_ptr_) ((_qh_ptr_->ep_type == UE_BULK) || \
-+ (_qh_ptr_->ep_type == UE_CONTROL))
-+
-+/** High bandwidth multiplier as encoded in highspeed endpoint descriptors */
-+#define dwc_hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
-+
-+/** Packet size for any kind of endpoint descriptor */
-+#define dwc_max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)
-+
-+/**
-+ * Returns true if _frame1 is less than or equal to _frame2. The comparison is
-+ * done modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the
-+ * frame number when the max frame number is reached.
-+ */
-+static inline int dwc_frame_num_le(uint16_t frame1, uint16_t frame2)
-+{
-+ return ((frame2 - frame1) & DWC_HFNUM_MAX_FRNUM) <=
-+ (DWC_HFNUM_MAX_FRNUM >> 1);
-+}
-+
-+/**
-+ * Returns true if _frame1 is greater than _frame2. The comparison is done
-+ * modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the frame
-+ * number when the max frame number is reached.
-+ */
-+static inline int dwc_frame_num_gt(uint16_t frame1, uint16_t frame2)
-+{
-+ return (frame1 != frame2) &&
-+ (((frame1 - frame2) & DWC_HFNUM_MAX_FRNUM) <
-+ (DWC_HFNUM_MAX_FRNUM >> 1));
-+}
-+
-+/**
-+ * Increments _frame by the amount specified by _inc. The addition is done
-+ * modulo DWC_HFNUM_MAX_FRNUM. Returns the incremented value.
-+ */
-+static inline uint16_t dwc_frame_num_inc(uint16_t frame, uint16_t inc)
-+{
-+ return (frame + inc) & DWC_HFNUM_MAX_FRNUM;
-+}
-+
-+static inline uint16_t dwc_full_frame_num(uint16_t frame)
-+{
-+ return (frame & DWC_HFNUM_MAX_FRNUM) >> 3;
-+}
-+
-+static inline uint16_t dwc_micro_frame_num(uint16_t frame)
-+{
-+ return frame & 0x7;
-+}
-+
-+void dwc_otg_hcd_save_data_toggle(dwc_hc_t * hc,
-+ dwc_otg_hc_regs_t * hc_regs,
-+ dwc_otg_qtd_t * qtd);
-+
-+#ifdef DEBUG
-+/**
-+ * Macro to sample the remaining PHY clocks left in the current frame. This
-+ * may be used during debugging to determine the average time it takes to
-+ * execute sections of code. There are two possible sample points, "a" and
-+ * "b", so the _letter argument must be one of these values.
-+ *
-+ * To dump the average sample times, read the "hcd_frrem" sysfs attribute. For
-+ * example, "cat /sys/devices/lm0/hcd_frrem".
-+ */
-+#define dwc_sample_frrem(_hcd, _qh, _letter) \
-+{ \
-+ hfnum_data_t hfnum; \
-+ dwc_otg_qtd_t *qtd; \
-+ qtd = list_entry(_qh->qtd_list.next, dwc_otg_qtd_t, qtd_list_entry); \
-+ if (usb_pipeint(qtd->urb->pipe) && _qh->start_split_frame != 0 && !qtd->complete_split) { \
-+ hfnum.d32 = DWC_READ_REG32(&_hcd->core_if->host_if->host_global_regs->hfnum); \
-+ switch (hfnum.b.frnum & 0x7) { \
-+ case 7: \
-+ _hcd->hfnum_7_samples_##_letter++; \
-+ _hcd->hfnum_7_frrem_accum_##_letter += hfnum.b.frrem; \
-+ break; \
-+ case 0: \
-+ _hcd->hfnum_0_samples_##_letter++; \
-+ _hcd->hfnum_0_frrem_accum_##_letter += hfnum.b.frrem; \
-+ break; \
-+ default: \
-+ _hcd->hfnum_other_samples_##_letter++; \
-+ _hcd->hfnum_other_frrem_accum_##_letter += hfnum.b.frrem; \
-+ break; \
-+ } \
-+ } \
-+}
-+#else
-+#define dwc_sample_frrem(_hcd, _qh, _letter)
-+#endif
-+#endif
-+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1132 @@
+/*==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_ddma.c $
@@ -276035,9 +277525,875 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c linux-rpi/driv
+}
+
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd.h 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,862 @@
++/* ==========================================================================
++ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd.h $
++ * $Revision: #58 $
++ * $Date: 2011/09/15 $
++ * $Change: 1846647 $
++ *
++ * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
++ * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
++ * otherwise expressly agreed to in writing between Synopsys and you.
++ *
++ * The Software IS NOT an item of Licensed Software or Licensed Product under
++ * any End User Software License Agreement or Agreement for Licensed Product
++ * with Synopsys or any supplement thereto. You are permitted to use and
++ * redistribute this Software in source and binary forms, with or without
++ * modification, provided that redistributions of source code must retain this
++ * notice. You may not view, use, disclose, copy or distribute this file or
++ * any information contained herein except pursuant to this license grant from
++ * Synopsys. If you do not agree with this notice, including the disclaimer
++ * below, then you are not authorized to use the Software.
++ *
++ * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
++ * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
++ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
++ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
++ * DAMAGE.
++ * ========================================================================== */
++#ifndef DWC_DEVICE_ONLY
++#ifndef __DWC_HCD_H__
++#define __DWC_HCD_H__
++
++#include "dwc_otg_os_dep.h"
++#include "usb.h"
++#include "dwc_otg_hcd_if.h"
++#include "dwc_otg_core_if.h"
++#include "dwc_list.h"
++#include "dwc_otg_cil.h"
++#include "dwc_otg_fiq_fsm.h"
++
++
++/**
++ * @file
++ *
++ * This file contains the structures, constants, and interfaces for
++ * the Host Contoller Driver (HCD).
++ *
++ * The Host Controller Driver (HCD) is responsible for translating requests
++ * from the USB Driver into the appropriate actions on the DWC_otg controller.
++ * It isolates the USBD from the specifics of the controller by providing an
++ * API to the USBD.
++ */
++
++struct dwc_otg_hcd_pipe_info {
++ uint8_t dev_addr;
++ uint8_t ep_num;
++ uint8_t pipe_type;
++ uint8_t pipe_dir;
++ uint16_t mps;
++};
++
++struct dwc_otg_hcd_iso_packet_desc {
++ uint32_t offset;
++ uint32_t length;
++ uint32_t actual_length;
++ uint32_t status;
++};
++
++struct dwc_otg_qtd;
++
++struct dwc_otg_hcd_urb {
++ void *priv;
++ struct dwc_otg_qtd *qtd;
++ void *buf;
++ dwc_dma_t dma;
++ void *setup_packet;
++ dwc_dma_t setup_dma;
++ uint32_t length;
++ uint32_t actual_length;
++ uint32_t status;
++ uint32_t error_count;
++ uint32_t packet_count;
++ uint32_t flags;
++ uint16_t interval;
++ struct dwc_otg_hcd_pipe_info pipe_info;
++ struct dwc_otg_hcd_iso_packet_desc iso_descs[0];
++};
++
++static inline uint8_t dwc_otg_hcd_get_ep_num(struct dwc_otg_hcd_pipe_info *pipe)
++{
++ return pipe->ep_num;
++}
++
++static inline uint8_t dwc_otg_hcd_get_pipe_type(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return pipe->pipe_type;
++}
++
++static inline uint16_t dwc_otg_hcd_get_mps(struct dwc_otg_hcd_pipe_info *pipe)
++{
++ return pipe->mps;
++}
++
++static inline uint8_t dwc_otg_hcd_get_dev_addr(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return pipe->dev_addr;
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_isoc(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return (pipe->pipe_type == UE_ISOCHRONOUS);
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_int(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return (pipe->pipe_type == UE_INTERRUPT);
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_bulk(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return (pipe->pipe_type == UE_BULK);
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_control(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return (pipe->pipe_type == UE_CONTROL);
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_in(struct dwc_otg_hcd_pipe_info *pipe)
++{
++ return (pipe->pipe_dir == UE_DIR_IN);
++}
++
++static inline uint8_t dwc_otg_hcd_is_pipe_out(struct dwc_otg_hcd_pipe_info
++ *pipe)
++{
++ return (!dwc_otg_hcd_is_pipe_in(pipe));
++}
++
++static inline void dwc_otg_hcd_fill_pipe(struct dwc_otg_hcd_pipe_info *pipe,
++ uint8_t devaddr, uint8_t ep_num,
++ uint8_t pipe_type, uint8_t pipe_dir,
++ uint16_t mps)
++{
++ pipe->dev_addr = devaddr;
++ pipe->ep_num = ep_num;
++ pipe->pipe_type = pipe_type;
++ pipe->pipe_dir = pipe_dir;
++ pipe->mps = mps;
++}
++
++/**
++ * Phases for control transfers.
++ */
++typedef enum dwc_otg_control_phase {
++ DWC_OTG_CONTROL_SETUP,
++ DWC_OTG_CONTROL_DATA,
++ DWC_OTG_CONTROL_STATUS
++} dwc_otg_control_phase_e;
++
++/** Transaction types. */
++typedef enum dwc_otg_transaction_type {
++ DWC_OTG_TRANSACTION_NONE = 0,
++ DWC_OTG_TRANSACTION_PERIODIC = 1,
++ DWC_OTG_TRANSACTION_NON_PERIODIC = 2,
++ DWC_OTG_TRANSACTION_ALL = DWC_OTG_TRANSACTION_PERIODIC + DWC_OTG_TRANSACTION_NON_PERIODIC
++} dwc_otg_transaction_type_e;
++
++struct dwc_otg_qh;
++
++/**
++ * A Queue Transfer Descriptor (QTD) holds the state of a bulk, control,
++ * interrupt, or isochronous transfer. A single QTD is created for each URB
++ * (of one of these types) submitted to the HCD. The transfer associated with
++ * a QTD may require one or multiple transactions.
++ *
++ * A QTD is linked to a Queue Head, which is entered in either the
++ * non-periodic or periodic schedule for execution. When a QTD is chosen for
++ * execution, some or all of its transactions may be executed. After
++ * execution, the state of the QTD is updated. The QTD may be retired if all
++ * its transactions are complete or if an error occurred. Otherwise, it
++ * remains in the schedule so more transactions can be executed later.
++ */
++typedef struct dwc_otg_qtd {
++ /**
++ * Determines the PID of the next data packet for the data phase of
++ * control transfers. Ignored for other transfer types.<br>
++ * One of the following values:
++ * - DWC_OTG_HC_PID_DATA0
++ * - DWC_OTG_HC_PID_DATA1
++ */
++ uint8_t data_toggle;
++
++ /** Current phase for control transfers (Setup, Data, or Status). */
++ dwc_otg_control_phase_e control_phase;
++
++ /** Keep track of the current split type
++ * for FS/LS endpoints on a HS Hub */
++ uint8_t complete_split;
++
++ /** How many bytes transferred during SSPLIT OUT */
++ uint32_t ssplit_out_xfer_count;
++
++ /**
++ * Holds the number of bus errors that have occurred for a transaction
++ * within this transfer.
++ */
++ uint8_t error_count;
++
++ /**
++ * Index of the next frame descriptor for an isochronous transfer. A
++ * frame descriptor describes the buffer position and length of the
++ * data to be transferred in the next scheduled (micro)frame of an
++ * isochronous transfer. It also holds status for that transaction.
++ * The frame index starts at 0.
++ */
++ uint16_t isoc_frame_index;
++
++ /** Position of the ISOC split on full/low speed */
++ uint8_t isoc_split_pos;
++
++ /** Position of the ISOC split in the buffer for the current frame */
++ uint16_t isoc_split_offset;
++
++ /** URB for this transfer */
++ struct dwc_otg_hcd_urb *urb;
++
++ struct dwc_otg_qh *qh;
++
++ /** This list of QTDs */
++ DWC_CIRCLEQ_ENTRY(dwc_otg_qtd) qtd_list_entry;
++
++ /** Indicates if this QTD is currently processed by HW. */
++ uint8_t in_process;
++
++ /** Number of DMA descriptors for this QTD */
++ uint8_t n_desc;
++
++ /**
++ * Last activated frame(packet) index.
++ * Used in Descriptor DMA mode only.
++ */
++ uint16_t isoc_frame_index_last;
++
++} dwc_otg_qtd_t;
++
++DWC_CIRCLEQ_HEAD(dwc_otg_qtd_list, dwc_otg_qtd);
++
++/**
++ * A Queue Head (QH) holds the static characteristics of an endpoint and
++ * maintains a list of transfers (QTDs) for that endpoint. A QH structure may
++ * be entered in either the non-periodic or periodic schedule.
++ */
++typedef struct dwc_otg_qh {
++ /**
++ * Endpoint type.
++ * One of the following values:
++ * - UE_CONTROL
++ * - UE_BULK
++ * - UE_INTERRUPT
++ * - UE_ISOCHRONOUS
++ */
++ uint8_t ep_type;
++ uint8_t ep_is_in;
++
++ /** wMaxPacketSize Field of Endpoint Descriptor. */
++ uint16_t maxp;
++
++ /**
++ * Device speed.
++ * One of the following values:
++ * - DWC_OTG_EP_SPEED_LOW
++ * - DWC_OTG_EP_SPEED_FULL
++ * - DWC_OTG_EP_SPEED_HIGH
++ */
++ uint8_t dev_speed;
++
++ /**
++ * Determines the PID of the next data packet for non-control
++ * transfers. Ignored for control transfers.<br>
++ * One of the following values:
++ * - DWC_OTG_HC_PID_DATA0
++ * - DWC_OTG_HC_PID_DATA1
++ */
++ uint8_t data_toggle;
++
++ /** Ping state if 1. */
++ uint8_t ping_state;
++
++ /**
++ * List of QTDs for this QH.
++ */
++ struct dwc_otg_qtd_list qtd_list;
++
++ /** Host channel currently processing transfers for this QH. */
++ struct dwc_hc *channel;
++
++ /** Full/low speed endpoint on high-speed hub requires split. */
++ uint8_t do_split;
++
++ /** @name Periodic schedule information */
++ /** @{ */
++
++ /** Bandwidth in microseconds per (micro)frame. */
++ uint16_t usecs;
++
++ /** Interval between transfers in (micro)frames. */
++ uint16_t interval;
++
++ /**
++ * (micro)frame to initialize a periodic transfer. The transfer
++ * executes in the following (micro)frame.
++ */
++ uint16_t sched_frame;
++
++ /*
++ ** Frame a NAK was received on this queue head, used to minimise NAK retransmission
++ */
++ uint16_t nak_frame;
++
++ /** (micro)frame at which last start split was initialized. */
++ uint16_t start_split_frame;
++
++ /** @} */
++
++ /**
++ * Used instead of original buffer if
++ * it(physical address) is not dword-aligned.
++ */
++ uint8_t *dw_align_buf;
++ dwc_dma_t dw_align_buf_dma;
++
++ /** Entry for QH in either the periodic or non-periodic schedule. */
++ dwc_list_link_t qh_list_entry;
++
++ /** @name Descriptor DMA support */
++ /** @{ */
++
++ /** Descriptor List. */
++ dwc_otg_host_dma_desc_t *desc_list;
++
++ /** Descriptor List physical address. */
++ dwc_dma_t desc_list_dma;
++
++ /**
++ * Xfer Bytes array.
++ * Each element corresponds to a descriptor and indicates
++ * original XferSize size value for the descriptor.
++ */
++ uint32_t *n_bytes;
++
++ /** Actual number of transfer descriptors in a list. */
++ uint16_t ntd;
++
++ /** First activated isochronous transfer descriptor index. */
++ uint8_t td_first;
++ /** Last activated isochronous transfer descriptor index. */
++ uint8_t td_last;
++
++ /** @} */
++
++
++ uint16_t speed;
++ uint16_t frame_usecs[8];
++
++ uint32_t skip_count;
++} dwc_otg_qh_t;
++
++DWC_CIRCLEQ_HEAD(hc_list, dwc_hc);
++
++typedef struct urb_tq_entry {
++ struct urb *urb;
++ DWC_TAILQ_ENTRY(urb_tq_entry) urb_tq_entries;
++} urb_tq_entry_t;
++
++DWC_TAILQ_HEAD(urb_list, urb_tq_entry);
++
++/**
++ * This structure holds the state of the HCD, including the non-periodic and
++ * periodic schedules.
++ */
++struct dwc_otg_hcd {
++ /** The DWC otg device pointer */
++ struct dwc_otg_device *otg_dev;
++ /** DWC OTG Core Interface Layer */
++ dwc_otg_core_if_t *core_if;
++
++ /** Function HCD driver callbacks */
++ struct dwc_otg_hcd_function_ops *fops;
++
++ /** Internal DWC HCD Flags */
++ volatile union dwc_otg_hcd_internal_flags {
++ uint32_t d32;
++ struct {
++ unsigned port_connect_status_change:1;
++ unsigned port_connect_status:1;
++ unsigned port_reset_change:1;
++ unsigned port_enable_change:1;
++ unsigned port_suspend_change:1;
++ unsigned port_over_current_change:1;
++ unsigned port_l1_change:1;
++ unsigned reserved:26;
++ } b;
++ } flags;
++
++ /**
++ * Inactive items in the non-periodic schedule. This is a list of
++ * Queue Heads. Transfers associated with these Queue Heads are not
++ * currently assigned to a host channel.
++ */
++ dwc_list_link_t non_periodic_sched_inactive;
++
++ /**
++ * Active items in the non-periodic schedule. This is a list of
++ * Queue Heads. Transfers associated with these Queue Heads are
++ * currently assigned to a host channel.
++ */
++ dwc_list_link_t non_periodic_sched_active;
++
++ /**
++ * Pointer to the next Queue Head to process in the active
++ * non-periodic schedule.
++ */
++ dwc_list_link_t *non_periodic_qh_ptr;
++
++ /**
++ * Inactive items in the periodic schedule. This is a list of QHs for
++ * periodic transfers that are _not_ scheduled for the next frame.
++ * Each QH in the list has an interval counter that determines when it
++ * needs to be scheduled for execution. This scheduling mechanism
++ * allows only a simple calculation for periodic bandwidth used (i.e.
++ * must assume that all periodic transfers may need to execute in the
++ * same frame). However, it greatly simplifies scheduling and should
++ * be sufficient for the vast majority of OTG hosts, which need to
++ * connect to a small number of peripherals at one time.
++ *
++ * Items move from this list to periodic_sched_ready when the QH
++ * interval counter is 0 at SOF.
++ */
++ dwc_list_link_t periodic_sched_inactive;
++
++ /**
++ * List of periodic QHs that are ready for execution in the next
++ * frame, but have not yet been assigned to host channels.
++ *
++ * Items move from this list to periodic_sched_assigned as host
++ * channels become available during the current frame.
++ */
++ dwc_list_link_t periodic_sched_ready;
++
++ /**
++ * List of periodic QHs to be executed in the next frame that are
++ * assigned to host channels.
++ *
++ * Items move from this list to periodic_sched_queued as the
++ * transactions for the QH are queued to the DWC_otg controller.
++ */
++ dwc_list_link_t periodic_sched_assigned;
++
++ /**
++ * List of periodic QHs that have been queued for execution.
++ *
++ * Items move from this list to either periodic_sched_inactive or
++ * periodic_sched_ready when the channel associated with the transfer
++ * is released. If the interval for the QH is 1, the item moves to
++ * periodic_sched_ready because it must be rescheduled for the next
++ * frame. Otherwise, the item moves to periodic_sched_inactive.
++ */
++ dwc_list_link_t periodic_sched_queued;
++
++ /**
++ * Total bandwidth claimed so far for periodic transfers. This value
++ * is in microseconds per (micro)frame. The assumption is that all
++ * periodic transfers may occur in the same (micro)frame.
++ */
++ uint16_t periodic_usecs;
++
++ /**
++ * Total bandwidth claimed so far for all periodic transfers
++ * in a frame.
++ * This will include a mixture of HS and FS transfers.
++ * Units are microseconds per (micro)frame.
++ * We have a budget per frame and have to schedule
++ * transactions accordingly.
++ * Watch out for the fact that things are actually scheduled for the
++ * "next frame".
++ */
++ uint16_t frame_usecs[8];
++
++
++ /**
++ * Frame number read from the core at SOF. The value ranges from 0 to
++ * DWC_HFNUM_MAX_FRNUM.
++ */
++ uint16_t frame_number;
++
++ /**
++ * Count of periodic QHs, if using several eps. For SOF enable/disable.
++ */
++ uint16_t periodic_qh_count;
++
++ /**
++ * Free host channels in the controller. This is a list of
++ * dwc_hc_t items.
++ */
++ struct hc_list free_hc_list;
++ /**
++ * Number of host channels assigned to periodic transfers. Currently
++ * assuming that there is a dedicated host channel for each periodic
++ * transaction and at least one host channel available for
++ * non-periodic transactions.
++ */
++ int periodic_channels; /* microframe_schedule==0 */
++
++ /**
++ * Number of host channels assigned to non-periodic transfers.
++ */
++ int non_periodic_channels; /* microframe_schedule==0 */
++
++ /**
++ * Number of host channels assigned to non-periodic transfers.
++ */
++ int available_host_channels;
++
++ /**
++ * Array of pointers to the host channel descriptors. Allows accessing
++ * a host channel descriptor given the host channel number. This is
++ * useful in interrupt handlers.
++ */
++ struct dwc_hc *hc_ptr_array[MAX_EPS_CHANNELS];
++
++ /**
++ * Buffer to use for any data received during the status phase of a
++ * control transfer. Normally no data is transferred during the status
++ * phase. This buffer is used as a bit bucket.
++ */
++ uint8_t *status_buf;
++
++ /**
++ * DMA address for status_buf.
++ */
++ dma_addr_t status_buf_dma;
++#define DWC_OTG_HCD_STATUS_BUF_SIZE 64
++
++ /**
++ * Connection timer. An OTG host must display a message if the device
++ * does not connect. Started when the VBus power is turned on via
++ * sysfs attribute "buspower".
++ */
++ dwc_timer_t *conn_timer;
++
++ /* Tasket to do a reset */
++ dwc_tasklet_t *reset_tasklet;
++
++ dwc_tasklet_t *completion_tasklet;
++ struct urb_list completed_urb_list;
++
++ /* */
++ dwc_spinlock_t *lock;
++ dwc_spinlock_t *channel_lock;
++ /**
++ * Private data that could be used by OS wrapper.
++ */
++ void *priv;
++
++ uint8_t otg_port;
++
++ /** Frame List */
++ uint32_t *frame_list;
++
++ /** Hub - Port assignment */
++ int hub_port[128];
++#ifdef FIQ_DEBUG
++ int hub_port_alloc[2048];
++#endif
++
++ /** Frame List DMA address */
++ dma_addr_t frame_list_dma;
++
++ struct fiq_stack *fiq_stack;
++ struct fiq_state *fiq_state;
++
++ /** Virtual address for split transaction DMA bounce buffers */
++ struct fiq_dma_blob *fiq_dmab;
++
++#ifdef DEBUG
++ uint32_t frrem_samples;
++ uint64_t frrem_accum;
++
++ uint32_t hfnum_7_samples_a;
++ uint64_t hfnum_7_frrem_accum_a;
++ uint32_t hfnum_0_samples_a;
++ uint64_t hfnum_0_frrem_accum_a;
++ uint32_t hfnum_other_samples_a;
++ uint64_t hfnum_other_frrem_accum_a;
++
++ uint32_t hfnum_7_samples_b;
++ uint64_t hfnum_7_frrem_accum_b;
++ uint32_t hfnum_0_samples_b;
++ uint64_t hfnum_0_frrem_accum_b;
++ uint32_t hfnum_other_samples_b;
++ uint64_t hfnum_other_frrem_accum_b;
++#endif
++};
++
++/** @name Transaction Execution Functions */
++/** @{ */
++extern dwc_otg_transaction_type_e dwc_otg_hcd_select_transactions(dwc_otg_hcd_t
++ * hcd);
++extern void dwc_otg_hcd_queue_transactions(dwc_otg_hcd_t * hcd,
++ dwc_otg_transaction_type_e tr_type);
++
++int dwc_otg_hcd_allocate_port(dwc_otg_hcd_t * hcd, dwc_otg_qh_t *qh);
++void dwc_otg_hcd_release_port(dwc_otg_hcd_t * dwc_otg_hcd, dwc_otg_qh_t *qh);
++
++extern int fiq_fsm_queue_transaction(dwc_otg_hcd_t *hcd, dwc_otg_qh_t *qh);
++extern int fiq_fsm_transaction_suitable(dwc_otg_qh_t *qh);
++extern void dwc_otg_cleanup_fiq_channel(dwc_otg_hcd_t *hcd, uint32_t num);
++
++/** @} */
++
++/** @name Interrupt Handler Functions */
++/** @{ */
++extern int32_t dwc_otg_hcd_handle_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_sof_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_rx_status_q_level_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_np_tx_fifo_empty_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_perio_tx_fifo_empty_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_incomplete_periodic_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_port_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_conn_id_status_change_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_disconnect_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_hc_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_hc_n_intr(dwc_otg_hcd_t * dwc_otg_hcd,
++ uint32_t num);
++extern int32_t dwc_otg_hcd_handle_session_req_intr(dwc_otg_hcd_t * dwc_otg_hcd);
++extern int32_t dwc_otg_hcd_handle_wakeup_detected_intr(dwc_otg_hcd_t *
++ dwc_otg_hcd);
++/** @} */
++
++/** @name Schedule Queue Functions */
++/** @{ */
++
++/* Implemented in dwc_otg_hcd_queue.c */
++extern dwc_otg_qh_t *dwc_otg_hcd_qh_create(dwc_otg_hcd_t * hcd,
++ dwc_otg_hcd_urb_t * urb, int atomic_alloc);
++extern void dwc_otg_hcd_qh_free(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++extern int dwc_otg_hcd_qh_add(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++extern void dwc_otg_hcd_qh_remove(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++extern void dwc_otg_hcd_qh_deactivate(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh,
++ int sched_csplit);
++
++/** Remove and free a QH */
++static inline void dwc_otg_hcd_qh_remove_and_free(dwc_otg_hcd_t * hcd,
++ dwc_otg_qh_t * qh)
++{
++ dwc_irqflags_t flags;
++ DWC_SPINLOCK_IRQSAVE(hcd->lock, &flags);
++ dwc_otg_hcd_qh_remove(hcd, qh);
++ DWC_SPINUNLOCK_IRQRESTORE(hcd->lock, flags);
++ dwc_otg_hcd_qh_free(hcd, qh);
++}
++
++/** Allocates memory for a QH structure.
++ * @return Returns the memory allocate or NULL on error. */
++static inline dwc_otg_qh_t *dwc_otg_hcd_qh_alloc(int atomic_alloc)
++{
++ if (atomic_alloc)
++ return (dwc_otg_qh_t *) DWC_ALLOC_ATOMIC(sizeof(dwc_otg_qh_t));
++ else
++ return (dwc_otg_qh_t *) DWC_ALLOC(sizeof(dwc_otg_qh_t));
++}
++
++extern dwc_otg_qtd_t *dwc_otg_hcd_qtd_create(dwc_otg_hcd_urb_t * urb,
++ int atomic_alloc);
++extern void dwc_otg_hcd_qtd_init(dwc_otg_qtd_t * qtd, dwc_otg_hcd_urb_t * urb);
++extern int dwc_otg_hcd_qtd_add(dwc_otg_qtd_t * qtd, dwc_otg_hcd_t * dwc_otg_hcd,
++ dwc_otg_qh_t ** qh, int atomic_alloc);
++
++/** Allocates memory for a QTD structure.
++ * @return Returns the memory allocate or NULL on error. */
++static inline dwc_otg_qtd_t *dwc_otg_hcd_qtd_alloc(int atomic_alloc)
++{
++ if (atomic_alloc)
++ return (dwc_otg_qtd_t *) DWC_ALLOC_ATOMIC(sizeof(dwc_otg_qtd_t));
++ else
++ return (dwc_otg_qtd_t *) DWC_ALLOC(sizeof(dwc_otg_qtd_t));
++}
++
++/** Frees the memory for a QTD structure. QTD should already be removed from
++ * list.
++ * @param qtd QTD to free.*/
++static inline void dwc_otg_hcd_qtd_free(dwc_otg_qtd_t * qtd)
++{
++ DWC_FREE(qtd);
++}
++
++/** Removes a QTD from list.
++ * @param hcd HCD instance.
++ * @param qtd QTD to remove from list.
++ * @param qh QTD belongs to.
++ */
++static inline void dwc_otg_hcd_qtd_remove(dwc_otg_hcd_t * hcd,
++ dwc_otg_qtd_t * qtd,
++ dwc_otg_qh_t * qh)
++{
++ DWC_CIRCLEQ_REMOVE(&qh->qtd_list, qtd, qtd_list_entry);
++}
++
++/** Remove and free a QTD
++ * Need to disable IRQ and hold hcd lock while calling this function out of
++ * interrupt servicing chain */
++static inline void dwc_otg_hcd_qtd_remove_and_free(dwc_otg_hcd_t * hcd,
++ dwc_otg_qtd_t * qtd,
++ dwc_otg_qh_t * qh)
++{
++ dwc_otg_hcd_qtd_remove(hcd, qtd, qh);
++ dwc_otg_hcd_qtd_free(qtd);
++}
++
++/** @} */
++
++/** @name Descriptor DMA Supporting Functions */
++/** @{ */
++
++extern void dwc_otg_hcd_start_xfer_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++extern void dwc_otg_hcd_complete_xfer_ddma(dwc_otg_hcd_t * hcd,
++ dwc_hc_t * hc,
++ dwc_otg_hc_regs_t * hc_regs,
++ dwc_otg_halt_status_e halt_status);
++
++extern int dwc_otg_hcd_qh_init_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++extern void dwc_otg_hcd_qh_free_ddma(dwc_otg_hcd_t * hcd, dwc_otg_qh_t * qh);
++
++/** @} */
++
++/** @name Internal Functions */
++/** @{ */
++dwc_otg_qh_t *dwc_urb_to_qh(dwc_otg_hcd_urb_t * urb);
++/** @} */
++
++#ifdef CONFIG_USB_DWC_OTG_LPM
++extern int dwc_otg_hcd_get_hc_for_lpm_tran(dwc_otg_hcd_t * hcd,
++ uint8_t devaddr);
++extern void dwc_otg_hcd_free_hc_from_lpm(dwc_otg_hcd_t * hcd);
++#endif
++
++/** Gets the QH that contains the list_head */
++#define dwc_list_to_qh(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qh_t, qh_list_entry)
++
++/** Gets the QTD that contains the list_head */
++#define dwc_list_to_qtd(_list_head_ptr_) container_of(_list_head_ptr_, dwc_otg_qtd_t, qtd_list_entry)
++
++/** Check if QH is non-periodic */
++#define dwc_qh_is_non_per(_qh_ptr_) ((_qh_ptr_->ep_type == UE_BULK) || \
++ (_qh_ptr_->ep_type == UE_CONTROL))
++
++/** High bandwidth multiplier as encoded in highspeed endpoint descriptors */
++#define dwc_hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))
++
++/** Packet size for any kind of endpoint descriptor */
++#define dwc_max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)
++
++/**
++ * Returns true if _frame1 is less than or equal to _frame2. The comparison is
++ * done modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the
++ * frame number when the max frame number is reached.
++ */
++static inline int dwc_frame_num_le(uint16_t frame1, uint16_t frame2)
++{
++ return ((frame2 - frame1) & DWC_HFNUM_MAX_FRNUM) <=
++ (DWC_HFNUM_MAX_FRNUM >> 1);
++}
++
++/**
++ * Returns true if _frame1 is greater than _frame2. The comparison is done
++ * modulo DWC_HFNUM_MAX_FRNUM. This accounts for the rollover of the frame
++ * number when the max frame number is reached.
++ */
++static inline int dwc_frame_num_gt(uint16_t frame1, uint16_t frame2)
++{
++ return (frame1 != frame2) &&
++ (((frame1 - frame2) & DWC_HFNUM_MAX_FRNUM) <
++ (DWC_HFNUM_MAX_FRNUM >> 1));
++}
++
++/**
++ * Increments _frame by the amount specified by _inc. The addition is done
++ * modulo DWC_HFNUM_MAX_FRNUM. Returns the incremented value.
++ */
++static inline uint16_t dwc_frame_num_inc(uint16_t frame, uint16_t inc)
++{
++ return (frame + inc) & DWC_HFNUM_MAX_FRNUM;
++}
++
++static inline uint16_t dwc_full_frame_num(uint16_t frame)
++{
++ return (frame & DWC_HFNUM_MAX_FRNUM) >> 3;
++}
++
++static inline uint16_t dwc_micro_frame_num(uint16_t frame)
++{
++ return frame & 0x7;
++}
++
++void dwc_otg_hcd_save_data_toggle(dwc_hc_t * hc,
++ dwc_otg_hc_regs_t * hc_regs,
++ dwc_otg_qtd_t * qtd);
++
++#ifdef DEBUG
++/**
++ * Macro to sample the remaining PHY clocks left in the current frame. This
++ * may be used during debugging to determine the average time it takes to
++ * execute sections of code. There are two possible sample points, "a" and
++ * "b", so the _letter argument must be one of these values.
++ *
++ * To dump the average sample times, read the "hcd_frrem" sysfs attribute. For
++ * example, "cat /sys/devices/lm0/hcd_frrem".
++ */
++#define dwc_sample_frrem(_hcd, _qh, _letter) \
++{ \
++ hfnum_data_t hfnum; \
++ dwc_otg_qtd_t *qtd; \
++ qtd = list_entry(_qh->qtd_list.next, dwc_otg_qtd_t, qtd_list_entry); \
++ if (usb_pipeint(qtd->urb->pipe) && _qh->start_split_frame != 0 && !qtd->complete_split) { \
++ hfnum.d32 = DWC_READ_REG32(&_hcd->core_if->host_if->host_global_regs->hfnum); \
++ switch (hfnum.b.frnum & 0x7) { \
++ case 7: \
++ _hcd->hfnum_7_samples_##_letter++; \
++ _hcd->hfnum_7_frrem_accum_##_letter += hfnum.b.frrem; \
++ break; \
++ case 0: \
++ _hcd->hfnum_0_samples_##_letter++; \
++ _hcd->hfnum_0_frrem_accum_##_letter += hfnum.b.frrem; \
++ break; \
++ default: \
++ _hcd->hfnum_other_samples_##_letter++; \
++ _hcd->hfnum_other_frrem_accum_##_letter += hfnum.b.frrem; \
++ break; \
++ } \
++ } \
++}
++#else
++#define dwc_sample_frrem(_hcd, _qh, _letter)
++#endif
++#endif
++#endif /* DWC_DEVICE_ONLY */
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,417 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_if.h $
@@ -276456,9 +278812,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h linux-rpi/driver
+
+#endif /* __DWC_HCD_IF_H__ */
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,2714 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_intr.c $
@@ -279174,9 +281530,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c linux-rpi/driv
+ return retval;
+}
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,999 @@
+
+/* ==========================================================================
@@ -280177,9 +282533,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c linux-rpi/dri
+}
+
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,957 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_hcd_queue.c $
@@ -281138,9 +283494,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c linux-rpi/dri
+}
+
+#endif /* DWC_DEVICE_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,188 @@
+#ifndef _DWC_OS_DEP_H_
+#define _DWC_OS_DEP_H_
@@ -281330,9 +283686,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h linux-rpi/driver
+
+
+#endif /* _DWC_OS_DEP_H_ */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,2712 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd.c $
@@ -284046,9 +286402,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.c linux-rpi/drivers/u
+}
+
+#endif /* DWC_HOST_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.h 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,266 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd.h $
@@ -284316,9 +286672,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd.h linux-rpi/drivers/u
+extern void do_test_mode(void *data);
+#endif
+#endif /* DWC_HOST_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,360 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd_if.h $
@@ -284680,9 +287036,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h linux-rpi/driver
+#endif /* __DWC_PCD_IF_H__ */
+
+#endif /* DWC_HOST_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,5147 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd_intr.c $
@@ -289831,9 +292187,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c linux-rpi/driv
+}
+
+#endif /* DWC_HOST_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,1360 @@
+ /* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_pcd_linux.c $
@@ -291195,9 +293551,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c linux-rpi/dri
+EXPORT_SYMBOL(usb_gadget_unregister_driver);
+
+#endif /* DWC_HOST_ONLY */
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_regs.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_regs.h
---- linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_regs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_regs.h 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_regs.h linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_regs.h
+--- linux-4.1.10/drivers/usb/host/dwc_otg/dwc_otg_regs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/dwc_otg_regs.h 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,2550 @@
+/* ==========================================================================
+ * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_regs.h $
@@ -293749,29 +296105,95 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/dwc_otg_regs.h linux-rpi/drivers/
+} gpwrdn_data_t;
+
+#endif
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/Makefile linux-rpi/drivers/usb/host/dwc_otg/test/Makefile
---- linux-4.1.6/drivers/usb/host/dwc_otg/test/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/test/Makefile 2015-08-26 10:26:11.809358522 +0200
-@@ -0,0 +1,16 @@
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/Makefile linux-rpi/drivers/usb/host/dwc_otg/Makefile
+--- linux-4.1.10/drivers/usb/host/dwc_otg/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/Makefile 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,82 @@
++#
++# Makefile for DWC_otg Highspeed USB controller driver
++#
+
-+PERL=/usr/bin/perl
-+PL_TESTS=test_sysfs.pl test_mod_param.pl
++ifneq ($(KERNELRELEASE),)
+
-+.PHONY : test
-+test : perl_tests
++# Use the BUS_INTERFACE variable to compile the software for either
++# PCI(PCI_INTERFACE) or LM(LM_INTERFACE) bus.
++ifeq ($(BUS_INTERFACE),)
++# BUS_INTERFACE = -DPCI_INTERFACE
++# BUS_INTERFACE = -DLM_INTERFACE
++ BUS_INTERFACE = -DPLATFORM_INTERFACE
++endif
+
-+perl_tests :
-+ @echo
-+ @echo Running perl tests
-+ @for test in $(PL_TESTS); do \
-+ if $(PERL) ./$$test ; then \
-+ echo "=======> $$test, PASSED" ; \
-+ else echo "=======> $$test, FAILED" ; \
-+ fi \
-+ done
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm linux-rpi/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm
---- linux-4.1.6/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm 2015-08-26 10:26:11.809358522 +0200
++#ccflags-y += -DDEBUG
++#ccflags-y += -DDWC_OTG_DEBUGLEV=1 # reduce common debug msgs
++
++# Use one of the following flags to compile the software in host-only or
++# device-only mode.
++#ccflags-y += -DDWC_HOST_ONLY
++#ccflags-y += -DDWC_DEVICE_ONLY
++
++ccflags-y += -Dlinux -DDWC_HS_ELECT_TST
++#ccflags-y += -DDWC_EN_ISOC
++ccflags-y += -I$(obj)/../dwc_common_port
++#ccflags-y += -I$(PORTLIB)
++ccflags-y += -DDWC_LINUX
++ccflags-y += $(CFI)
++ccflags-y += $(BUS_INTERFACE)
++#ccflags-y += -DDWC_DEV_SRPCAP
++
++obj-$(CONFIG_USB_DWCOTG) += dwc_otg.o
++
++dwc_otg-objs := dwc_otg_driver.o dwc_otg_attr.o
++dwc_otg-objs += dwc_otg_cil.o dwc_otg_cil_intr.o
++dwc_otg-objs += dwc_otg_pcd_linux.o dwc_otg_pcd.o dwc_otg_pcd_intr.o
++dwc_otg-objs += dwc_otg_hcd.o dwc_otg_hcd_linux.o dwc_otg_hcd_intr.o dwc_otg_hcd_queue.o dwc_otg_hcd_ddma.o
++dwc_otg-objs += dwc_otg_adp.o
++dwc_otg-objs += dwc_otg_fiq_fsm.o
++dwc_otg-objs += dwc_otg_fiq_stub.o
++ifneq ($(CFI),)
++dwc_otg-objs += dwc_otg_cfi.o
++endif
++
++kernrelwd := $(subst ., ,$(KERNELRELEASE))
++kernrel3 := $(word 1,$(kernrelwd)).$(word 2,$(kernrelwd)).$(word 3,$(kernrelwd))
++
++ifneq ($(kernrel3),2.6.20)
++ccflags-y += $(CPPFLAGS)
++endif
++
++else
++
++PWD := $(shell pwd)
++PORTLIB := $(PWD)/../dwc_common_port
++
++# Command paths
++CTAGS := $(CTAGS)
++DOXYGEN := $(DOXYGEN)
++
++default: portlib
++ $(MAKE) -C$(KDIR) M=$(PWD) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
++
++install: default
++ $(MAKE) -C$(KDIR) M=$(PORTLIB) modules_install
++ $(MAKE) -C$(KDIR) M=$(PWD) modules_install
++
++portlib:
++ $(MAKE) -C$(KDIR) M=$(PORTLIB) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) modules
++ cp $(PORTLIB)/Module.symvers $(PWD)/
++
++docs: $(wildcard *.[hc]) doc/doxygen.cfg
++ $(DOXYGEN) doc/doxygen.cfg
++
++tags: $(wildcard *.[hc])
++ $(CTAGS) -e $(wildcard *.[hc]) $(wildcard linux/*.[hc]) $(wildcard $(KDIR)/include/linux/usb*.h)
++
++
++clean:
++ rm -rf *.o *.ko .*cmd *.mod.c .tmp_versions Module.symvers
++
++endif
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm linux-rpi/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm
+--- linux-4.1.10/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,337 @@
+package dwc_otg_test;
+
@@ -294110,9 +296532,29 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm linux-rpi/dr
+);
+
+1;
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/test_mod_param.pl linux-rpi/drivers/usb/host/dwc_otg/test/test_mod_param.pl
---- linux-4.1.6/drivers/usb/host/dwc_otg/test/test_mod_param.pl 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/test/test_mod_param.pl 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/test/Makefile linux-rpi/drivers/usb/host/dwc_otg/test/Makefile
+--- linux-4.1.10/drivers/usb/host/dwc_otg/test/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/test/Makefile 2015-10-07 16:40:56.000000000 +0200
+@@ -0,0 +1,16 @@
++
++PERL=/usr/bin/perl
++PL_TESTS=test_sysfs.pl test_mod_param.pl
++
++.PHONY : test
++test : perl_tests
++
++perl_tests :
++ @echo
++ @echo Running perl tests
++ @for test in $(PL_TESTS); do \
++ if $(PERL) ./$$test ; then \
++ echo "=======> $$test, PASSED" ; \
++ else echo "=======> $$test, FAILED" ; \
++ fi \
++ done
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/test/test_mod_param.pl linux-rpi/drivers/usb/host/dwc_otg/test/test_mod_param.pl
+--- linux-4.1.10/drivers/usb/host/dwc_otg/test/test_mod_param.pl 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/test/test_mod_param.pl 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,133 @@
+#!/usr/bin/perl -w
+#
@@ -294247,9 +296689,9 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/test_mod_param.pl linux-rpi/
+
+test_main();
+0;
-diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/test_sysfs.pl linux-rpi/drivers/usb/host/dwc_otg/test/test_sysfs.pl
---- linux-4.1.6/drivers/usb/host/dwc_otg/test/test_sysfs.pl 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/usb/host/dwc_otg/test/test_sysfs.pl 2015-08-26 10:26:11.809358522 +0200
+diff -Nur linux-4.1.10/drivers/usb/host/dwc_otg/test/test_sysfs.pl linux-rpi/drivers/usb/host/dwc_otg/test/test_sysfs.pl
+--- linux-4.1.10/drivers/usb/host/dwc_otg/test/test_sysfs.pl 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/usb/host/dwc_otg/test/test_sysfs.pl 2015-10-07 16:40:56.000000000 +0200
@@ -0,0 +1,193 @@
+#!/usr/bin/perl -w
+#
@@ -294444,70 +296886,56 @@ diff -Nur linux-4.1.6/drivers/usb/host/dwc_otg/test/test_sysfs.pl linux-rpi/driv
+
+test_main();
+0;
-diff -Nur linux-4.1.6/drivers/video/fbdev/Kconfig linux-rpi/drivers/video/fbdev/Kconfig
---- linux-4.1.6/drivers/video/fbdev/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/video/fbdev/Kconfig 2015-08-26 10:26:11.873359401 +0200
-@@ -224,6 +224,20 @@
- comment "Frame buffer hardware drivers"
- depends on FB
+diff -Nur linux-4.1.10/drivers/usb/host/Kconfig linux-rpi/drivers/usb/host/Kconfig
+--- linux-4.1.10/drivers/usb/host/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/host/Kconfig 2015-10-07 16:40:56.000000000 +0200
+@@ -738,6 +738,19 @@
+ To compile this driver a module, choose M here: the module
+ will be called "hwa-hc".
-+config FB_BCM2708
-+ tristate "BCM2708 framebuffer support"
-+ depends on FB && RASPBERRYPI_FIRMWARE
-+ select FB_CFB_FILLRECT
-+ select FB_CFB_COPYAREA
-+ select FB_CFB_IMAGEBLIT
++config USB_DWCOTG
++ tristate "Synopsis DWC host support"
++ depends on USB
+ help
-+ This framebuffer device driver is for the BCM2708 framebuffer.
++ The Synopsis DWC controller is a dual-role
++ host/peripheral/OTG ("On The Go") USB controllers.
+
-+ If you want to compile this as a module (=code which can be
-+ inserted into and removed from the running kernel), say M
-+ here and read <file:Documentation/kbuild/modules.txt>. The module
-+ will be called bcm2708_fb.
++ Enable this option to support this IP in host controller mode.
++ If unsure, say N.
+
- config FB_GRVGA
- tristate "Aeroflex Gaisler framebuffer support"
- depends on FB && SPARC
-@@ -2481,3 +2495,16 @@
- help
- This driver implements support for the Solomon SSD1307
- OLED controller over I2C.
++ To compile this driver as a module, choose M here: the
++ modules built will be called dwc_otg and dwc_common_port.
+
-+config FB_RPISENSE
-+ tristate "Raspberry Pi Sense HAT framebuffer"
-+ depends on FB
-+ select MFD_RPISENSE_CORE
-+ select FB_SYS_FOPS
-+ select FB_SYS_FILLRECT
-+ select FB_SYS_COPYAREA
-+ select FB_SYS_IMAGEBLIT
-+ select FB_DEFERRED_IO
+ config USB_IMX21_HCD
+ tristate "i.MX21 HCD support"
+ depends on ARM && ARCH_MXC
+diff -Nur linux-4.1.10/drivers/usb/host/Makefile linux-rpi/drivers/usb/host/Makefile
+--- linux-4.1.10/drivers/usb/host/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/host/Makefile 2015-10-07 16:40:56.000000000 +0200
+@@ -68,6 +68,8 @@
+ obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
+ obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
+ obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o
+
-+ help
-+ This is the framebuffer driver for the Raspberry Pi Sense HAT
-diff -Nur linux-4.1.6/drivers/video/fbdev/Makefile linux-rpi/drivers/video/fbdev/Makefile
---- linux-4.1.6/drivers/video/fbdev/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/video/fbdev/Makefile 2015-08-26 10:26:11.873359401 +0200
-@@ -12,6 +12,7 @@
- obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o
-
- # Hardware specific drivers go first
-+obj-$(CONFIG_FB_BCM2708) += bcm2708_fb.o
- obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o
- obj-$(CONFIG_FB_ARC) += arcfb.o
- obj-$(CONFIG_FB_CLPS711X) += clps711x-fb.o
-@@ -149,6 +150,7 @@
- obj-$(CONFIG_FB_MXS) += mxsfb.o
- obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o
- obj-$(CONFIG_FB_SIMPLE) += simplefb.o
-+obj-$(CONFIG_FB_RPISENSE) += rpisense-fb.o
++obj-$(CONFIG_USB_DWCOTG) += dwc_otg/ dwc_common_port/
+ obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o
+ obj-$(CONFIG_USB_FSL_MPH_DR_OF) += fsl-mph-dr-of.o
+ obj-$(CONFIG_USB_HCD_BCMA) += bcma-hcd.o
+diff -Nur linux-4.1.10/drivers/usb/Makefile linux-rpi/drivers/usb/Makefile
+--- linux-4.1.10/drivers/usb/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/usb/Makefile 2015-10-07 16:40:56.000000000 +0200
+@@ -7,6 +7,7 @@
+ obj-$(CONFIG_USB) += core/
+ obj-$(CONFIG_USB_SUPPORT) += phy/
- # the test framebuffer is last
- obj-$(CONFIG_FB_VIRTUAL) += vfb.o
-diff -Nur linux-4.1.6/drivers/video/fbdev/bcm2708_fb.c linux-rpi/drivers/video/fbdev/bcm2708_fb.c
---- linux-4.1.6/drivers/video/fbdev/bcm2708_fb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/video/fbdev/bcm2708_fb.c 2015-08-26 10:26:11.877359456 +0200
-@@ -0,0 +1,853 @@
++obj-$(CONFIG_USB_DWCOTG) += host/
+ obj-$(CONFIG_USB_DWC3) += dwc3/
+ obj-$(CONFIG_USB_DWC2) += dwc2/
+ obj-$(CONFIG_USB_ISP1760) += isp1760/
+diff -Nur linux-4.1.10/drivers/video/fbdev/bcm2708_fb.c linux-rpi/drivers/video/fbdev/bcm2708_fb.c
+--- linux-4.1.10/drivers/video/fbdev/bcm2708_fb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/video/fbdev/bcm2708_fb.c 2015-10-07 16:40:57.000000000 +0200
+@@ -0,0 +1,847 @@
+/*
+ * linux/drivers/video/bcm2708_fb.c
+ *
@@ -294773,12 +297201,6 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/bcm2708_fb.c linux-rpi/drivers/video/f
+ if (var->yoffset > var->yres_virtual - var->yres)
+ var->yoffset = var->yres_virtual - var->yres - 1;
+
-+ yres = var->yres;
-+ if (var->vmode & FB_VMODE_DOUBLE)
-+ yres *= 2;
-+ else if (var->vmode & FB_VMODE_INTERLACED)
-+ yres = (yres + 1) / 2;
-+
+ return 0;
+}
+
@@ -294936,7 +297358,7 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/bcm2708_fb.c linux-rpi/drivers/video/f
+
+static int bcm2708_fb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
+{
-+ s32 result = -1;
++ s32 result;
+ info->var.xoffset = var->xoffset;
+ info->var.yoffset = var->yoffset;
+ result = bcm2708_fb_set_par(info);
@@ -295361,9 +297783,9 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/bcm2708_fb.c linux-rpi/drivers/video/f
+MODULE_PARM_DESC(fbheight, "Height of ARM Framebuffer");
+MODULE_PARM_DESC(fbdepth, "Bit depth of ARM Framebuffer");
+MODULE_PARM_DESC(fbswap, "Swap order of red and blue in 24 and 32 bit modes");
-diff -Nur linux-4.1.6/drivers/video/fbdev/core/cfbimgblt.c linux-rpi/drivers/video/fbdev/core/cfbimgblt.c
---- linux-4.1.6/drivers/video/fbdev/core/cfbimgblt.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/video/fbdev/core/cfbimgblt.c 2015-08-26 10:26:11.881359511 +0200
+diff -Nur linux-4.1.10/drivers/video/fbdev/core/cfbimgblt.c linux-rpi/drivers/video/fbdev/core/cfbimgblt.c
+--- linux-4.1.10/drivers/video/fbdev/core/cfbimgblt.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/video/fbdev/core/cfbimgblt.c 2015-10-07 16:40:57.000000000 +0200
@@ -28,6 +28,11 @@
*
* Also need to add code to deal with cards endians that are different than
@@ -295537,9 +297959,9 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/core/cfbimgblt.c linux-rpi/drivers/vid
slow_imageblit(image, p, dst1, fgcolor, bgcolor,
start_index, pitch_index);
} else
-diff -Nur linux-4.1.6/drivers/video/fbdev/core/fbmem.c linux-rpi/drivers/video/fbdev/core/fbmem.c
---- linux-4.1.6/drivers/video/fbdev/core/fbmem.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/video/fbdev/core/fbmem.c 2015-08-26 10:26:11.881359511 +0200
+diff -Nur linux-4.1.10/drivers/video/fbdev/core/fbmem.c linux-rpi/drivers/video/fbdev/core/fbmem.c
+--- linux-4.1.10/drivers/video/fbdev/core/fbmem.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/video/fbdev/core/fbmem.c 2015-10-07 16:40:57.000000000 +0200
@@ -1084,6 +1084,25 @@
}
EXPORT_SYMBOL(fb_blank);
@@ -295598,9 +298020,69 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/core/fbmem.c linux-rpi/drivers/video/f
arg = (unsigned long) compat_ptr(arg);
case FBIOBLANK:
ret = do_fb_ioctl(info, cmd, arg);
-diff -Nur linux-4.1.6/drivers/video/fbdev/rpisense-fb.c linux-rpi/drivers/video/fbdev/rpisense-fb.c
---- linux-4.1.6/drivers/video/fbdev/rpisense-fb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/video/fbdev/rpisense-fb.c 2015-08-26 10:26:11.905359841 +0200
+diff -Nur linux-4.1.10/drivers/video/fbdev/Kconfig linux-rpi/drivers/video/fbdev/Kconfig
+--- linux-4.1.10/drivers/video/fbdev/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/video/fbdev/Kconfig 2015-10-07 16:40:57.000000000 +0200
+@@ -224,6 +224,20 @@
+ comment "Frame buffer hardware drivers"
+ depends on FB
+
++config FB_BCM2708
++ tristate "BCM2708 framebuffer support"
++ depends on FB && RASPBERRYPI_FIRMWARE
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ help
++ This framebuffer device driver is for the BCM2708 framebuffer.
++
++ If you want to compile this as a module (=code which can be
++ inserted into and removed from the running kernel), say M
++ here and read <file:Documentation/kbuild/modules.txt>. The module
++ will be called bcm2708_fb.
++
+ config FB_GRVGA
+ tristate "Aeroflex Gaisler framebuffer support"
+ depends on FB && SPARC
+@@ -2481,3 +2495,16 @@
+ help
+ This driver implements support for the Solomon SSD1307
+ OLED controller over I2C.
++
++config FB_RPISENSE
++ tristate "Raspberry Pi Sense HAT framebuffer"
++ depends on FB
++ select MFD_RPISENSE_CORE
++ select FB_SYS_FOPS
++ select FB_SYS_FILLRECT
++ select FB_SYS_COPYAREA
++ select FB_SYS_IMAGEBLIT
++ select FB_DEFERRED_IO
++
++ help
++ This is the framebuffer driver for the Raspberry Pi Sense HAT
+diff -Nur linux-4.1.10/drivers/video/fbdev/Makefile linux-rpi/drivers/video/fbdev/Makefile
+--- linux-4.1.10/drivers/video/fbdev/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/video/fbdev/Makefile 2015-10-07 16:40:57.000000000 +0200
+@@ -12,6 +12,7 @@
+ obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o
+
+ # Hardware specific drivers go first
++obj-$(CONFIG_FB_BCM2708) += bcm2708_fb.o
+ obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o
+ obj-$(CONFIG_FB_ARC) += arcfb.o
+ obj-$(CONFIG_FB_CLPS711X) += clps711x-fb.o
+@@ -149,6 +150,7 @@
+ obj-$(CONFIG_FB_MXS) += mxsfb.o
+ obj-$(CONFIG_FB_SSD1307) += ssd1307fb.o
+ obj-$(CONFIG_FB_SIMPLE) += simplefb.o
++obj-$(CONFIG_FB_RPISENSE) += rpisense-fb.o
+
+ # the test framebuffer is last
+ obj-$(CONFIG_FB_VIRTUAL) += vfb.o
+diff -Nur linux-4.1.10/drivers/video/fbdev/rpisense-fb.c linux-rpi/drivers/video/fbdev/rpisense-fb.c
+--- linux-4.1.10/drivers/video/fbdev/rpisense-fb.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/video/fbdev/rpisense-fb.c 2015-10-07 16:40:58.000000000 +0200
@@ -0,0 +1,293 @@
+/*
+ * Raspberry Pi Sense HAT framebuffer driver
@@ -295895,9 +298377,9 @@ diff -Nur linux-4.1.6/drivers/video/fbdev/rpisense-fb.c linux-rpi/drivers/video/
+MODULE_AUTHOR("Serge Schneider <serge@raspberrypi.org>");
+MODULE_LICENSE("GPL");
+
-diff -Nur linux-4.1.6/drivers/video/logo/logo_linux_clut224.ppm linux-rpi/drivers/video/logo/logo_linux_clut224.ppm
---- linux-4.1.6/drivers/video/logo/logo_linux_clut224.ppm 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/video/logo/logo_linux_clut224.ppm 2015-08-26 10:26:11.921360061 +0200
+diff -Nur linux-4.1.10/drivers/video/logo/logo_linux_clut224.ppm linux-rpi/drivers/video/logo/logo_linux_clut224.ppm
+--- linux-4.1.10/drivers/video/logo/logo_linux_clut224.ppm 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/video/logo/logo_linux_clut224.ppm 2015-10-07 16:40:59.000000000 +0200
@@ -1,1604 +1,883 @@
P3
-# Standard 224-color Linux logo
@@ -298384,9 +300866,9 @@ diff -Nur linux-4.1.6/drivers/video/logo/logo_linux_clut224.ppm linux-rpi/driver
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0
-diff -Nur linux-4.1.6/drivers/w1/masters/w1-gpio.c linux-rpi/drivers/w1/masters/w1-gpio.c
---- linux-4.1.6/drivers/w1/masters/w1-gpio.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/w1/masters/w1-gpio.c 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/w1/masters/w1-gpio.c linux-rpi/drivers/w1/masters/w1-gpio.c
+--- linux-4.1.10/drivers/w1/masters/w1-gpio.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/w1/masters/w1-gpio.c 2015-10-07 16:40:59.000000000 +0200
@@ -23,6 +23,19 @@
#include "../w1.h"
#include "../w1_int.h"
@@ -298521,9 +301003,9 @@ diff -Nur linux-4.1.6/drivers/w1/masters/w1-gpio.c linux-rpi/drivers/w1/masters/
return 0;
}
-diff -Nur linux-4.1.6/drivers/w1/slaves/w1_therm.c linux-rpi/drivers/w1/slaves/w1_therm.c
---- linux-4.1.6/drivers/w1/slaves/w1_therm.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/w1/slaves/w1_therm.c 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/w1/slaves/w1_therm.c linux-rpi/drivers/w1/slaves/w1_therm.c
+--- linux-4.1.10/drivers/w1/slaves/w1_therm.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/w1/slaves/w1_therm.c 2015-10-07 16:41:00.000000000 +0200
@@ -92,13 +92,24 @@
static ssize_t w1_slave_show(struct device *device,
struct device_attribute *attr, char *buf);
@@ -298661,9 +301143,9 @@ diff -Nur linux-4.1.6/drivers/w1/slaves/w1_therm.c linux-rpi/drivers/w1/slaves/w
static int __init w1_therm_init(void)
{
int err, i;
-diff -Nur linux-4.1.6/drivers/w1/w1.h linux-rpi/drivers/w1/w1.h
---- linux-4.1.6/drivers/w1/w1.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/w1/w1.h 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/w1/w1.h linux-rpi/drivers/w1/w1.h
+--- linux-4.1.10/drivers/w1/w1.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/w1/w1.h 2015-10-07 16:41:00.000000000 +0200
@@ -171,6 +171,12 @@
u8 (*set_pullup)(void *, int);
@@ -298677,9 +301159,9 @@ diff -Nur linux-4.1.6/drivers/w1/w1.h linux-rpi/drivers/w1/w1.h
void (*search)(void *, struct w1_master *,
u8, w1_slave_found_callback);
};
-diff -Nur linux-4.1.6/drivers/w1/w1_int.c linux-rpi/drivers/w1/w1_int.c
---- linux-4.1.6/drivers/w1/w1_int.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/w1/w1_int.c 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/w1/w1_int.c linux-rpi/drivers/w1/w1_int.c
+--- linux-4.1.10/drivers/w1/w1_int.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/w1/w1_int.c 2015-10-07 16:41:00.000000000 +0200
@@ -123,6 +123,20 @@
return(-EINVAL);
}
@@ -298701,9 +301183,9 @@ diff -Nur linux-4.1.6/drivers/w1/w1_int.c linux-rpi/drivers/w1/w1_int.c
/* Lock until the device is added (or not) to w1_masters. */
mutex_lock(&w1_mlock);
/* Search for the first available id (starting at 1). */
-diff -Nur linux-4.1.6/drivers/w1/w1_io.c linux-rpi/drivers/w1/w1_io.c
---- linux-4.1.6/drivers/w1/w1_io.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/w1/w1_io.c 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/w1/w1_io.c linux-rpi/drivers/w1/w1_io.c
+--- linux-4.1.10/drivers/w1/w1_io.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/w1/w1_io.c 2015-10-07 16:41:00.000000000 +0200
@@ -134,10 +134,22 @@
static void w1_post_write(struct w1_master *dev)
{
@@ -298730,45 +301212,9 @@ diff -Nur linux-4.1.6/drivers/w1/w1_io.c linux-rpi/drivers/w1/w1_io.c
dev->pullup_duration = 0;
}
}
-diff -Nur linux-4.1.6/drivers/watchdog/Kconfig linux-rpi/drivers/watchdog/Kconfig
---- linux-4.1.6/drivers/watchdog/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/watchdog/Kconfig 2015-08-26 10:26:11.929360171 +0200
-@@ -451,6 +451,12 @@
- To compile this driver as a module, choose M here: the
- module will be called retu_wdt.
-
-+config BCM2708_WDT
-+ tristate "BCM2708 Watchdog"
-+ depends on ARCH_BCM2708 || ARCH_BCM2709
-+ help
-+ Enables BCM2708 watchdog support.
-+
- config MOXART_WDT
- tristate "MOXART watchdog"
- depends on ARCH_MOXART
-@@ -1216,7 +1222,7 @@
-
- config BCM2835_WDT
- tristate "Broadcom BCM2835 hardware watchdog"
-- depends on ARCH_BCM2835
-+ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
- select WATCHDOG_CORE
- help
- Watchdog driver for the built in watchdog hardware in Broadcom
-diff -Nur linux-4.1.6/drivers/watchdog/Makefile linux-rpi/drivers/watchdog/Makefile
---- linux-4.1.6/drivers/watchdog/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/drivers/watchdog/Makefile 2015-08-26 10:26:11.929360171 +0200
-@@ -56,6 +56,7 @@
- obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
- obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o
- obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o
-+obj-$(CONFIG_BCM2708_WDT) += bcm2708_wdog.o
- obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o
- obj-$(CONFIG_MOXART_WDT) += moxart_wdt.o
- obj-$(CONFIG_SIRFSOC_WATCHDOG) += sirfsoc_wdt.o
-diff -Nur linux-4.1.6/drivers/watchdog/bcm2708_wdog.c linux-rpi/drivers/watchdog/bcm2708_wdog.c
---- linux-4.1.6/drivers/watchdog/bcm2708_wdog.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/drivers/watchdog/bcm2708_wdog.c 2015-08-26 10:26:11.929360171 +0200
+diff -Nur linux-4.1.10/drivers/watchdog/bcm2708_wdog.c linux-rpi/drivers/watchdog/bcm2708_wdog.c
+--- linux-4.1.10/drivers/watchdog/bcm2708_wdog.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/drivers/watchdog/bcm2708_wdog.c 2015-10-07 16:41:00.000000000 +0200
@@ -0,0 +1,382 @@
+/*
+ * Broadcom BCM2708 watchdog driver.
@@ -299152,9 +301598,440 @@ diff -Nur linux-4.1.6/drivers/watchdog/bcm2708_wdog.c linux-rpi/drivers/watchdog
+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
+MODULE_ALIAS_MISCDEV(TEMP_MINOR);
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/include/linux/broadcom/vc_cma.h linux-rpi/include/linux/broadcom/vc_cma.h
---- linux-4.1.6/include/linux/broadcom/vc_cma.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/broadcom/vc_cma.h 2015-08-26 10:26:12.201363899 +0200
+diff -Nur linux-4.1.10/drivers/watchdog/Kconfig linux-rpi/drivers/watchdog/Kconfig
+--- linux-4.1.10/drivers/watchdog/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/watchdog/Kconfig 2015-10-07 16:41:00.000000000 +0200
+@@ -451,6 +451,12 @@
+ To compile this driver as a module, choose M here: the
+ module will be called retu_wdt.
+
++config BCM2708_WDT
++ tristate "BCM2708 Watchdog"
++ depends on ARCH_BCM2708 || ARCH_BCM2709
++ help
++ Enables BCM2708 watchdog support.
++
+ config MOXART_WDT
+ tristate "MOXART watchdog"
+ depends on ARCH_MOXART
+@@ -1216,7 +1222,7 @@
+
+ config BCM2835_WDT
+ tristate "Broadcom BCM2835 hardware watchdog"
+- depends on ARCH_BCM2835
++ depends on ARCH_BCM2835 || ARCH_BCM2708 || ARCH_BCM2709
+ select WATCHDOG_CORE
+ help
+ Watchdog driver for the built in watchdog hardware in Broadcom
+diff -Nur linux-4.1.10/drivers/watchdog/Makefile linux-rpi/drivers/watchdog/Makefile
+--- linux-4.1.10/drivers/watchdog/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/drivers/watchdog/Makefile 2015-10-07 16:41:00.000000000 +0200
+@@ -56,6 +56,7 @@
+ obj-$(CONFIG_IMX2_WDT) += imx2_wdt.o
+ obj-$(CONFIG_UX500_WATCHDOG) += ux500_wdt.o
+ obj-$(CONFIG_RETU_WATCHDOG) += retu_wdt.o
++obj-$(CONFIG_BCM2708_WDT) += bcm2708_wdog.o
+ obj-$(CONFIG_BCM2835_WDT) += bcm2835_wdt.o
+ obj-$(CONFIG_MOXART_WDT) += moxart_wdt.o
+ obj-$(CONFIG_SIRFSOC_WATCHDOG) += sirfsoc_wdt.o
+diff -Nur linux-4.1.10/include/linux/broadcom/bcm2835_smi.h linux-rpi/include/linux/broadcom/bcm2835_smi.h
+--- linux-4.1.10/include/linux/broadcom/bcm2835_smi.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/broadcom/bcm2835_smi.h 2015-10-07 16:41:05.000000000 +0200
+@@ -0,0 +1,391 @@
++/**
++ * Declarations and definitions for Broadcom's Secondary Memory Interface
++ *
++ * Written by Luke Wren <luke@raspberrypi.org>
++ * Copyright (c) 2015, Raspberry Pi (Trading) Ltd.
++ * Copyright (c) 2010-2012 Broadcom. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ * notice, this list of conditions, and the following disclaimer,
++ * without modification.
++ * 2. Redistributions in binary form must reproduce the above copyright
++ * notice, this list of conditions and the following disclaimer in the
++ * documentation and/or other materials provided with the distribution.
++ * 3. The names of the above-listed copyright holders may not be used
++ * to endorse or promote products derived from this software without
++ * specific prior written permission.
++ *
++ * ALTERNATIVELY, this software may be distributed under the terms of the
++ * GNU General Public License ("GPL") version 2, as published by the Free
++ * Software Foundation.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
++ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef BCM2835_SMI_H
++#define BCM2835_SMI_H
++
++#include <linux/ioctl.h>
++
++#ifndef __KERNEL__
++#include <stdint.h>
++#include <stdbool.h>
++#endif
++
++#define BCM2835_SMI_IOC_MAGIC 0x1
++#define BCM2835_SMI_INVALID_HANDLE (~0)
++
++/* IOCTLs 0x100...0x1ff are not device-specific - we can use them */
++#define BCM2835_SMI_IOC_GET_SETTINGS _IO(BCM2835_SMI_IOC_MAGIC, 0)
++#define BCM2835_SMI_IOC_WRITE_SETTINGS _IO(BCM2835_SMI_IOC_MAGIC, 1)
++#define BCM2835_SMI_IOC_ADDRESS _IO(BCM2835_SMI_IOC_MAGIC, 2)
++#define BCM2835_SMI_IOC_MAX 2
++
++#define SMI_WIDTH_8BIT 0
++#define SMI_WIDTH_16BIT 1
++#define SMI_WIDTH_9BIT 2
++#define SMI_WIDTH_18BIT 3
++
++/* max number of bytes where DMA will not be used */
++#define DMA_THRESHOLD_BYTES 128
++#define DMA_BOUNCE_BUFFER_SIZE (1024 * 1024 / 2)
++#define DMA_BOUNCE_BUFFER_COUNT 3
++
++
++struct smi_settings {
++ int data_width;
++ /* Whether or not to pack multiple SMI transfers into a
++ single 32 bit FIFO word */
++ bool pack_data;
++
++ /* Timing for reads (writes the same but for WE)
++ *
++ * OE ----------+ +--------------------
++ * | |
++ * +----------+
++ * SD -<==============================>-----------
++ * SA -<=========================================>-
++ * <-setup-> <-strobe -> <-hold -> <- pace ->
++ */
++
++ int read_setup_time;
++ int read_hold_time;
++ int read_pace_time;
++ int read_strobe_time;
++
++ int write_setup_time;
++ int write_hold_time;
++ int write_pace_time;
++ int write_strobe_time;
++
++ bool dma_enable; /* DREQs */
++ bool dma_passthrough_enable; /* External DREQs */
++ int dma_read_thresh;
++ int dma_write_thresh;
++ int dma_panic_read_thresh;
++ int dma_panic_write_thresh;
++};
++
++/****************************************************************************
++*
++* Declare exported SMI functions
++*
++***************************************************************************/
++
++#ifdef __KERNEL__
++
++#include <linux/dmaengine.h> /* for enum dma_transfer_direction */
++#include <linux/of.h>
++#include <linux/semaphore.h>
++
++struct bcm2835_smi_instance;
++
++struct bcm2835_smi_bounce_info {
++ struct semaphore callback_sem;
++ void *buffer[DMA_BOUNCE_BUFFER_COUNT];
++ dma_addr_t phys[DMA_BOUNCE_BUFFER_COUNT];
++ struct scatterlist sgl[DMA_BOUNCE_BUFFER_COUNT];
++};
++
++
++void bcm2835_smi_set_regs_from_settings(struct bcm2835_smi_instance *);
++
++struct smi_settings *bcm2835_smi_get_settings_from_regs(
++ struct bcm2835_smi_instance *inst);
++
++void bcm2835_smi_write_buf(
++ struct bcm2835_smi_instance *inst,
++ const void *buf,
++ size_t n_bytes);
++
++void bcm2835_smi_read_buf(
++ struct bcm2835_smi_instance *inst,
++ void *buf,
++ size_t n_bytes);
++
++void bcm2835_smi_set_address(struct bcm2835_smi_instance *inst,
++ unsigned int address);
++
++ssize_t bcm2835_smi_user_dma(
++ struct bcm2835_smi_instance *inst,
++ enum dma_transfer_direction dma_dir,
++ char __user *user_ptr,
++ size_t count,
++ struct bcm2835_smi_bounce_info **bounce);
++
++struct bcm2835_smi_instance *bcm2835_smi_get(struct device_node *node);
++
++#endif /* __KERNEL__ */
++
++/****************************************************************
++*
++* Implementation-only declarations
++*
++****************************************************************/
++
++#ifdef BCM2835_SMI_IMPLEMENTATION
++
++/* Clock manager registers for SMI clock: */
++#define CM_SMI_BASE_ADDRESS ((BCM2708_PERI_BASE) + 0x1010b0)
++/* Clock manager "password" to protect registers from spurious writes */
++#define CM_PWD (0x5a << 24)
++
++#define CM_SMI_CTL 0x00
++#define CM_SMI_DIV 0x04
++
++#define CM_SMI_CTL_FLIP (1 << 8)
++#define CM_SMI_CTL_BUSY (1 << 7)
++#define CM_SMI_CTL_KILL (1 << 5)
++#define CM_SMI_CTL_ENAB (1 << 4)
++#define CM_SMI_CTL_SRC_MASK (0xf)
++#define CM_SMI_CTL_SRC_OFFS (0)
++
++#define CM_SMI_DIV_DIVI_MASK (0xf << 12)
++#define CM_SMI_DIV_DIVI_OFFS (12)
++#define CM_SMI_DIV_DIVF_MASK (0xff << 4)
++#define CM_SMI_DIV_DIVF_OFFS (4)
++
++/* SMI register mapping:*/
++#define SMI_BASE_ADDRESS ((BCM2708_PERI_BASE) + 0x600000)
++
++#define SMICS 0x00 /* control + status register */
++#define SMIL 0x04 /* length/count (n external txfers) */
++#define SMIA 0x08 /* address register */
++#define SMID 0x0c /* data register */
++#define SMIDSR0 0x10 /* device 0 read settings */
++#define SMIDSW0 0x14 /* device 0 write settings */
++#define SMIDSR1 0x18 /* device 1 read settings */
++#define SMIDSW1 0x1c /* device 1 write settings */
++#define SMIDSR2 0x20 /* device 2 read settings */
++#define SMIDSW2 0x24 /* device 2 write settings */
++#define SMIDSR3 0x28 /* device 3 read settings */
++#define SMIDSW3 0x2c /* device 3 write settings */
++#define SMIDC 0x30 /* DMA control registers */
++#define SMIDCS 0x34 /* direct control/status register */
++#define SMIDA 0x38 /* direct address register */
++#define SMIDD 0x3c /* direct data registers */
++#define SMIFD 0x40 /* FIFO debug register */
++
++
++
++/* Control and Status register bits:
++ * SMICS_RXF : RX fifo full: 1 when RX fifo is full
++ * SMICS_TXE : TX fifo empty: 1 when empty.
++ * SMICS_RXD : RX fifo contains data: 1 when there is data.
++ * SMICS_TXD : TX fifo can accept data: 1 when true.
++ * SMICS_RXR : RX fifo needs reading: 1 when fifo more than 3/4 full, or
++ * when "DONE" and fifo not emptied.
++ * SMICS_TXW : TX fifo needs writing: 1 when less than 1/4 full.
++ * SMICS_AFERR : AXI FIFO error: 1 when fifo read when empty or written
++ * when full. Write 1 to clear.
++ * SMICS_EDREQ : 1 when external DREQ received.
++ * SMICS_PXLDAT : Pixel data: write 1 to enable pixel transfer modes.
++ * SMICS_SETERR : 1 if there was an error writing to setup regs (e.g.
++ * tx was in progress). Write 1 to clear.
++ * SMICS_PVMODE : Set to 1 to enable pixel valve mode.
++ * SMICS_INTR : Set to 1 to enable interrupt on RX.
++ * SMICS_INTT : Set to 1 to enable interrupt on TX.
++ * SMICS_INTD : Set to 1 to enable interrupt on DONE condition.
++ * SMICS_TEEN : Tear effect mode enabled: Programmed transfers will wait
++ * for a TE trigger before writing.
++ * SMICS_PAD1 : Padding settings for external transfers. For writes: the
++ * number of bytes initially written to the TX fifo that
++ * SMICS_PAD0 : should be ignored. For reads: the number of bytes that will
++ * be read before the data, and should be dropped.
++ * SMICS_WRITE : Transfer direction: 1 = write to external device, 0 = read
++ * SMICS_CLEAR : Write 1 to clear the FIFOs.
++ * SMICS_START : Write 1 to start the programmed transfer.
++ * SMICS_ACTIVE : Reads as 1 when a programmed transfer is underway.
++ * SMICS_DONE : Reads as 1 when transfer finished. For RX, not set until
++ * FIFO emptied.
++ * SMICS_ENABLE : Set to 1 to enable the SMI peripheral, 0 to disable.
++ */
++
++#define SMICS_RXF (1 << 31)
++#define SMICS_TXE (1 << 30)
++#define SMICS_RXD (1 << 29)
++#define SMICS_TXD (1 << 28)
++#define SMICS_RXR (1 << 27)
++#define SMICS_TXW (1 << 26)
++#define SMICS_AFERR (1 << 25)
++#define SMICS_EDREQ (1 << 15)
++#define SMICS_PXLDAT (1 << 14)
++#define SMICS_SETERR (1 << 13)
++#define SMICS_PVMODE (1 << 12)
++#define SMICS_INTR (1 << 11)
++#define SMICS_INTT (1 << 10)
++#define SMICS_INTD (1 << 9)
++#define SMICS_TEEN (1 << 8)
++#define SMICS_PAD1 (1 << 7)
++#define SMICS_PAD0 (1 << 6)
++#define SMICS_WRITE (1 << 5)
++#define SMICS_CLEAR (1 << 4)
++#define SMICS_START (1 << 3)
++#define SMICS_ACTIVE (1 << 2)
++#define SMICS_DONE (1 << 1)
++#define SMICS_ENABLE (1 << 0)
++
++/* Address register bits: */
++
++#define SMIA_DEVICE_MASK ((1 << 9) | (1 << 8))
++#define SMIA_DEVICE_OFFS (8)
++#define SMIA_ADDR_MASK (0x3f) /* bits 5 -> 0 */
++#define SMIA_ADDR_OFFS (0)
++
++/* DMA control register bits:
++ * SMIDC_DMAEN : DMA enable: set 1: DMA requests will be issued.
++ * SMIDC_DMAP : DMA passthrough: when set to 0, top two data pins are used by
++ * SMI as usual. When set to 1, the top two pins are used for
++ * external DREQs: pin 16 read request, 17 write.
++ * SMIDC_PANIC* : Threshold at which DMA will panic during read/write.
++ * SMIDC_REQ* : Threshold at which DMA will generate a DREQ.
++ */
++
++#define SMIDC_DMAEN (1 << 28)
++#define SMIDC_DMAP (1 << 24)
++#define SMIDC_PANICR_MASK (0x3f << 18)
++#define SMIDC_PANICR_OFFS (18)
++#define SMIDC_PANICW_MASK (0x3f << 12)
++#define SMIDC_PANICW_OFFS (12)
++#define SMIDC_REQR_MASK (0x3f << 6)
++#define SMIDC_REQR_OFFS (6)
++#define SMIDC_REQW_MASK (0x3f)
++#define SMIDC_REQW_OFFS (0)
++
++/* Device settings register bits: same for all 4 (or 3?) device register sets.
++ * Device read settings:
++ * SMIDSR_RWIDTH : Read transfer width. 00 = 8bit, 01 = 16bit,
++ * 10 = 18bit, 11 = 9bit.
++ * SMIDSR_RSETUP : Read setup time: number of core cycles between chip
++ * select/address and read strobe. Min 1, max 64.
++ * SMIDSR_MODE68 : 1 for System 68 mode (i.e. enable + direction pins,
++ * rather than OE + WE pin)
++ * SMIDSR_FSETUP : If set to 1, setup time only applies to first
++ * transfer after address change.
++ * SMIDSR_RHOLD : Number of core cycles between read strobe going
++ * inactive and CS/address going inactive. Min 1, max 64
++ * SMIDSR_RPACEALL : When set to 1, this device's RPACE value will always
++ * be used for the next transaction, even if it is not
++ * to this device.
++ * SMIDSR_RPACE : Number of core cycles spent waiting between CS
++ * deassert and start of next transfer. Min 1, max 128
++ * SMIDSR_RDREQ : 1 = use external DMA request on SD16 to pace reads
++ * from device. Must also set DMAP in SMICS.
++ * SMIDSR_RSTROBE : Number of cycles to assert the read strobe.
++ * min 1, max 128.
++ */
++#define SMIDSR_RWIDTH_MASK ((1<<31)|(1<<30))
++#define SMIDSR_RWIDTH_OFFS (30)
++#define SMIDSR_RSETUP_MASK (0x3f << 24)
++#define SMIDSR_RSETUP_OFFS (24)
++#define SMIDSR_MODE68 (1 << 23)
++#define SMIDSR_FSETUP (1 << 22)
++#define SMIDSR_RHOLD_MASK (0x3f << 16)
++#define SMIDSR_RHOLD_OFFS (16)
++#define SMIDSR_RPACEALL (1 << 15)
++#define SMIDSR_RPACE_MASK (0x7f << 8)
++#define SMIDSR_RPACE_OFFS (8)
++#define SMIDSR_RDREQ (1 << 7)
++#define SMIDSR_RSTROBE_MASK (0x7f)
++#define SMIDSR_RSTROBE_OFFS (0)
++
++/* Device write settings:
++ * SMIDSW_WWIDTH : Write transfer width. 00 = 8bit, 01 = 16bit,
++ * 10= 18bit, 11 = 9bit.
++ * SMIDSW_WSETUP : Number of cycles between CS assert and write strobe.
++ * Min 1, max 64.
++ * SMIDSW_WFORMAT : Pixel format of input. 0 = 16bit RGB 565,
++ * 1 = 32bit RGBA 8888
++ * SMIDSW_WSWAP : 1 = swap pixel data bits. (Use with SMICS_PXLDAT)
++ * SMIDSW_WHOLD : Time between WE deassert and CS deassert. 1 to 64
++ * SMIDSW_WPACEALL : 1: this device's WPACE will be used for the next
++ * transfer, regardless of that transfer's device.
++ * SMIDSW_WPACE : Cycles between CS deassert and next CS assert.
++ * Min 1, max 128
++ * SMIDSW_WDREQ : Use external DREQ on pin 17 to pace writes. DMAP must
++ * be set in SMICS.
++ * SMIDSW_WSTROBE : Number of cycles to assert the write strobe.
++ * Min 1, max 128
++ */
++#define SMIDSW_WWIDTH_MASK ((1<<31)|(1<<30))
++#define SMIDSW_WWIDTH_OFFS (30)
++#define SMIDSW_WSETUP_MASK (0x3f << 24)
++#define SMIDSW_WSETUP_OFFS (24)
++#define SMIDSW_WFORMAT (1 << 23)
++#define SMIDSW_WSWAP (1 << 22)
++#define SMIDSW_WHOLD_MASK (0x3f << 16)
++#define SMIDSW_WHOLD_OFFS (16)
++#define SMIDSW_WPACEALL (1 << 15)
++#define SMIDSW_WPACE_MASK (0x7f << 8)
++#define SMIDSW_WPACE_OFFS (8)
++#define SMIDSW_WDREQ (1 << 7)
++#define SMIDSW_WSTROBE_MASK (0x7f)
++#define SMIDSW_WSTROBE_OFFS (0)
++
++/* Direct transfer control + status register
++ * SMIDCS_WRITE : Direction of transfer: 1 -> write, 0 -> read
++ * SMIDCS_DONE : 1 when a transfer has finished. Write 1 to clear.
++ * SMIDCS_START : Write 1 to start a transfer, if one is not already underway.
++ * SMIDCE_ENABLE: Write 1 to enable SMI in direct mode.
++ */
++
++#define SMIDCS_WRITE (1 << 3)
++#define SMIDCS_DONE (1 << 2)
++#define SMIDCS_START (1 << 1)
++#define SMIDCS_ENABLE (1 << 0)
++
++/* Direct transfer address register
++ * SMIDA_DEVICE : Indicates which of the device settings banks should be used.
++ * SMIDA_ADDR : The value to be asserted on the address pins.
++ */
++
++#define SMIDA_DEVICE_MASK ((1<<9)|(1<<8))
++#define SMIDA_DEVICE_OFFS (8)
++#define SMIDA_ADDR_MASK (0x3f)
++#define SMIDA_ADDR_OFFS (0)
++
++/* FIFO debug register
++ * SMIFD_FLVL : The high-tide mark of FIFO count during the most recent txfer
++ * SMIFD_FCNT : The current FIFO count.
++ */
++#define SMIFD_FLVL_MASK (0x3f << 8)
++#define SMIFD_FLVL_OFFS (8)
++#define SMIFD_FCNT_MASK (0x3f)
++#define SMIFD_FCNT_OFFS (0)
++
++#endif /* BCM2835_SMI_IMPLEMENTATION */
++
++#endif /* BCM2835_SMI_H */
+diff -Nur linux-4.1.10/include/linux/broadcom/vc_cma.h linux-rpi/include/linux/broadcom/vc_cma.h
+--- linux-4.1.10/include/linux/broadcom/vc_cma.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/broadcom/vc_cma.h 2015-10-07 16:41:05.000000000 +0200
@@ -0,0 +1,29 @@
+/*****************************************************************************
+* Copyright 2012 Broadcom Corporation. All rights reserved.
@@ -299185,9 +302062,9 @@ diff -Nur linux-4.1.6/include/linux/broadcom/vc_cma.h linux-rpi/include/linux/br
+#endif
+
+#endif /* VC_CMA_H */
-diff -Nur linux-4.1.6/include/linux/broadcom/vc_mem.h linux-rpi/include/linux/broadcom/vc_mem.h
---- linux-4.1.6/include/linux/broadcom/vc_mem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/broadcom/vc_mem.h 2015-08-26 10:26:12.201363899 +0200
+diff -Nur linux-4.1.10/include/linux/broadcom/vc_mem.h linux-rpi/include/linux/broadcom/vc_mem.h
+--- linux-4.1.10/include/linux/broadcom/vc_mem.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/broadcom/vc_mem.h 2015-10-07 16:41:05.000000000 +0200
@@ -0,0 +1,35 @@
+/*****************************************************************************
+* Copyright 2010 - 2011 Broadcom Corporation. All rights reserved.
@@ -299224,9 +302101,9 @@ diff -Nur linux-4.1.6/include/linux/broadcom/vc_mem.h linux-rpi/include/linux/br
+#endif
+
+#endif /* _VC_MEM_H */
-diff -Nur linux-4.1.6/include/linux/leds.h linux-rpi/include/linux/leds.h
---- linux-4.1.6/include/linux/leds.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/include/linux/leds.h 2015-08-26 10:26:12.233364337 +0200
+diff -Nur linux-4.1.10/include/linux/leds.h linux-rpi/include/linux/leds.h
+--- linux-4.1.10/include/linux/leds.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/include/linux/leds.h 2015-10-07 16:41:06.000000000 +0200
@@ -47,6 +47,9 @@
#define SET_BRIGHTNESS_ASYNC (1 << 21)
#define SET_BRIGHTNESS_SYNC (1 << 22)
@@ -299237,9 +302114,9 @@ diff -Nur linux-4.1.6/include/linux/leds.h linux-rpi/include/linux/leds.h
/* Set LED brightness level */
/* Must not sleep, use a workqueue if needed */
-diff -Nur linux-4.1.6/include/linux/mfd/rpisense/core.h linux-rpi/include/linux/mfd/rpisense/core.h
---- linux-4.1.6/include/linux/mfd/rpisense/core.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/mfd/rpisense/core.h 2015-08-26 10:26:12.241364447 +0200
+diff -Nur linux-4.1.10/include/linux/mfd/rpisense/core.h linux-rpi/include/linux/mfd/rpisense/core.h
+--- linux-4.1.10/include/linux/mfd/rpisense/core.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/mfd/rpisense/core.h 2015-10-07 16:41:06.000000000 +0200
@@ -0,0 +1,47 @@
+/*
+ * Raspberry Pi Sense HAT core driver
@@ -299288,9 +302165,9 @@ diff -Nur linux-4.1.6/include/linux/mfd/rpisense/core.h linux-rpi/include/linux/
+int rpisense_block_write(struct rpisense *rpisense, const char *buf, int count);
+
+#endif
-diff -Nur linux-4.1.6/include/linux/mfd/rpisense/framebuffer.h linux-rpi/include/linux/mfd/rpisense/framebuffer.h
---- linux-4.1.6/include/linux/mfd/rpisense/framebuffer.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/mfd/rpisense/framebuffer.h 2015-08-26 10:26:12.241364447 +0200
+diff -Nur linux-4.1.10/include/linux/mfd/rpisense/framebuffer.h linux-rpi/include/linux/mfd/rpisense/framebuffer.h
+--- linux-4.1.10/include/linux/mfd/rpisense/framebuffer.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/mfd/rpisense/framebuffer.h 2015-10-07 16:41:06.000000000 +0200
@@ -0,0 +1,32 @@
+/*
+ * Raspberry Pi Sense HAT framebuffer driver
@@ -299324,9 +302201,9 @@ diff -Nur linux-4.1.6/include/linux/mfd/rpisense/framebuffer.h linux-rpi/include
+};
+
+#endif
-diff -Nur linux-4.1.6/include/linux/mfd/rpisense/joystick.h linux-rpi/include/linux/mfd/rpisense/joystick.h
---- linux-4.1.6/include/linux/mfd/rpisense/joystick.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/mfd/rpisense/joystick.h 2015-08-26 10:26:12.241364447 +0200
+diff -Nur linux-4.1.10/include/linux/mfd/rpisense/joystick.h linux-rpi/include/linux/mfd/rpisense/joystick.h
+--- linux-4.1.10/include/linux/mfd/rpisense/joystick.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/mfd/rpisense/joystick.h 2015-10-07 16:41:06.000000000 +0200
@@ -0,0 +1,35 @@
+/*
+ * Raspberry Pi Sense HAT joystick driver
@@ -299363,9 +302240,9 @@ diff -Nur linux-4.1.6/include/linux/mfd/rpisense/joystick.h linux-rpi/include/li
+
+
+#endif
-diff -Nur linux-4.1.6/include/linux/mmc/host.h linux-rpi/include/linux/mmc/host.h
---- linux-4.1.6/include/linux/mmc/host.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/include/linux/mmc/host.h 2015-08-26 10:26:12.249364556 +0200
+diff -Nur linux-4.1.10/include/linux/mmc/host.h linux-rpi/include/linux/mmc/host.h
+--- linux-4.1.10/include/linux/mmc/host.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/include/linux/mmc/host.h 2015-10-07 16:41:06.000000000 +0200
@@ -140,7 +140,9 @@
* I/O. Returns the number of supported blocks for the request.
*/
@@ -299385,9 +302262,9 @@ diff -Nur linux-4.1.6/include/linux/mmc/host.h linux-rpi/include/linux/mmc/host.
mmc_pm_flag_t pm_caps; /* supported pm features */
-diff -Nur linux-4.1.6/include/linux/platform_data/bcm2708.h linux-rpi/include/linux/platform_data/bcm2708.h
---- linux-4.1.6/include/linux/platform_data/bcm2708.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/platform_data/bcm2708.h 2015-08-26 10:26:12.265364775 +0200
+diff -Nur linux-4.1.10/include/linux/platform_data/bcm2708.h linux-rpi/include/linux/platform_data/bcm2708.h
+--- linux-4.1.10/include/linux/platform_data/bcm2708.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/platform_data/bcm2708.h 2015-10-07 16:41:06.000000000 +0200
@@ -0,0 +1,23 @@
+/*
+ * include/linux/platform_data/bcm2708.h
@@ -299412,9 +302289,9 @@ diff -Nur linux-4.1.6/include/linux/platform_data/bcm2708.h linux-rpi/include/li
+ bcm2708_gpio_pull_t value);
+
+#endif
-diff -Nur linux-4.1.6/include/linux/platform_data/dma-bcm2708.h linux-rpi/include/linux/platform_data/dma-bcm2708.h
---- linux-4.1.6/include/linux/platform_data/dma-bcm2708.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/linux/platform_data/dma-bcm2708.h 2015-08-26 10:26:12.265364775 +0200
+diff -Nur linux-4.1.10/include/linux/platform_data/dma-bcm2708.h linux-rpi/include/linux/platform_data/dma-bcm2708.h
+--- linux-4.1.10/include/linux/platform_data/dma-bcm2708.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/linux/platform_data/dma-bcm2708.h 2015-10-07 16:41:06.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2010 Broadcom
@@ -299543,9 +302420,9 @@ diff -Nur linux-4.1.6/include/linux/platform_data/dma-bcm2708.h linux-rpi/includ
+#endif /* CONFIG_DMA_BCM2708_LEGACY */
+
+#endif /* _PLAT_BCM2708_DMA_H */
-diff -Nur linux-4.1.6/include/linux/vmstat.h linux-rpi/include/linux/vmstat.h
---- linux-4.1.6/include/linux/vmstat.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/include/linux/vmstat.h 2015-08-26 10:26:12.301365268 +0200
+diff -Nur linux-4.1.10/include/linux/vmstat.h linux-rpi/include/linux/vmstat.h
+--- linux-4.1.10/include/linux/vmstat.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/include/linux/vmstat.h 2015-10-07 16:41:07.000000000 +0200
@@ -241,7 +241,11 @@
static inline void __dec_zone_state(struct zone *zone, enum zone_stat_item item)
{
@@ -299558,9 +302435,9 @@ diff -Nur linux-4.1.6/include/linux/vmstat.h linux-rpi/include/linux/vmstat.h
}
static inline void __inc_zone_page_state(struct page *page,
-diff -Nur linux-4.1.6/include/linux/w1-gpio.h linux-rpi/include/linux/w1-gpio.h
---- linux-4.1.6/include/linux/w1-gpio.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/include/linux/w1-gpio.h 2015-08-26 10:26:12.301365268 +0200
+diff -Nur linux-4.1.10/include/linux/w1-gpio.h linux-rpi/include/linux/w1-gpio.h
+--- linux-4.1.10/include/linux/w1-gpio.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/include/linux/w1-gpio.h 2015-10-07 16:41:07.000000000 +0200
@@ -18,6 +18,7 @@
struct w1_gpio_platform_data {
unsigned int pin;
@@ -299569,9 +302446,9 @@ diff -Nur linux-4.1.6/include/linux/w1-gpio.h linux-rpi/include/linux/w1-gpio.h
void (*enable_external_pullup)(int enable);
unsigned int ext_pullup_enable_pin;
unsigned int pullup_duration;
-diff -Nur linux-4.1.6/include/soc/bcm2835/raspberrypi-firmware.h linux-rpi/include/soc/bcm2835/raspberrypi-firmware.h
---- linux-4.1.6/include/soc/bcm2835/raspberrypi-firmware.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/include/soc/bcm2835/raspberrypi-firmware.h 2015-08-26 10:26:12.333365706 +0200
+diff -Nur linux-4.1.10/include/soc/bcm2835/raspberrypi-firmware.h linux-rpi/include/soc/bcm2835/raspberrypi-firmware.h
+--- linux-4.1.10/include/soc/bcm2835/raspberrypi-firmware.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/include/soc/bcm2835/raspberrypi-firmware.h 2015-10-07 16:41:08.000000000 +0200
@@ -0,0 +1,123 @@
+/*
+ * Copyright © 2015 Broadcom
@@ -299696,9 +302573,9 @@ diff -Nur linux-4.1.6/include/soc/bcm2835/raspberrypi-firmware.h linux-rpi/inclu
+int rpi_firmware_property_list(struct rpi_firmware *fw,
+ void *data, size_t tag_size);
+struct rpi_firmware *rpi_firmware_get(struct device_node *firmware_node);
-diff -Nur linux-4.1.6/include/uapi/linux/fb.h linux-rpi/include/uapi/linux/fb.h
---- linux-4.1.6/include/uapi/linux/fb.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/include/uapi/linux/fb.h 2015-08-26 10:26:12.985374634 +0200
+diff -Nur linux-4.1.10/include/uapi/linux/fb.h linux-rpi/include/uapi/linux/fb.h
+--- linux-4.1.10/include/uapi/linux/fb.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/include/uapi/linux/fb.h 2015-10-07 16:41:09.000000000 +0200
@@ -34,6 +34,11 @@
#define FBIOPUT_MODEINFO 0x4617
#define FBIOGET_DISPINFO 0x4618
@@ -299711,10 +302588,10 @@ diff -Nur linux-4.1.6/include/uapi/linux/fb.h linux-rpi/include/uapi/linux/fb.h
#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
#define FB_TYPE_PLANES 1 /* Non interleaved planes */
-diff -Nur linux-4.1.6/kernel/cgroup.c linux-rpi/kernel/cgroup.c
---- linux-4.1.6/kernel/cgroup.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/kernel/cgroup.c 2015-08-26 10:26:13.025375180 +0200
-@@ -5393,6 +5393,29 @@
+diff -Nur linux-4.1.10/kernel/cgroup.c linux-rpi/kernel/cgroup.c
+--- linux-4.1.10/kernel/cgroup.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/kernel/cgroup.c 2015-10-07 16:41:09.000000000 +0200
+@@ -5394,6 +5394,29 @@
}
__setup("cgroup_disable=", cgroup_disable);
@@ -299744,9 +302621,9 @@ diff -Nur linux-4.1.6/kernel/cgroup.c linux-rpi/kernel/cgroup.c
static int __init cgroup_set_legacy_files_on_dfl(char *str)
{
printk("cgroup: using legacy files on the default hierarchy\n");
-diff -Nur linux-4.1.6/mm/memcontrol.c linux-rpi/mm/memcontrol.c
---- linux-4.1.6/mm/memcontrol.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/mm/memcontrol.c 2015-08-26 10:26:13.085375999 +0200
+diff -Nur linux-4.1.10/mm/memcontrol.c linux-rpi/mm/memcontrol.c
+--- linux-4.1.10/mm/memcontrol.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/mm/memcontrol.c 2015-10-07 16:41:10.000000000 +0200
@@ -5388,6 +5388,7 @@
.dfl_cftypes = memory_files,
.legacy_cftypes = mem_cgroup_legacy_files,
@@ -299755,9 +302632,9 @@ diff -Nur linux-4.1.6/mm/memcontrol.c linux-rpi/mm/memcontrol.c
};
/**
-diff -Nur linux-4.1.6/scripts/dtc/checks.c linux-rpi/scripts/dtc/checks.c
---- linux-4.1.6/scripts/dtc/checks.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/checks.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/checks.c linux-rpi/scripts/dtc/checks.c
+--- linux-4.1.10/scripts/dtc/checks.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/checks.c 2015-10-07 16:41:12.000000000 +0200
@@ -53,7 +53,7 @@
void *data;
bool warn, error;
@@ -300010,9 +302887,9 @@ diff -Nur linux-4.1.6/scripts/dtc/checks.c linux-rpi/scripts/dtc/checks.c
{
struct node *dt = bi->dt;
int i;
-diff -Nur linux-4.1.6/scripts/dtc/data.c linux-rpi/scripts/dtc/data.c
---- linux-4.1.6/scripts/dtc/data.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/data.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/data.c linux-rpi/scripts/dtc/data.c
+--- linux-4.1.10/scripts/dtc/data.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/data.c 2015-10-07 16:41:12.000000000 +0200
@@ -74,7 +74,7 @@
struct data d;
char *q;
@@ -300048,9 +302925,235 @@ diff -Nur linux-4.1.6/scripts/dtc/data.c linux-rpi/scripts/dtc/data.c
- return 1;
+ return true;
}
-diff -Nur linux-4.1.6/scripts/dtc/dtc-lexer.l linux-rpi/scripts/dtc/dtc-lexer.l
---- linux-4.1.6/scripts/dtc/dtc-lexer.l 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc-lexer.l 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/dtc.c linux-rpi/scripts/dtc/dtc.c
+--- linux-4.1.10/scripts/dtc/dtc.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc.c 2015-10-07 16:41:12.000000000 +0200
+@@ -29,6 +29,7 @@
+ int minsize; /* Minimum blob size */
+ int padsize; /* Additional padding to blob */
+ int phandle_format = PHANDLE_BOTH; /* Use linux,phandle or phandle properties */
++int symbol_fixup_support = 0;
+
+ static void fill_fullpaths(struct node *tree, const char *prefix)
+ {
+@@ -48,8 +49,10 @@
+ }
+
+ /* Usage related data. */
++#define FDT_VERSION(version) _FDT_VERSION(version)
++#define _FDT_VERSION(version) #version
+ static const char usage_synopsis[] = "dtc [options] <input file>";
+-static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv";
++static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv@";
+ static struct option const usage_long_opts[] = {
+ {"quiet", no_argument, NULL, 'q'},
+ {"in-format", a_argument, NULL, 'I'},
+@@ -67,6 +70,7 @@
+ {"phandle", a_argument, NULL, 'H'},
+ {"warning", a_argument, NULL, 'W'},
+ {"error", a_argument, NULL, 'E'},
++ {"symbols", a_argument, NULL, '@'},
+ {"help", no_argument, NULL, 'h'},
+ {"version", no_argument, NULL, 'v'},
+ {NULL, no_argument, NULL, 0x0},
+@@ -82,9 +86,9 @@
+ "\t\tdts - device tree source text\n"
+ "\t\tdtb - device tree blob\n"
+ "\t\tasm - assembler source",
+- "\n\tBlob version to produce, defaults to %d (for dtb and asm output)", //, DEFAULT_FDT_VERSION);
++ "\n\tBlob version to produce, defaults to "FDT_VERSION(DEFAULT_FDT_VERSION)" (for dtb and asm output)",
+ "\n\tOutput dependency file",
+- "\n\ttMake space for <number> reserve map entries (for dtb and asm output)",
++ "\n\tMake space for <number> reserve map entries (for dtb and asm output)",
+ "\n\tMake the blob at least <bytes> long (extra space)",
+ "\n\tAdd padding to the blob of <bytes> long (extra space)",
+ "\n\tSet the physical boot cpu",
+@@ -97,6 +101,7 @@
+ "\t\tboth - Both \"linux,phandle\" and \"phandle\" properties",
+ "\n\tEnable/disable warnings (prefix with \"no-\")",
+ "\n\tEnable/disable errors (prefix with \"no-\")",
++ "\n\tSymbols and Fixups support",
+ "\n\tPrint this help and exit",
+ "\n\tPrint version and exit",
+ NULL,
+@@ -109,7 +114,7 @@
+ const char *outform = "dts";
+ const char *outname = "-";
+ const char *depname = NULL;
+- int force = 0, sort = 0;
++ bool force = false, sort = false;
+ const char *arg;
+ int opt;
+ FILE *outf = NULL;
+@@ -148,7 +153,7 @@
+ padsize = strtol(optarg, NULL, 0);
+ break;
+ case 'f':
+- force = 1;
++ force = true;
+ break;
+ case 'q':
+ quiet++;
+@@ -174,7 +179,7 @@
+ break;
+
+ case 's':
+- sort = 1;
++ sort = true;
+ break;
+
+ case 'W':
+@@ -184,7 +189,9 @@
+ case 'E':
+ parse_checks_option(false, true, optarg);
+ break;
+-
++ case '@':
++ symbol_fixup_support = 1;
++ break;
+ case 'h':
+ usage(NULL);
+ default:
+@@ -237,7 +244,7 @@
+ if (streq(outname, "-")) {
+ outf = stdout;
+ } else {
+- outf = fopen(outname, "w");
++ outf = fopen(outname, "wb");
+ if (! outf)
+ die("Couldn't open output file %s: %s\n",
+ outname, strerror(errno));
+diff -Nur linux-4.1.10/scripts/dtc/dtc.h linux-rpi/scripts/dtc/dtc.h
+--- linux-4.1.10/scripts/dtc/dtc.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc.h 2015-10-07 16:41:12.000000000 +0200
+@@ -38,9 +38,9 @@
+ #include "util.h"
+
+ #ifdef DEBUG
+-#define debug(fmt,args...) printf(fmt, ##args)
++#define debug(...) printf(__VA_ARGS__)
+ #else
+-#define debug(fmt,args...)
++#define debug(...)
+ #endif
+
+
+@@ -54,6 +54,7 @@
+ extern int minsize; /* Minimum blob size */
+ extern int padsize; /* Additional padding to blob */
+ extern int phandle_format; /* Use linux,phandle or phandle properties */
++extern int symbol_fixup_support;/* enable symbols & fixup support */
+
+ #define PHANDLE_LEGACY 0x1
+ #define PHANDLE_EPAPR 0x2
+@@ -88,7 +89,7 @@
+ };
+
+
+-#define empty_data ((struct data){ /* all .members = 0 or NULL */ })
++#define empty_data ((struct data){ 0 /* all .members = 0 or NULL */ })
+
+ #define for_each_marker(m) \
+ for (; (m); (m) = (m)->next)
+@@ -118,7 +119,7 @@
+
+ struct data data_add_marker(struct data d, enum markertype type, char *ref);
+
+-int data_is_one_string(struct data d);
++bool data_is_one_string(struct data d);
+
+ /* DT constraints */
+
+@@ -127,13 +128,32 @@
+
+ /* Live trees */
+ struct label {
+- int deleted;
++ bool deleted;
+ char *label;
+ struct label *next;
+ };
+
++struct fixup_entry {
++ int offset;
++ struct node *node;
++ struct property *prop;
++ struct fixup_entry *next;
++};
++
++struct fixup {
++ char *ref;
++ struct fixup_entry *entries;
++ struct fixup *next;
++};
++
++struct symbol {
++ struct label *label;
++ struct node *node;
++ struct symbol *next;
++};
++
+ struct property {
+- int deleted;
++ bool deleted;
+ char *name;
+ struct data val;
+
+@@ -143,7 +163,7 @@
+ };
+
+ struct node {
+- int deleted;
++ bool deleted;
+ char *name;
+ struct property *proplist;
+ struct node *children;
+@@ -158,6 +178,12 @@
+ int addr_cells, size_cells;
+
+ struct label *labels;
++
++ int is_root;
++ int is_plugin;
++ struct fixup *fixups;
++ struct symbol *symbols;
++ struct fixup_entry *local_fixups;
+ };
+
+ #define for_each_label_withdel(l0, l) \
+@@ -181,6 +207,18 @@
+ for_each_child_withdel(n, c) \
+ if (!(c)->deleted)
+
++#define for_each_fixup(n, f) \
++ for ((f) = (n)->fixups; (f); (f) = (f)->next)
++
++#define for_each_fixup_entry(f, fe) \
++ for ((fe) = (f)->entries; (fe); (fe) = (fe)->next)
++
++#define for_each_symbol(n, s) \
++ for ((s) = (n)->symbols; (s); (s) = (s)->next)
++
++#define for_each_local_fixup_entry(n, fe) \
++ for ((fe) = (n)->local_fixups; (fe); (fe) = (fe)->next)
++
+ void add_label(struct label **labels, char *label);
+ void delete_labels(struct label **labels);
+
+@@ -247,8 +285,8 @@
+
+ /* Checks */
+
+-void parse_checks_option(bool warn, bool error, const char *optarg);
+-void process_checks(int force, struct boot_info *bi);
++void parse_checks_option(bool warn, bool error, const char *arg);
++void process_checks(bool force, struct boot_info *bi);
+
+ /* Flattened trees */
+
+diff -Nur linux-4.1.10/scripts/dtc/dtc-lexer.l linux-rpi/scripts/dtc/dtc-lexer.l
+--- linux-4.1.10/scripts/dtc/dtc-lexer.l 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc-lexer.l 2015-10-07 16:41:12.000000000 +0200
@@ -20,7 +20,6 @@
%option noyywrap nounput noinput never-interactive
@@ -300188,9 +303291,9 @@ diff -Nur linux-4.1.6/scripts/dtc/dtc-lexer.l linux-rpi/scripts/dtc/dtc-lexer.l
+
+ treesource_error = true;
}
-diff -Nur linux-4.1.6/scripts/dtc/dtc-lexer.lex.c_shipped linux-rpi/scripts/dtc/dtc-lexer.lex.c_shipped
---- linux-4.1.6/scripts/dtc/dtc-lexer.lex.c_shipped 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc-lexer.lex.c_shipped 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/dtc-lexer.lex.c_shipped linux-rpi/scripts/dtc/dtc-lexer.lex.c_shipped
+--- linux-4.1.10/scripts/dtc/dtc-lexer.lex.c_shipped 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc-lexer.lex.c_shipped 2015-10-07 16:41:12.000000000 +0200
@@ -372,8 +372,8 @@
*yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp;
@@ -301045,9 +304148,9 @@ diff -Nur linux-4.1.6/scripts/dtc/dtc-lexer.lex.c_shipped linux-rpi/scripts/dtc/
+ treesource_error = true;
}
-diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.tab.c_shipped linux-rpi/scripts/dtc/dtc-parser.tab.c_shipped
---- linux-4.1.6/scripts/dtc/dtc-parser.tab.c_shipped 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc-parser.tab.c_shipped 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/dtc-parser.tab.c_shipped linux-rpi/scripts/dtc/dtc-parser.tab.c_shipped
+--- linux-4.1.10/scripts/dtc/dtc-parser.tab.c_shipped 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc-parser.tab.c_shipped 2015-10-07 16:41:12.000000000 +0200
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 3.0.2. */
@@ -303717,9 +306820,9 @@ diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.tab.c_shipped linux-rpi/scripts/dtc
- return c;
+ ERROR(&yylloc, "%s", s);
}
-diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.tab.h_shipped linux-rpi/scripts/dtc/dtc-parser.tab.h_shipped
---- linux-4.1.6/scripts/dtc/dtc-parser.tab.h_shipped 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc-parser.tab.h_shipped 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/dtc-parser.tab.h_shipped linux-rpi/scripts/dtc/dtc-parser.tab.h_shipped
+--- linux-4.1.10/scripts/dtc/dtc-parser.tab.h_shipped 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc-parser.tab.h_shipped 2015-10-07 16:41:12.000000000 +0200
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 3.0.2. */
@@ -303891,9 +306994,9 @@ diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.tab.h_shipped linux-rpi/scripts/dtc
-#endif /* ! YYPARSE_PARAM */
#endif /* !YY_YY_DTC_PARSER_TAB_H_INCLUDED */
-diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.y linux-rpi/scripts/dtc/dtc-parser.y
---- linux-4.1.6/scripts/dtc/dtc-parser.y 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc-parser.y 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/dtc-parser.y linux-rpi/scripts/dtc/dtc-parser.y
+--- linux-4.1.10/scripts/dtc/dtc-parser.y 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/dtc-parser.y 2015-10-07 16:41:12.000000000 +0200
@@ -17,31 +17,28 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
@@ -304168,235 +307271,9 @@ diff -Nur linux-4.1.6/scripts/dtc/dtc-parser.y linux-rpi/scripts/dtc/dtc-parser.
- return c;
+ ERROR(&yylloc, "%s", s);
}
-diff -Nur linux-4.1.6/scripts/dtc/dtc.c linux-rpi/scripts/dtc/dtc.c
---- linux-4.1.6/scripts/dtc/dtc.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc.c 2015-08-26 10:26:13.257378345 +0200
-@@ -29,6 +29,7 @@
- int minsize; /* Minimum blob size */
- int padsize; /* Additional padding to blob */
- int phandle_format = PHANDLE_BOTH; /* Use linux,phandle or phandle properties */
-+int symbol_fixup_support = 0;
-
- static void fill_fullpaths(struct node *tree, const char *prefix)
- {
-@@ -48,8 +49,10 @@
- }
-
- /* Usage related data. */
-+#define FDT_VERSION(version) _FDT_VERSION(version)
-+#define _FDT_VERSION(version) #version
- static const char usage_synopsis[] = "dtc [options] <input file>";
--static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv";
-+static const char usage_short_opts[] = "qI:O:o:V:d:R:S:p:fb:i:H:sW:E:hv@";
- static struct option const usage_long_opts[] = {
- {"quiet", no_argument, NULL, 'q'},
- {"in-format", a_argument, NULL, 'I'},
-@@ -67,6 +70,7 @@
- {"phandle", a_argument, NULL, 'H'},
- {"warning", a_argument, NULL, 'W'},
- {"error", a_argument, NULL, 'E'},
-+ {"symbols", a_argument, NULL, '@'},
- {"help", no_argument, NULL, 'h'},
- {"version", no_argument, NULL, 'v'},
- {NULL, no_argument, NULL, 0x0},
-@@ -82,9 +86,9 @@
- "\t\tdts - device tree source text\n"
- "\t\tdtb - device tree blob\n"
- "\t\tasm - assembler source",
-- "\n\tBlob version to produce, defaults to %d (for dtb and asm output)", //, DEFAULT_FDT_VERSION);
-+ "\n\tBlob version to produce, defaults to "FDT_VERSION(DEFAULT_FDT_VERSION)" (for dtb and asm output)",
- "\n\tOutput dependency file",
-- "\n\ttMake space for <number> reserve map entries (for dtb and asm output)",
-+ "\n\tMake space for <number> reserve map entries (for dtb and asm output)",
- "\n\tMake the blob at least <bytes> long (extra space)",
- "\n\tAdd padding to the blob of <bytes> long (extra space)",
- "\n\tSet the physical boot cpu",
-@@ -97,6 +101,7 @@
- "\t\tboth - Both \"linux,phandle\" and \"phandle\" properties",
- "\n\tEnable/disable warnings (prefix with \"no-\")",
- "\n\tEnable/disable errors (prefix with \"no-\")",
-+ "\n\tSymbols and Fixups support",
- "\n\tPrint this help and exit",
- "\n\tPrint version and exit",
- NULL,
-@@ -109,7 +114,7 @@
- const char *outform = "dts";
- const char *outname = "-";
- const char *depname = NULL;
-- int force = 0, sort = 0;
-+ bool force = false, sort = false;
- const char *arg;
- int opt;
- FILE *outf = NULL;
-@@ -148,7 +153,7 @@
- padsize = strtol(optarg, NULL, 0);
- break;
- case 'f':
-- force = 1;
-+ force = true;
- break;
- case 'q':
- quiet++;
-@@ -174,7 +179,7 @@
- break;
-
- case 's':
-- sort = 1;
-+ sort = true;
- break;
-
- case 'W':
-@@ -184,7 +189,9 @@
- case 'E':
- parse_checks_option(false, true, optarg);
- break;
--
-+ case '@':
-+ symbol_fixup_support = 1;
-+ break;
- case 'h':
- usage(NULL);
- default:
-@@ -237,7 +244,7 @@
- if (streq(outname, "-")) {
- outf = stdout;
- } else {
-- outf = fopen(outname, "w");
-+ outf = fopen(outname, "wb");
- if (! outf)
- die("Couldn't open output file %s: %s\n",
- outname, strerror(errno));
-diff -Nur linux-4.1.6/scripts/dtc/dtc.h linux-rpi/scripts/dtc/dtc.h
---- linux-4.1.6/scripts/dtc/dtc.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/dtc.h 2015-08-26 10:26:13.257378345 +0200
-@@ -38,9 +38,9 @@
- #include "util.h"
-
- #ifdef DEBUG
--#define debug(fmt,args...) printf(fmt, ##args)
-+#define debug(...) printf(__VA_ARGS__)
- #else
--#define debug(fmt,args...)
-+#define debug(...)
- #endif
-
-
-@@ -54,6 +54,7 @@
- extern int minsize; /* Minimum blob size */
- extern int padsize; /* Additional padding to blob */
- extern int phandle_format; /* Use linux,phandle or phandle properties */
-+extern int symbol_fixup_support;/* enable symbols & fixup support */
-
- #define PHANDLE_LEGACY 0x1
- #define PHANDLE_EPAPR 0x2
-@@ -88,7 +89,7 @@
- };
-
-
--#define empty_data ((struct data){ /* all .members = 0 or NULL */ })
-+#define empty_data ((struct data){ 0 /* all .members = 0 or NULL */ })
-
- #define for_each_marker(m) \
- for (; (m); (m) = (m)->next)
-@@ -118,7 +119,7 @@
-
- struct data data_add_marker(struct data d, enum markertype type, char *ref);
-
--int data_is_one_string(struct data d);
-+bool data_is_one_string(struct data d);
-
- /* DT constraints */
-
-@@ -127,13 +128,32 @@
-
- /* Live trees */
- struct label {
-- int deleted;
-+ bool deleted;
- char *label;
- struct label *next;
- };
-
-+struct fixup_entry {
-+ int offset;
-+ struct node *node;
-+ struct property *prop;
-+ struct fixup_entry *next;
-+};
-+
-+struct fixup {
-+ char *ref;
-+ struct fixup_entry *entries;
-+ struct fixup *next;
-+};
-+
-+struct symbol {
-+ struct label *label;
-+ struct node *node;
-+ struct symbol *next;
-+};
-+
- struct property {
-- int deleted;
-+ bool deleted;
- char *name;
- struct data val;
-
-@@ -143,7 +163,7 @@
- };
-
- struct node {
-- int deleted;
-+ bool deleted;
- char *name;
- struct property *proplist;
- struct node *children;
-@@ -158,6 +178,12 @@
- int addr_cells, size_cells;
-
- struct label *labels;
-+
-+ int is_root;
-+ int is_plugin;
-+ struct fixup *fixups;
-+ struct symbol *symbols;
-+ struct fixup_entry *local_fixups;
- };
-
- #define for_each_label_withdel(l0, l) \
-@@ -181,6 +207,18 @@
- for_each_child_withdel(n, c) \
- if (!(c)->deleted)
-
-+#define for_each_fixup(n, f) \
-+ for ((f) = (n)->fixups; (f); (f) = (f)->next)
-+
-+#define for_each_fixup_entry(f, fe) \
-+ for ((fe) = (f)->entries; (fe); (fe) = (fe)->next)
-+
-+#define for_each_symbol(n, s) \
-+ for ((s) = (n)->symbols; (s); (s) = (s)->next)
-+
-+#define for_each_local_fixup_entry(n, fe) \
-+ for ((fe) = (n)->local_fixups; (fe); (fe) = (fe)->next)
-+
- void add_label(struct label **labels, char *label);
- void delete_labels(struct label **labels);
-
-@@ -247,8 +285,8 @@
-
- /* Checks */
-
--void parse_checks_option(bool warn, bool error, const char *optarg);
--void process_checks(int force, struct boot_info *bi);
-+void parse_checks_option(bool warn, bool error, const char *arg);
-+void process_checks(bool force, struct boot_info *bi);
-
- /* Flattened trees */
-
-diff -Nur linux-4.1.6/scripts/dtc/flattree.c linux-rpi/scripts/dtc/flattree.c
---- linux-4.1.6/scripts/dtc/flattree.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/flattree.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/flattree.c linux-rpi/scripts/dtc/flattree.c
+--- linux-4.1.10/scripts/dtc/flattree.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/flattree.c 2015-10-07 16:41:12.000000000 +0200
@@ -261,7 +261,13 @@
{
struct property *prop;
@@ -304564,9 +307441,9 @@ diff -Nur linux-4.1.6/scripts/dtc/flattree.c linux-rpi/scripts/dtc/flattree.c
emit->endnode(etarget, tree->labels);
}
-diff -Nur linux-4.1.6/scripts/dtc/fstree.c linux-rpi/scripts/dtc/fstree.c
---- linux-4.1.6/scripts/dtc/fstree.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/fstree.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/fstree.c linux-rpi/scripts/dtc/fstree.c
+--- linux-4.1.10/scripts/dtc/fstree.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/fstree.c 2015-10-07 16:41:12.000000000 +0200
@@ -37,26 +37,26 @@
tree = build_node(NULL, NULL);
@@ -304615,9 +307492,9 @@ diff -Nur linux-4.1.6/scripts/dtc/fstree.c linux-rpi/scripts/dtc/fstree.c
}
closedir(d);
-diff -Nur linux-4.1.6/scripts/dtc/livetree.c linux-rpi/scripts/dtc/livetree.c
---- linux-4.1.6/scripts/dtc/livetree.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/livetree.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/livetree.c linux-rpi/scripts/dtc/livetree.c
+--- linux-4.1.10/scripts/dtc/livetree.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/livetree.c 2015-10-07 16:41:12.000000000 +0200
@@ -511,7 +511,9 @@
struct node *get_node_by_ref(struct node *tree, const char *ref)
@@ -304629,9 +307506,9 @@ diff -Nur linux-4.1.6/scripts/dtc/livetree.c linux-rpi/scripts/dtc/livetree.c
return get_node_by_path(tree, ref);
else
return get_node_by_label(tree, ref);
-diff -Nur linux-4.1.6/scripts/dtc/srcpos.c linux-rpi/scripts/dtc/srcpos.c
---- linux-4.1.6/scripts/dtc/srcpos.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/srcpos.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/srcpos.c linux-rpi/scripts/dtc/srcpos.c
+--- linux-4.1.10/scripts/dtc/srcpos.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/srcpos.c 2015-10-07 16:41:12.000000000 +0200
@@ -34,7 +34,7 @@
static struct search_path *search_path_head, **search_path_tail;
@@ -304732,9 +307609,9 @@ diff -Nur linux-4.1.6/scripts/dtc/srcpos.c linux-rpi/scripts/dtc/srcpos.c
va_end(va);
}
-diff -Nur linux-4.1.6/scripts/dtc/srcpos.h linux-rpi/scripts/dtc/srcpos.h
---- linux-4.1.6/scripts/dtc/srcpos.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/srcpos.h 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/srcpos.h linux-rpi/scripts/dtc/srcpos.h
+--- linux-4.1.10/scripts/dtc/srcpos.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/srcpos.h 2015-10-07 16:41:12.000000000 +0200
@@ -21,6 +21,7 @@
#define _SRCPOS_H_
@@ -304771,9 +307648,9 @@ diff -Nur linux-4.1.6/scripts/dtc/srcpos.h linux-rpi/scripts/dtc/srcpos.h
extern void srcpos_set_line(char *f, int l);
-diff -Nur linux-4.1.6/scripts/dtc/treesource.c linux-rpi/scripts/dtc/treesource.c
---- linux-4.1.6/scripts/dtc/treesource.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/treesource.c 2015-08-26 10:26:13.257378345 +0200
+diff -Nur linux-4.1.10/scripts/dtc/treesource.c linux-rpi/scripts/dtc/treesource.c
+--- linux-4.1.10/scripts/dtc/treesource.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/treesource.c 2015-10-07 16:41:12.000000000 +0200
@@ -26,12 +26,12 @@
extern YYLTYPE yylloc;
@@ -304828,9 +307705,9 @@ diff -Nur linux-4.1.6/scripts/dtc/treesource.c linux-rpi/scripts/dtc/treesource.
if ((const void *)bp >= propend)
break;
fprintf(f, " ");
-diff -Nur linux-4.1.6/scripts/dtc/util.c linux-rpi/scripts/dtc/util.c
---- linux-4.1.6/scripts/dtc/util.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/util.c 2015-08-26 10:26:13.261378400 +0200
+diff -Nur linux-4.1.10/scripts/dtc/util.c linux-rpi/scripts/dtc/util.c
+--- linux-4.1.10/scripts/dtc/util.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/util.c 2015-10-07 16:41:12.000000000 +0200
@@ -39,11 +39,11 @@
char *xstrdup(const char *s)
{
@@ -304887,9 +307764,9 @@ diff -Nur linux-4.1.6/scripts/dtc/util.c linux-rpi/scripts/dtc/util.c
printf(">");
} else {
printf(" = [");
-diff -Nur linux-4.1.6/scripts/dtc/util.h linux-rpi/scripts/dtc/util.h
---- linux-4.1.6/scripts/dtc/util.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/util.h 2015-08-26 10:26:13.261378400 +0200
+diff -Nur linux-4.1.10/scripts/dtc/util.h linux-rpi/scripts/dtc/util.h
+--- linux-4.1.10/scripts/dtc/util.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/util.h 2015-10-07 16:41:12.000000000 +0200
@@ -2,6 +2,7 @@
#define _UTIL_H
@@ -304915,15 +307792,15 @@ diff -Nur linux-4.1.6/scripts/dtc/util.h linux-rpi/scripts/dtc/util.h
/*
* Parse an escaped character starting at index i in string s. The resulting
-diff -Nur linux-4.1.6/scripts/dtc/version_gen.h linux-rpi/scripts/dtc/version_gen.h
---- linux-4.1.6/scripts/dtc/version_gen.h 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/scripts/dtc/version_gen.h 2015-08-26 10:26:13.261378400 +0200
+diff -Nur linux-4.1.10/scripts/dtc/version_gen.h linux-rpi/scripts/dtc/version_gen.h
+--- linux-4.1.10/scripts/dtc/version_gen.h 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/scripts/dtc/version_gen.h 2015-10-07 16:41:12.000000000 +0200
@@ -1 +1 @@
-#define DTC_VERSION "DTC 1.4.0-dirty"
+#define DTC_VERSION "DTC 1.4.1-g36c70742"
-diff -Nur linux-4.1.6/scripts/knlinfo linux-rpi/scripts/knlinfo
---- linux-4.1.6/scripts/knlinfo 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/scripts/knlinfo 2015-08-26 10:26:13.265378454 +0200
+diff -Nur linux-4.1.10/scripts/knlinfo linux-rpi/scripts/knlinfo
+--- linux-4.1.10/scripts/knlinfo 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/scripts/knlinfo 2015-10-07 16:41:12.000000000 +0200
@@ -0,0 +1,168 @@
+#!/usr/bin/env perl
+# ----------------------------------------------------------------------
@@ -305093,9 +307970,9 @@ diff -Nur linux-4.1.6/scripts/knlinfo linux-rpi/scripts/knlinfo
+ my ($data) = @_;
+ return unpack('H*', $data);
+}
-diff -Nur linux-4.1.6/scripts/mkknlimg linux-rpi/scripts/mkknlimg
---- linux-4.1.6/scripts/mkknlimg 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/scripts/mkknlimg 2015-08-26 10:26:13.265378454 +0200
+diff -Nur linux-4.1.10/scripts/mkknlimg linux-rpi/scripts/mkknlimg
+--- linux-4.1.10/scripts/mkknlimg 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/scripts/mkknlimg 2015-10-07 16:41:13.000000000 +0200
@@ -0,0 +1,275 @@
+#!/usr/bin/env perl
+# ----------------------------------------------------------------------
@@ -305372,38 +308249,524 @@ diff -Nur linux-4.1.6/scripts/mkknlimg linux-rpi/scripts/mkknlimg
+ my $val = $configs->{$wanted} || 'n';
+ return (($val eq 'y') || ($val eq '1'));
+}
-diff -Nur linux-4.1.6/sound/arm/Kconfig linux-rpi/sound/arm/Kconfig
---- linux-4.1.6/sound/arm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/arm/Kconfig 2015-08-26 10:26:13.285378727 +0200
-@@ -39,5 +39,13 @@
- Say Y or M if you want to support any AC97 codec attached to
- the PXA2xx AC97 interface.
-
-+config SND_BCM2835
-+ tristate "BCM2835 ALSA driver"
-+ depends on (ARCH_BCM2708 || ARCH_BCM2709 || ARCH_BCM2835) \
-+ && BCM2708_VCHIQ && SND
-+ select SND_PCM
-+ help
-+ Say Y or M if you want to support BCM2835 Alsa pcm card driver
+diff -Nur linux-4.1.10/sound/arm/bcm2835.c linux-rpi/sound/arm/bcm2835.c
+--- linux-4.1.10/sound/arm/bcm2835.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/bcm2835.c 2015-10-07 16:41:13.000000000 +0200
+@@ -0,0 +1,511 @@
++/*****************************************************************************
++* Copyright 2011 Broadcom Corporation. All rights reserved.
++*
++* Unless you and Broadcom execute a separate written software license
++* agreement governing use of this software, this software is licensed to you
++* under the terms of the GNU General Public License version 2, available at
++* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
++*
++* Notwithstanding the above, under no circumstances may you combine this
++* software in any way with any other Broadcom software provided under a
++* license other than the GPL, without Broadcom's express prior written
++* consent.
++*****************************************************************************/
+
- endif # SND_ARM
-
-diff -Nur linux-4.1.6/sound/arm/Makefile linux-rpi/sound/arm/Makefile
---- linux-4.1.6/sound/arm/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/arm/Makefile 2015-08-26 10:26:13.285378727 +0200
-@@ -14,3 +14,8 @@
-
- obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
- snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
++#include <linux/platform_device.h>
+
-+obj-$(CONFIG_SND_BCM2835) += snd-bcm2835.o
-+snd-bcm2835-objs := bcm2835.o bcm2835-ctl.o bcm2835-pcm.o bcm2835-vchiq.o
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/of.h>
+
-+ccflags-y += -Idrivers/misc/vc04_services -Idrivers/misc/vc04_services/interface/vcos/linuxkernel -D__VCCOREVER__=0x04000000
-diff -Nur linux-4.1.6/sound/arm/bcm2835-ctl.c linux-rpi/sound/arm/bcm2835-ctl.c
---- linux-4.1.6/sound/arm/bcm2835-ctl.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/bcm2835-ctl.c 2015-08-26 10:26:13.285378727 +0200
++#include "bcm2835.h"
++
++/* module parameters (see "Module Parameters") */
++/* SNDRV_CARDS: maximum number of cards supported by this module */
++static int index[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = -1 };
++static char *id[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = NULL };
++static int enable[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = 1 };
++
++/* HACKY global pointers needed for successive probes to work : ssp
++ * But compared against the changes we will have to do in VC audio_ipc code
++ * to export 8 audio_ipc devices as a single IPC device and then monitor all
++ * four devices in a thread, this gets things done quickly and should be easier
++ * to debug if we run into issues
++ */
++
++static struct snd_card *g_card = NULL;
++static bcm2835_chip_t *g_chip = NULL;
++
++static int snd_bcm2835_free(bcm2835_chip_t * chip)
++{
++ kfree(chip);
++ return 0;
++}
++
++/* component-destructor
++ * (see "Management of Cards and Components")
++ */
++static int snd_bcm2835_dev_free(struct snd_device *device)
++{
++ return snd_bcm2835_free(device->device_data);
++}
++
++/* chip-specific constructor
++ * (see "Management of Cards and Components")
++ */
++static int snd_bcm2835_create(struct snd_card *card,
++ struct platform_device *pdev,
++ bcm2835_chip_t ** rchip)
++{
++ bcm2835_chip_t *chip;
++ int err;
++ static struct snd_device_ops ops = {
++ .dev_free = snd_bcm2835_dev_free,
++ };
++
++ *rchip = NULL;
++
++ chip = kzalloc(sizeof(*chip), GFP_KERNEL);
++ if (chip == NULL)
++ return -ENOMEM;
++
++ chip->card = card;
++
++ err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
++ if (err < 0) {
++ snd_bcm2835_free(chip);
++ return err;
++ }
++
++ *rchip = chip;
++ return 0;
++}
++
++static int snd_bcm2835_alsa_probe_dt(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ bcm2835_chip_t *chip;
++ struct snd_card *card;
++ u32 numchans;
++ int err, i;
++
++ err = of_property_read_u32(dev->of_node, "brcm,pwm-channels",
++ &numchans);
++ if (err) {
++ dev_err(dev, "Failed to get DT property 'brcm,pwm-channels'");
++ return err;
++ }
++
++ if (numchans == 0 || numchans > MAX_SUBSTREAMS) {
++ numchans = MAX_SUBSTREAMS;
++ dev_warn(dev, "Illegal 'brcm,pwm-channels' value, will use %u\n",
++ numchans);
++ }
++
++ err = snd_card_new(NULL, -1, NULL, THIS_MODULE, 0, &card);
++ if (err) {
++ dev_err(dev, "Failed to create soundcard structure\n");
++ return err;
++ }
++
++ snd_card_set_dev(card, dev);
++ strcpy(card->driver, "bcm2835");
++ strcpy(card->shortname, "bcm2835 ALSA");
++ sprintf(card->longname, "%s", card->shortname);
++
++ err = snd_bcm2835_create(card, pdev, &chip);
++ if (err < 0) {
++ dev_err(dev, "Failed to create bcm2835 chip\n");
++ goto err_free;
++ }
++
++ err = snd_bcm2835_new_pcm(chip);
++ if (err < 0) {
++ dev_err(dev, "Failed to create new bcm2835 pcm device\n");
++ goto err_free;
++ }
++
++ err = snd_bcm2835_new_spdif_pcm(chip);
++ if (err < 0) {
++ dev_err(dev, "Failed to create new bcm2835 spdif pcm device\n");
++ goto err_free;
++ }
++
++ err = snd_bcm2835_new_ctl(chip);
++ if (err < 0) {
++ dev_err(dev, "Failed to create new bcm2835 ctl\n");
++ goto err_free;
++ }
++
++ for (i = 0; i < numchans; i++) {
++ chip->avail_substreams |= (1 << i);
++ chip->pdev[i] = pdev;
++ }
++
++ err = snd_card_register(card);
++ if (err) {
++ dev_err(dev, "Failed to register bcm2835 ALSA card \n");
++ goto err_free;
++ }
++
++ g_card = card;
++ g_chip = chip;
++ platform_set_drvdata(pdev, card);
++ audio_info("bcm2835 ALSA card created with %u channels\n", numchans);
++
++ return 0;
++
++err_free:
++ snd_card_free(card);
++
++ return err;
++}
++
++static int snd_bcm2835_alsa_probe(struct platform_device *pdev)
++{
++ static int dev;
++ bcm2835_chip_t *chip;
++ struct snd_card *card;
++ int err;
++
++ if (pdev->dev.of_node)
++ return snd_bcm2835_alsa_probe_dt(pdev);
++
++ if (dev >= MAX_SUBSTREAMS)
++ return -ENODEV;
++
++ if (!enable[dev]) {
++ dev++;
++ return -ENOENT;
++ }
++
++ if (dev > 0)
++ goto add_register_map;
++
++ err = snd_card_new(NULL, index[dev], id[dev], THIS_MODULE, 0, &g_card);
++ if (err < 0)
++ goto out;
++
++ snd_card_set_dev(g_card, &pdev->dev);
++ strcpy(g_card->driver, "bcm2835");
++ strcpy(g_card->shortname, "bcm2835 ALSA");
++ sprintf(g_card->longname, "%s", g_card->shortname);
++
++ err = snd_bcm2835_create(g_card, pdev, &chip);
++ if (err < 0) {
++ dev_err(&pdev->dev, "Failed to create bcm2835 chip\n");
++ goto out_bcm2835_create;
++ }
++
++ g_chip = chip;
++ err = snd_bcm2835_new_pcm(chip);
++ if (err < 0) {
++ dev_err(&pdev->dev, "Failed to create new BCM2835 pcm device\n");
++ goto out_bcm2835_new_pcm;
++ }
++
++ err = snd_bcm2835_new_spdif_pcm(chip);
++ if (err < 0) {
++ dev_err(&pdev->dev, "Failed to create new BCM2835 spdif pcm device\n");
++ goto out_bcm2835_new_spdif;
++ }
++
++ err = snd_bcm2835_new_ctl(chip);
++ if (err < 0) {
++ dev_err(&pdev->dev, "Failed to create new BCM2835 ctl\n");
++ goto out_bcm2835_new_ctl;
++ }
++
++add_register_map:
++ card = g_card;
++ chip = g_chip;
++
++ BUG_ON(!(card && chip));
++
++ chip->avail_substreams |= (1 << dev);
++ chip->pdev[dev] = pdev;
++
++ if (dev == 0) {
++ err = snd_card_register(card);
++ if (err < 0) {
++ dev_err(&pdev->dev,
++ "Failed to register bcm2835 ALSA card \n");
++ goto out_card_register;
++ }
++ platform_set_drvdata(pdev, card);
++ audio_info("bcm2835 ALSA card created!\n");
++ } else {
++ audio_info("bcm2835 ALSA chip created!\n");
++ platform_set_drvdata(pdev, (void *)dev);
++ }
++
++ dev++;
++
++ return 0;
++
++out_card_register:
++out_bcm2835_new_ctl:
++out_bcm2835_new_spdif:
++out_bcm2835_new_pcm:
++out_bcm2835_create:
++ BUG_ON(!g_card);
++ if (snd_card_free(g_card))
++ dev_err(&pdev->dev, "Failed to free Registered alsa card\n");
++ g_card = NULL;
++out:
++ dev = SNDRV_CARDS; /* stop more avail_substreams from being probed */
++ dev_err(&pdev->dev, "BCM2835 ALSA Probe failed !!\n");
++ return err;
++}
++
++static int snd_bcm2835_alsa_remove(struct platform_device *pdev)
++{
++ uint32_t idx;
++ void *drv_data;
++
++ drv_data = platform_get_drvdata(pdev);
++
++ if (drv_data == (void *)g_card) {
++ /* This is the card device */
++ snd_card_free((struct snd_card *)drv_data);
++ g_card = NULL;
++ g_chip = NULL;
++ } else {
++ idx = (uint32_t) drv_data;
++ if (g_card != NULL) {
++ BUG_ON(!g_chip);
++ /* We pass chip device numbers in audio ipc devices
++ * other than the one we registered our card with
++ */
++ idx = (uint32_t) drv_data;
++ BUG_ON(!idx || idx > MAX_SUBSTREAMS);
++ g_chip->avail_substreams &= ~(1 << idx);
++ /* There should be atleast one substream registered
++ * after we are done here, as it wil be removed when
++ * the *remove* is called for the card device
++ */
++ BUG_ON(!g_chip->avail_substreams);
++ }
++ }
++
++ platform_set_drvdata(pdev, NULL);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int snd_bcm2835_alsa_suspend(struct platform_device *pdev,
++ pm_message_t state)
++{
++ return 0;
++}
++
++static int snd_bcm2835_alsa_resume(struct platform_device *pdev)
++{
++ return 0;
++}
++
++#endif
++
++static const struct of_device_id snd_bcm2835_of_match_table[] = {
++ { .compatible = "brcm,bcm2835-audio", },
++ {},
++};
++MODULE_DEVICE_TABLE(of, snd_bcm2835_of_match_table);
++
++static struct platform_driver bcm2835_alsa0_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD0",
++ .owner = THIS_MODULE,
++ .of_match_table = snd_bcm2835_of_match_table,
++ },
++};
++
++static struct platform_driver bcm2835_alsa1_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD1",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa2_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD2",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa3_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD3",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa4_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD4",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa5_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD5",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa6_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD6",
++ .owner = THIS_MODULE,
++ },
++};
++
++static struct platform_driver bcm2835_alsa7_driver = {
++ .probe = snd_bcm2835_alsa_probe,
++ .remove = snd_bcm2835_alsa_remove,
++#ifdef CONFIG_PM
++ .suspend = snd_bcm2835_alsa_suspend,
++ .resume = snd_bcm2835_alsa_resume,
++#endif
++ .driver = {
++ .name = "bcm2835_AUD7",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int bcm2835_alsa_device_init(void)
++{
++ int err;
++ err = platform_driver_register(&bcm2835_alsa0_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto out;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa1_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_0;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa2_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_1;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa3_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_2;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa4_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_3;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa5_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_4;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa6_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_5;
++ }
++
++ err = platform_driver_register(&bcm2835_alsa7_driver);
++ if (err) {
++ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
++ goto unregister_6;
++ }
++
++ return 0;
++
++unregister_6:
++ platform_driver_unregister(&bcm2835_alsa6_driver);
++unregister_5:
++ platform_driver_unregister(&bcm2835_alsa5_driver);
++unregister_4:
++ platform_driver_unregister(&bcm2835_alsa4_driver);
++unregister_3:
++ platform_driver_unregister(&bcm2835_alsa3_driver);
++unregister_2:
++ platform_driver_unregister(&bcm2835_alsa2_driver);
++unregister_1:
++ platform_driver_unregister(&bcm2835_alsa1_driver);
++unregister_0:
++ platform_driver_unregister(&bcm2835_alsa0_driver);
++out:
++ return err;
++}
++
++static void bcm2835_alsa_device_exit(void)
++{
++ platform_driver_unregister(&bcm2835_alsa0_driver);
++ platform_driver_unregister(&bcm2835_alsa1_driver);
++ platform_driver_unregister(&bcm2835_alsa2_driver);
++ platform_driver_unregister(&bcm2835_alsa3_driver);
++ platform_driver_unregister(&bcm2835_alsa4_driver);
++ platform_driver_unregister(&bcm2835_alsa5_driver);
++ platform_driver_unregister(&bcm2835_alsa6_driver);
++ platform_driver_unregister(&bcm2835_alsa7_driver);
++}
++
++late_initcall(bcm2835_alsa_device_init);
++module_exit(bcm2835_alsa_device_exit);
++
++MODULE_AUTHOR("Dom Cobley");
++MODULE_DESCRIPTION("Alsa driver for BCM2835 chip");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("platform:bcm2835_alsa");
+diff -Nur linux-4.1.10/sound/arm/bcm2835-ctl.c linux-rpi/sound/arm/bcm2835-ctl.c
+--- linux-4.1.10/sound/arm/bcm2835-ctl.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/bcm2835-ctl.c 2015-10-07 16:41:13.000000000 +0200
@@ -0,0 +1,323 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -305728,9 +309091,180 @@ diff -Nur linux-4.1.6/sound/arm/bcm2835-ctl.c linux-rpi/sound/arm/bcm2835-ctl.c
+ }
+ return 0;
+}
-diff -Nur linux-4.1.6/sound/arm/bcm2835-pcm.c linux-rpi/sound/arm/bcm2835-pcm.c
---- linux-4.1.6/sound/arm/bcm2835-pcm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/bcm2835-pcm.c 2015-08-26 10:26:13.285378727 +0200
+diff -Nur linux-4.1.10/sound/arm/bcm2835.h linux-rpi/sound/arm/bcm2835.h
+--- linux-4.1.10/sound/arm/bcm2835.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/bcm2835.h 2015-10-07 16:41:13.000000000 +0200
+@@ -0,0 +1,167 @@
++/*****************************************************************************
++* Copyright 2011 Broadcom Corporation. All rights reserved.
++*
++* Unless you and Broadcom execute a separate written software license
++* agreement governing use of this software, this software is licensed to you
++* under the terms of the GNU General Public License version 2, available at
++* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
++*
++* Notwithstanding the above, under no circumstances may you combine this
++* software in any way with any other Broadcom software provided under a
++* license other than the GPL, without Broadcom's express prior written
++* consent.
++*****************************************************************************/
++
++#ifndef __SOUND_ARM_BCM2835_H
++#define __SOUND_ARM_BCM2835_H
++
++#include <linux/device.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/wait.h>
++#include <sound/core.h>
++#include <sound/initval.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/pcm-indirect.h>
++#include <linux/workqueue.h>
++
++/*
++#define AUDIO_DEBUG_ENABLE
++#define AUDIO_VERBOSE_DEBUG_ENABLE
++*/
++
++/* Debug macros */
++
++#ifdef AUDIO_DEBUG_ENABLE
++#ifdef AUDIO_VERBOSE_DEBUG_ENABLE
++
++#define audio_debug(fmt, arg...) \
++ printk(KERN_INFO"%s:%d " fmt, __func__, __LINE__, ##arg)
++
++#define audio_info(fmt, arg...) \
++ printk(KERN_INFO"%s:%d " fmt, __func__, __LINE__, ##arg)
++
++#else
++
++#define audio_debug(fmt, arg...)
++
++#define audio_info(fmt, arg...)
++
++#endif /* AUDIO_VERBOSE_DEBUG_ENABLE */
++
++#else
++
++#define audio_debug(fmt, arg...)
++
++#define audio_info(fmt, arg...)
++
++#endif /* AUDIO_DEBUG_ENABLE */
++
++#define audio_error(fmt, arg...) \
++ printk(KERN_ERR"%s:%d " fmt, __func__, __LINE__, ##arg)
++
++#define audio_warning(fmt, arg...) \
++ printk(KERN_WARNING"%s:%d " fmt, __func__, __LINE__, ##arg)
++
++#define audio_alert(fmt, arg...) \
++ printk(KERN_ALERT"%s:%d " fmt, __func__, __LINE__, ##arg)
++
++#define MAX_SUBSTREAMS (8)
++#define AVAIL_SUBSTREAMS_MASK (0xff)
++enum {
++ CTRL_VOL_MUTE,
++ CTRL_VOL_UNMUTE
++};
++
++/* macros for alsa2chip and chip2alsa, instead of functions */
++
++#define alsa2chip(vol) (uint)(-((vol << 8) / 100)) /* convert alsa to chip volume (defined as macro rather than function call) */
++#define chip2alsa(vol) -((vol * 100) >> 8) /* convert chip to alsa volume */
++
++/* Some constants for values .. */
++typedef enum {
++ AUDIO_DEST_AUTO = 0,
++ AUDIO_DEST_HEADPHONES = 1,
++ AUDIO_DEST_HDMI = 2,
++ AUDIO_DEST_MAX,
++} SND_BCM2835_ROUTE_T;
++
++typedef enum {
++ PCM_PLAYBACK_VOLUME,
++ PCM_PLAYBACK_MUTE,
++ PCM_PLAYBACK_DEVICE,
++} SND_BCM2835_CTRL_T;
++
++/* definition of the chip-specific record */
++typedef struct bcm2835_chip {
++ struct snd_card *card;
++ struct snd_pcm *pcm;
++ struct snd_pcm *pcm_spdif;
++ /* Bitmat for valid reg_base and irq numbers */
++ uint32_t avail_substreams;
++ struct platform_device *pdev[MAX_SUBSTREAMS];
++ struct bcm2835_alsa_stream *alsa_stream[MAX_SUBSTREAMS];
++
++ int volume;
++ int old_volume; /* stores the volume value whist muted */
++ int dest;
++ int mute;
++
++ unsigned int opened;
++ unsigned int spdif_status;
++ struct mutex audio_mutex;
++} bcm2835_chip_t;
++
++typedef struct bcm2835_alsa_stream {
++ bcm2835_chip_t *chip;
++ struct snd_pcm_substream *substream;
++ struct snd_pcm_indirect pcm_indirect;
++
++ struct semaphore buffers_update_sem;
++ struct semaphore control_sem;
++ spinlock_t lock;
++ volatile uint32_t control;
++ volatile uint32_t status;
++
++ int open;
++ int running;
++ int draining;
++
++ int channels;
++ int params_rate;
++ int pcm_format_width;
++
++ unsigned int pos;
++ unsigned int buffer_size;
++ unsigned int period_size;
++
++ uint32_t enable_fifo_irq;
++ irq_handler_t fifo_irq_handler;
++
++ atomic_t retrieved;
++ struct opaque_AUDIO_INSTANCE_T *instance;
++ struct workqueue_struct *my_wq;
++ int idx;
++} bcm2835_alsa_stream_t;
++
++int snd_bcm2835_new_ctl(bcm2835_chip_t * chip);
++int snd_bcm2835_new_pcm(bcm2835_chip_t * chip);
++int snd_bcm2835_new_spdif_pcm(bcm2835_chip_t * chip);
++
++int bcm2835_audio_open(bcm2835_alsa_stream_t * alsa_stream);
++int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream);
++int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,
++ uint32_t channels, uint32_t samplerate,
++ uint32_t bps);
++int bcm2835_audio_setup(bcm2835_alsa_stream_t * alsa_stream);
++int bcm2835_audio_start(bcm2835_alsa_stream_t * alsa_stream);
++int bcm2835_audio_stop(bcm2835_alsa_stream_t * alsa_stream);
++int bcm2835_audio_set_ctls(bcm2835_chip_t * chip);
++int bcm2835_audio_write(bcm2835_alsa_stream_t * alsa_stream, uint32_t count,
++ void *src);
++uint32_t bcm2835_audio_retrieve_buffers(bcm2835_alsa_stream_t * alsa_stream);
++void bcm2835_audio_flush_buffers(bcm2835_alsa_stream_t * alsa_stream);
++void bcm2835_audio_flush_playback_buffers(bcm2835_alsa_stream_t * alsa_stream);
++
++#endif /* __SOUND_ARM_BCM2835_H */
+diff -Nur linux-4.1.10/sound/arm/bcm2835-pcm.c linux-rpi/sound/arm/bcm2835-pcm.c
+--- linux-4.1.10/sound/arm/bcm2835-pcm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/bcm2835-pcm.c 2015-10-07 16:41:13.000000000 +0200
@@ -0,0 +1,557 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -306289,9 +309823,9 @@ diff -Nur linux-4.1.6/sound/arm/bcm2835-pcm.c linux-rpi/sound/arm/bcm2835-pcm.c
+
+ return 0;
+}
-diff -Nur linux-4.1.6/sound/arm/bcm2835-vchiq.c linux-rpi/sound/arm/bcm2835-vchiq.c
---- linux-4.1.6/sound/arm/bcm2835-vchiq.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/bcm2835-vchiq.c 2015-08-26 10:26:13.285378727 +0200
+diff -Nur linux-4.1.10/sound/arm/bcm2835-vchiq.c linux-rpi/sound/arm/bcm2835-vchiq.c
+--- linux-4.1.10/sound/arm/bcm2835-vchiq.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/bcm2835-vchiq.c 2015-10-07 16:41:13.000000000 +0200
@@ -0,0 +1,902 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -307195,695 +310729,38 @@ diff -Nur linux-4.1.6/sound/arm/bcm2835-vchiq.c linux-rpi/sound/arm/bcm2835-vchi
+
+module_param(force_bulk, bool, 0444);
+MODULE_PARM_DESC(force_bulk, "Force use of vchiq bulk for audio");
-diff -Nur linux-4.1.6/sound/arm/bcm2835.c linux-rpi/sound/arm/bcm2835.c
---- linux-4.1.6/sound/arm/bcm2835.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/bcm2835.c 2015-08-26 10:26:13.285378727 +0200
-@@ -0,0 +1,511 @@
-+/*****************************************************************************
-+* Copyright 2011 Broadcom Corporation. All rights reserved.
-+*
-+* Unless you and Broadcom execute a separate written software license
-+* agreement governing use of this software, this software is licensed to you
-+* under the terms of the GNU General Public License version 2, available at
-+* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
-+*
-+* Notwithstanding the above, under no circumstances may you combine this
-+* software in any way with any other Broadcom software provided under a
-+* license other than the GPL, without Broadcom's express prior written
-+* consent.
-+*****************************************************************************/
-+
-+#include <linux/platform_device.h>
-+
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+#include <linux/of.h>
-+
-+#include "bcm2835.h"
-+
-+/* module parameters (see "Module Parameters") */
-+/* SNDRV_CARDS: maximum number of cards supported by this module */
-+static int index[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = -1 };
-+static char *id[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = NULL };
-+static int enable[MAX_SUBSTREAMS] = {[0 ... (MAX_SUBSTREAMS - 1)] = 1 };
-+
-+/* HACKY global pointers needed for successive probes to work : ssp
-+ * But compared against the changes we will have to do in VC audio_ipc code
-+ * to export 8 audio_ipc devices as a single IPC device and then monitor all
-+ * four devices in a thread, this gets things done quickly and should be easier
-+ * to debug if we run into issues
-+ */
-+
-+static struct snd_card *g_card = NULL;
-+static bcm2835_chip_t *g_chip = NULL;
-+
-+static int snd_bcm2835_free(bcm2835_chip_t * chip)
-+{
-+ kfree(chip);
-+ return 0;
-+}
-+
-+/* component-destructor
-+ * (see "Management of Cards and Components")
-+ */
-+static int snd_bcm2835_dev_free(struct snd_device *device)
-+{
-+ return snd_bcm2835_free(device->device_data);
-+}
-+
-+/* chip-specific constructor
-+ * (see "Management of Cards and Components")
-+ */
-+static int snd_bcm2835_create(struct snd_card *card,
-+ struct platform_device *pdev,
-+ bcm2835_chip_t ** rchip)
-+{
-+ bcm2835_chip_t *chip;
-+ int err;
-+ static struct snd_device_ops ops = {
-+ .dev_free = snd_bcm2835_dev_free,
-+ };
-+
-+ *rchip = NULL;
-+
-+ chip = kzalloc(sizeof(*chip), GFP_KERNEL);
-+ if (chip == NULL)
-+ return -ENOMEM;
-+
-+ chip->card = card;
-+
-+ err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
-+ if (err < 0) {
-+ snd_bcm2835_free(chip);
-+ return err;
-+ }
-+
-+ *rchip = chip;
-+ return 0;
-+}
-+
-+static int snd_bcm2835_alsa_probe_dt(struct platform_device *pdev)
-+{
-+ struct device *dev = &pdev->dev;
-+ bcm2835_chip_t *chip;
-+ struct snd_card *card;
-+ u32 numchans;
-+ int err, i;
-+
-+ err = of_property_read_u32(dev->of_node, "brcm,pwm-channels",
-+ &numchans);
-+ if (err) {
-+ dev_err(dev, "Failed to get DT property 'brcm,pwm-channels'");
-+ return err;
-+ }
-+
-+ if (numchans == 0 || numchans > MAX_SUBSTREAMS) {
-+ numchans = MAX_SUBSTREAMS;
-+ dev_warn(dev, "Illegal 'brcm,pwm-channels' value, will use %u\n",
-+ numchans);
-+ }
-+
-+ err = snd_card_new(NULL, -1, NULL, THIS_MODULE, 0, &card);
-+ if (err) {
-+ dev_err(dev, "Failed to create soundcard structure\n");
-+ return err;
-+ }
-+
-+ snd_card_set_dev(card, dev);
-+ strcpy(card->driver, "bcm2835");
-+ strcpy(card->shortname, "bcm2835 ALSA");
-+ sprintf(card->longname, "%s", card->shortname);
-+
-+ err = snd_bcm2835_create(card, pdev, &chip);
-+ if (err < 0) {
-+ dev_err(dev, "Failed to create bcm2835 chip\n");
-+ goto err_free;
-+ }
-+
-+ err = snd_bcm2835_new_pcm(chip);
-+ if (err < 0) {
-+ dev_err(dev, "Failed to create new bcm2835 pcm device\n");
-+ goto err_free;
-+ }
-+
-+ err = snd_bcm2835_new_spdif_pcm(chip);
-+ if (err < 0) {
-+ dev_err(dev, "Failed to create new bcm2835 spdif pcm device\n");
-+ goto err_free;
-+ }
-+
-+ err = snd_bcm2835_new_ctl(chip);
-+ if (err < 0) {
-+ dev_err(dev, "Failed to create new bcm2835 ctl\n");
-+ goto err_free;
-+ }
-+
-+ for (i = 0; i < numchans; i++) {
-+ chip->avail_substreams |= (1 << i);
-+ chip->pdev[i] = pdev;
-+ }
-+
-+ err = snd_card_register(card);
-+ if (err) {
-+ dev_err(dev, "Failed to register bcm2835 ALSA card \n");
-+ goto err_free;
-+ }
-+
-+ g_card = card;
-+ g_chip = chip;
-+ platform_set_drvdata(pdev, card);
-+ audio_info("bcm2835 ALSA card created with %u channels\n", numchans);
-+
-+ return 0;
-+
-+err_free:
-+ snd_card_free(card);
-+
-+ return err;
-+}
-+
-+static int snd_bcm2835_alsa_probe(struct platform_device *pdev)
-+{
-+ static int dev;
-+ bcm2835_chip_t *chip;
-+ struct snd_card *card;
-+ int err;
-+
-+ if (pdev->dev.of_node)
-+ return snd_bcm2835_alsa_probe_dt(pdev);
-+
-+ if (dev >= MAX_SUBSTREAMS)
-+ return -ENODEV;
-+
-+ if (!enable[dev]) {
-+ dev++;
-+ return -ENOENT;
-+ }
-+
-+ if (dev > 0)
-+ goto add_register_map;
-+
-+ err = snd_card_new(NULL, index[dev], id[dev], THIS_MODULE, 0, &g_card);
-+ if (err < 0)
-+ goto out;
-+
-+ snd_card_set_dev(g_card, &pdev->dev);
-+ strcpy(g_card->driver, "bcm2835");
-+ strcpy(g_card->shortname, "bcm2835 ALSA");
-+ sprintf(g_card->longname, "%s", g_card->shortname);
-+
-+ err = snd_bcm2835_create(g_card, pdev, &chip);
-+ if (err < 0) {
-+ dev_err(&pdev->dev, "Failed to create bcm2835 chip\n");
-+ goto out_bcm2835_create;
-+ }
-+
-+ g_chip = chip;
-+ err = snd_bcm2835_new_pcm(chip);
-+ if (err < 0) {
-+ dev_err(&pdev->dev, "Failed to create new BCM2835 pcm device\n");
-+ goto out_bcm2835_new_pcm;
-+ }
-+
-+ err = snd_bcm2835_new_spdif_pcm(chip);
-+ if (err < 0) {
-+ dev_err(&pdev->dev, "Failed to create new BCM2835 spdif pcm device\n");
-+ goto out_bcm2835_new_spdif;
-+ }
-+
-+ err = snd_bcm2835_new_ctl(chip);
-+ if (err < 0) {
-+ dev_err(&pdev->dev, "Failed to create new BCM2835 ctl\n");
-+ goto out_bcm2835_new_ctl;
-+ }
-+
-+add_register_map:
-+ card = g_card;
-+ chip = g_chip;
-+
-+ BUG_ON(!(card && chip));
-+
-+ chip->avail_substreams |= (1 << dev);
-+ chip->pdev[dev] = pdev;
-+
-+ if (dev == 0) {
-+ err = snd_card_register(card);
-+ if (err < 0) {
-+ dev_err(&pdev->dev,
-+ "Failed to register bcm2835 ALSA card \n");
-+ goto out_card_register;
-+ }
-+ platform_set_drvdata(pdev, card);
-+ audio_info("bcm2835 ALSA card created!\n");
-+ } else {
-+ audio_info("bcm2835 ALSA chip created!\n");
-+ platform_set_drvdata(pdev, (void *)dev);
-+ }
-+
-+ dev++;
-+
-+ return 0;
-+
-+out_card_register:
-+out_bcm2835_new_ctl:
-+out_bcm2835_new_spdif:
-+out_bcm2835_new_pcm:
-+out_bcm2835_create:
-+ BUG_ON(!g_card);
-+ if (snd_card_free(g_card))
-+ dev_err(&pdev->dev, "Failed to free Registered alsa card\n");
-+ g_card = NULL;
-+out:
-+ dev = SNDRV_CARDS; /* stop more avail_substreams from being probed */
-+ dev_err(&pdev->dev, "BCM2835 ALSA Probe failed !!\n");
-+ return err;
-+}
-+
-+static int snd_bcm2835_alsa_remove(struct platform_device *pdev)
-+{
-+ uint32_t idx;
-+ void *drv_data;
-+
-+ drv_data = platform_get_drvdata(pdev);
-+
-+ if (drv_data == (void *)g_card) {
-+ /* This is the card device */
-+ snd_card_free((struct snd_card *)drv_data);
-+ g_card = NULL;
-+ g_chip = NULL;
-+ } else {
-+ idx = (uint32_t) drv_data;
-+ if (g_card != NULL) {
-+ BUG_ON(!g_chip);
-+ /* We pass chip device numbers in audio ipc devices
-+ * other than the one we registered our card with
-+ */
-+ idx = (uint32_t) drv_data;
-+ BUG_ON(!idx || idx > MAX_SUBSTREAMS);
-+ g_chip->avail_substreams &= ~(1 << idx);
-+ /* There should be atleast one substream registered
-+ * after we are done here, as it wil be removed when
-+ * the *remove* is called for the card device
-+ */
-+ BUG_ON(!g_chip->avail_substreams);
-+ }
-+ }
-+
-+ platform_set_drvdata(pdev, NULL);
-+
-+ return 0;
-+}
-+
-+#ifdef CONFIG_PM
-+static int snd_bcm2835_alsa_suspend(struct platform_device *pdev,
-+ pm_message_t state)
-+{
-+ return 0;
-+}
-+
-+static int snd_bcm2835_alsa_resume(struct platform_device *pdev)
-+{
-+ return 0;
-+}
-+
-+#endif
-+
-+static const struct of_device_id snd_bcm2835_of_match_table[] = {
-+ { .compatible = "brcm,bcm2835-audio", },
-+ {},
-+};
-+MODULE_DEVICE_TABLE(of, snd_bcm2835_of_match_table);
-+
-+static struct platform_driver bcm2835_alsa0_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD0",
-+ .owner = THIS_MODULE,
-+ .of_match_table = snd_bcm2835_of_match_table,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa1_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD1",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa2_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD2",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa3_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD3",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa4_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD4",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa5_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD5",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa6_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD6",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static struct platform_driver bcm2835_alsa7_driver = {
-+ .probe = snd_bcm2835_alsa_probe,
-+ .remove = snd_bcm2835_alsa_remove,
-+#ifdef CONFIG_PM
-+ .suspend = snd_bcm2835_alsa_suspend,
-+ .resume = snd_bcm2835_alsa_resume,
-+#endif
-+ .driver = {
-+ .name = "bcm2835_AUD7",
-+ .owner = THIS_MODULE,
-+ },
-+};
-+
-+static int bcm2835_alsa_device_init(void)
-+{
-+ int err;
-+ err = platform_driver_register(&bcm2835_alsa0_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto out;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa1_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_0;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa2_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_1;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa3_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_2;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa4_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_3;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa5_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_4;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa6_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_5;
-+ }
-+
-+ err = platform_driver_register(&bcm2835_alsa7_driver);
-+ if (err) {
-+ pr_err("Error registering bcm2835_alsa0_driver %d .\n", err);
-+ goto unregister_6;
-+ }
-+
-+ return 0;
-+
-+unregister_6:
-+ platform_driver_unregister(&bcm2835_alsa6_driver);
-+unregister_5:
-+ platform_driver_unregister(&bcm2835_alsa5_driver);
-+unregister_4:
-+ platform_driver_unregister(&bcm2835_alsa4_driver);
-+unregister_3:
-+ platform_driver_unregister(&bcm2835_alsa3_driver);
-+unregister_2:
-+ platform_driver_unregister(&bcm2835_alsa2_driver);
-+unregister_1:
-+ platform_driver_unregister(&bcm2835_alsa1_driver);
-+unregister_0:
-+ platform_driver_unregister(&bcm2835_alsa0_driver);
-+out:
-+ return err;
-+}
-+
-+static void bcm2835_alsa_device_exit(void)
-+{
-+ platform_driver_unregister(&bcm2835_alsa0_driver);
-+ platform_driver_unregister(&bcm2835_alsa1_driver);
-+ platform_driver_unregister(&bcm2835_alsa2_driver);
-+ platform_driver_unregister(&bcm2835_alsa3_driver);
-+ platform_driver_unregister(&bcm2835_alsa4_driver);
-+ platform_driver_unregister(&bcm2835_alsa5_driver);
-+ platform_driver_unregister(&bcm2835_alsa6_driver);
-+ platform_driver_unregister(&bcm2835_alsa7_driver);
-+}
-+
-+late_initcall(bcm2835_alsa_device_init);
-+module_exit(bcm2835_alsa_device_exit);
-+
-+MODULE_AUTHOR("Dom Cobley");
-+MODULE_DESCRIPTION("Alsa driver for BCM2835 chip");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("platform:bcm2835_alsa");
-diff -Nur linux-4.1.6/sound/arm/bcm2835.h linux-rpi/sound/arm/bcm2835.h
---- linux-4.1.6/sound/arm/bcm2835.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/bcm2835.h 2015-08-26 10:26:13.285378727 +0200
-@@ -0,0 +1,167 @@
-+/*****************************************************************************
-+* Copyright 2011 Broadcom Corporation. All rights reserved.
-+*
-+* Unless you and Broadcom execute a separate written software license
-+* agreement governing use of this software, this software is licensed to you
-+* under the terms of the GNU General Public License version 2, available at
-+* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
-+*
-+* Notwithstanding the above, under no circumstances may you combine this
-+* software in any way with any other Broadcom software provided under a
-+* license other than the GPL, without Broadcom's express prior written
-+* consent.
-+*****************************************************************************/
-+
-+#ifndef __SOUND_ARM_BCM2835_H
-+#define __SOUND_ARM_BCM2835_H
-+
-+#include <linux/device.h>
-+#include <linux/list.h>
-+#include <linux/interrupt.h>
-+#include <linux/wait.h>
-+#include <sound/core.h>
-+#include <sound/initval.h>
-+#include <sound/pcm.h>
-+#include <sound/pcm_params.h>
-+#include <sound/pcm-indirect.h>
-+#include <linux/workqueue.h>
-+
-+/*
-+#define AUDIO_DEBUG_ENABLE
-+#define AUDIO_VERBOSE_DEBUG_ENABLE
-+*/
-+
-+/* Debug macros */
-+
-+#ifdef AUDIO_DEBUG_ENABLE
-+#ifdef AUDIO_VERBOSE_DEBUG_ENABLE
-+
-+#define audio_debug(fmt, arg...) \
-+ printk(KERN_INFO"%s:%d " fmt, __func__, __LINE__, ##arg)
-+
-+#define audio_info(fmt, arg...) \
-+ printk(KERN_INFO"%s:%d " fmt, __func__, __LINE__, ##arg)
-+
-+#else
-+
-+#define audio_debug(fmt, arg...)
-+
-+#define audio_info(fmt, arg...)
-+
-+#endif /* AUDIO_VERBOSE_DEBUG_ENABLE */
-+
-+#else
-+
-+#define audio_debug(fmt, arg...)
-+
-+#define audio_info(fmt, arg...)
-+
-+#endif /* AUDIO_DEBUG_ENABLE */
-+
-+#define audio_error(fmt, arg...) \
-+ printk(KERN_ERR"%s:%d " fmt, __func__, __LINE__, ##arg)
-+
-+#define audio_warning(fmt, arg...) \
-+ printk(KERN_WARNING"%s:%d " fmt, __func__, __LINE__, ##arg)
-+
-+#define audio_alert(fmt, arg...) \
-+ printk(KERN_ALERT"%s:%d " fmt, __func__, __LINE__, ##arg)
-+
-+#define MAX_SUBSTREAMS (8)
-+#define AVAIL_SUBSTREAMS_MASK (0xff)
-+enum {
-+ CTRL_VOL_MUTE,
-+ CTRL_VOL_UNMUTE
-+};
-+
-+/* macros for alsa2chip and chip2alsa, instead of functions */
-+
-+#define alsa2chip(vol) (uint)(-((vol << 8) / 100)) /* convert alsa to chip volume (defined as macro rather than function call) */
-+#define chip2alsa(vol) -((vol * 100) >> 8) /* convert chip to alsa volume */
-+
-+/* Some constants for values .. */
-+typedef enum {
-+ AUDIO_DEST_AUTO = 0,
-+ AUDIO_DEST_HEADPHONES = 1,
-+ AUDIO_DEST_HDMI = 2,
-+ AUDIO_DEST_MAX,
-+} SND_BCM2835_ROUTE_T;
-+
-+typedef enum {
-+ PCM_PLAYBACK_VOLUME,
-+ PCM_PLAYBACK_MUTE,
-+ PCM_PLAYBACK_DEVICE,
-+} SND_BCM2835_CTRL_T;
-+
-+/* definition of the chip-specific record */
-+typedef struct bcm2835_chip {
-+ struct snd_card *card;
-+ struct snd_pcm *pcm;
-+ struct snd_pcm *pcm_spdif;
-+ /* Bitmat for valid reg_base and irq numbers */
-+ uint32_t avail_substreams;
-+ struct platform_device *pdev[MAX_SUBSTREAMS];
-+ struct bcm2835_alsa_stream *alsa_stream[MAX_SUBSTREAMS];
-+
-+ int volume;
-+ int old_volume; /* stores the volume value whist muted */
-+ int dest;
-+ int mute;
-+
-+ unsigned int opened;
-+ unsigned int spdif_status;
-+ struct mutex audio_mutex;
-+} bcm2835_chip_t;
-+
-+typedef struct bcm2835_alsa_stream {
-+ bcm2835_chip_t *chip;
-+ struct snd_pcm_substream *substream;
-+ struct snd_pcm_indirect pcm_indirect;
-+
-+ struct semaphore buffers_update_sem;
-+ struct semaphore control_sem;
-+ spinlock_t lock;
-+ volatile uint32_t control;
-+ volatile uint32_t status;
-+
-+ int open;
-+ int running;
-+ int draining;
-+
-+ int channels;
-+ int params_rate;
-+ int pcm_format_width;
-+
-+ unsigned int pos;
-+ unsigned int buffer_size;
-+ unsigned int period_size;
-+
-+ uint32_t enable_fifo_irq;
-+ irq_handler_t fifo_irq_handler;
-+
-+ atomic_t retrieved;
-+ struct opaque_AUDIO_INSTANCE_T *instance;
-+ struct workqueue_struct *my_wq;
-+ int idx;
-+} bcm2835_alsa_stream_t;
+diff -Nur linux-4.1.10/sound/arm/Kconfig linux-rpi/sound/arm/Kconfig
+--- linux-4.1.10/sound/arm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/arm/Kconfig 2015-10-07 16:41:13.000000000 +0200
+@@ -39,5 +39,13 @@
+ Say Y or M if you want to support any AC97 codec attached to
+ the PXA2xx AC97 interface.
+
++config SND_BCM2835
++ tristate "BCM2835 ALSA driver"
++ depends on (ARCH_BCM2708 || ARCH_BCM2709 || ARCH_BCM2835) \
++ && BCM2708_VCHIQ && SND
++ select SND_PCM
++ help
++ Say Y or M if you want to support BCM2835 Alsa pcm card driver
+
-+int snd_bcm2835_new_ctl(bcm2835_chip_t * chip);
-+int snd_bcm2835_new_pcm(bcm2835_chip_t * chip);
-+int snd_bcm2835_new_spdif_pcm(bcm2835_chip_t * chip);
+ endif # SND_ARM
+
+diff -Nur linux-4.1.10/sound/arm/Makefile linux-rpi/sound/arm/Makefile
+--- linux-4.1.10/sound/arm/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/arm/Makefile 2015-10-07 16:41:13.000000000 +0200
+@@ -14,3 +14,8 @@
+
+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
+ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
+
-+int bcm2835_audio_open(bcm2835_alsa_stream_t * alsa_stream);
-+int bcm2835_audio_close(bcm2835_alsa_stream_t * alsa_stream);
-+int bcm2835_audio_set_params(bcm2835_alsa_stream_t * alsa_stream,
-+ uint32_t channels, uint32_t samplerate,
-+ uint32_t bps);
-+int bcm2835_audio_setup(bcm2835_alsa_stream_t * alsa_stream);
-+int bcm2835_audio_start(bcm2835_alsa_stream_t * alsa_stream);
-+int bcm2835_audio_stop(bcm2835_alsa_stream_t * alsa_stream);
-+int bcm2835_audio_set_ctls(bcm2835_chip_t * chip);
-+int bcm2835_audio_write(bcm2835_alsa_stream_t * alsa_stream, uint32_t count,
-+ void *src);
-+uint32_t bcm2835_audio_retrieve_buffers(bcm2835_alsa_stream_t * alsa_stream);
-+void bcm2835_audio_flush_buffers(bcm2835_alsa_stream_t * alsa_stream);
-+void bcm2835_audio_flush_playback_buffers(bcm2835_alsa_stream_t * alsa_stream);
++obj-$(CONFIG_SND_BCM2835) += snd-bcm2835.o
++snd-bcm2835-objs := bcm2835.o bcm2835-ctl.o bcm2835-pcm.o bcm2835-vchiq.o
+
-+#endif /* __SOUND_ARM_BCM2835_H */
-diff -Nur linux-4.1.6/sound/arm/vc_vchi_audioserv_defs.h linux-rpi/sound/arm/vc_vchi_audioserv_defs.h
---- linux-4.1.6/sound/arm/vc_vchi_audioserv_defs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/arm/vc_vchi_audioserv_defs.h 2015-08-26 10:26:13.285378727 +0200
++ccflags-y += -Idrivers/misc/vc04_services -Idrivers/misc/vc04_services/interface/vcos/linuxkernel -D__VCCOREVER__=0x04000000
+diff -Nur linux-4.1.10/sound/arm/vc_vchi_audioserv_defs.h linux-rpi/sound/arm/vc_vchi_audioserv_defs.h
+--- linux-4.1.10/sound/arm/vc_vchi_audioserv_defs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/arm/vc_vchi_audioserv_defs.h 2015-10-07 16:41:13.000000000 +0200
@@ -0,0 +1,116 @@
+/*****************************************************************************
+* Copyright 2011 Broadcom Corporation. All rights reserved.
@@ -308001,104 +310878,9 @@ diff -Nur linux-4.1.6/sound/arm/vc_vchi_audioserv_defs.h linux-rpi/sound/arm/vc_
+} VC_AUDIO_MSG_T;
+
+#endif // _VC_AUDIO_DEFS_H_
-diff -Nur linux-4.1.6/sound/soc/bcm/Kconfig linux-rpi/sound/soc/bcm/Kconfig
---- linux-4.1.6/sound/soc/bcm/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/bcm/Kconfig 2015-08-26 10:26:13.365379818 +0200
-@@ -7,3 +7,63 @@
- Say Y or M if you want to add support for codecs attached to
- the BCM2835 I2S interface. You will also need
- to select the audio interfaces to support below.
-+
-+config SND_BCM2708_SOC_I2S
-+ tristate "SoC Audio support for the Broadcom BCM2708 I2S module"
-+ depends on MACH_BCM2708 || MACH_BCM2709
-+ select REGMAP_MMIO
-+ select SND_SOC_DMAENGINE_PCM
-+ select SND_SOC_GENERIC_DMAENGINE_PCM
-+ help
-+ Say Y or M if you want to add support for codecs attached to
-+ the BCM2708 I2S interface. You will also need
-+ to select the audio interfaces to support below.
-+
-+config SND_BCM2708_SOC_HIFIBERRY_DAC
-+ tristate "Support for HifiBerry DAC"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_PCM5102A
-+ help
-+ Say Y or M if you want to add support for HifiBerry DAC.
-+
-+config SND_BCM2708_SOC_HIFIBERRY_DACPLUS
-+ tristate "Support for HifiBerry DAC+"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_PCM512x
-+ help
-+ Say Y or M if you want to add support for HifiBerry DAC+.
-+
-+config SND_BCM2708_SOC_HIFIBERRY_DIGI
-+ tristate "Support for HifiBerry Digi"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_WM8804
-+ help
-+ Say Y or M if you want to add support for HifiBerry Digi S/PDIF output board.
-+
-+config SND_BCM2708_SOC_HIFIBERRY_AMP
-+ tristate "Support for the HifiBerry Amp"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_TAS5713
-+ help
-+ Say Y or M if you want to add support for the HifiBerry Amp amplifier board.
-+
-+config SND_BCM2708_SOC_RPI_DAC
-+ tristate "Support for RPi-DAC"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_PCM1794A
-+ help
-+ Say Y or M if you want to add support for RPi-DAC.
-+
-+config SND_BCM2708_SOC_RPI_PROTO
-+ tristate "Support for Rpi-PROTO"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_WM8731
-+ help
-+ Say Y or M if you want to add support for Audio Codec Board PROTO (WM8731).
-+
-+config SND_BCM2708_SOC_IQAUDIO_DAC
-+ tristate "Support for IQaudIO-DAC"
-+ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
-+ select SND_SOC_PCM512x_I2C
-+ help
-+ Say Y or M if you want to add support for IQaudIO-DAC.
-diff -Nur linux-4.1.6/sound/soc/bcm/Makefile linux-rpi/sound/soc/bcm/Makefile
---- linux-4.1.6/sound/soc/bcm/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/bcm/Makefile 2015-08-26 10:26:13.365379818 +0200
-@@ -3,3 +3,24 @@
-
- obj-$(CONFIG_SND_BCM2835_SOC_I2S) += snd-soc-bcm2835-i2s.o
-
-+# BCM2708 Platform Support
-+snd-soc-bcm2708-i2s-objs := bcm2708-i2s.o
-+
-+obj-$(CONFIG_SND_BCM2708_SOC_I2S) += snd-soc-bcm2708-i2s.o
-+
-+# BCM2708 Machine Support
-+snd-soc-hifiberry-dac-objs := hifiberry_dac.o
-+snd-soc-hifiberry-dacplus-objs := hifiberry_dacplus.o
-+snd-soc-hifiberry-digi-objs := hifiberry_digi.o
-+snd-soc-hifiberry-amp-objs := hifiberry_amp.o
-+snd-soc-rpi-dac-objs := rpi-dac.o
-+snd-soc-rpi-proto-objs := rpi-proto.o
-+snd-soc-iqaudio-dac-objs := iqaudio-dac.o
-+
-+obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) += snd-soc-hifiberry-dac.o
-+obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += snd-soc-hifiberry-dacplus.o
-+obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI) += snd-soc-hifiberry-digi.o
-+obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP) += snd-soc-hifiberry-amp.o
-+obj-$(CONFIG_SND_BCM2708_SOC_RPI_DAC) += snd-soc-rpi-dac.o
-+obj-$(CONFIG_SND_BCM2708_SOC_RPI_PROTO) += snd-soc-rpi-proto.o
-+obj-$(CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC) += snd-soc-iqaudio-dac.o
-diff -Nur linux-4.1.6/sound/soc/bcm/bcm2708-i2s.c linux-rpi/sound/soc/bcm/bcm2708-i2s.c
---- linux-4.1.6/sound/soc/bcm/bcm2708-i2s.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/bcm2708-i2s.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/bcm2708-i2s.c linux-rpi/sound/soc/bcm/bcm2708-i2s.c
+--- linux-4.1.10/sound/soc/bcm/bcm2708-i2s.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/bcm2708-i2s.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,1014 @@
+/*
+ * ALSA SoC I2S Audio Layer for Broadcom BCM2708 SoC
@@ -309114,9 +311896,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/bcm2708-i2s.c linux-rpi/sound/soc/bcm/bcm270
+MODULE_DESCRIPTION("BCM2708 I2S interface");
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/bcm2708-i2s.h linux-rpi/sound/soc/bcm/bcm2708-i2s.h
---- linux-4.1.6/sound/soc/bcm/bcm2708-i2s.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/bcm2708-i2s.h 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/bcm2708-i2s.h linux-rpi/sound/soc/bcm/bcm2708-i2s.h
+--- linux-4.1.10/sound/soc/bcm/bcm2708-i2s.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/bcm2708-i2s.h 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,35 @@
+/*
+ * I2S configuration for sound cards.
@@ -309153,9 +311935,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/bcm2708-i2s.h linux-rpi/sound/soc/bcm/bcm270
+extern void bcm2708_i2s_set_gpio(int gpio);
+
+#endif
-diff -Nur linux-4.1.6/sound/soc/bcm/bcm2835-i2s.c linux-rpi/sound/soc/bcm/bcm2835-i2s.c
---- linux-4.1.6/sound/soc/bcm/bcm2835-i2s.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/bcm/bcm2835-i2s.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/bcm2835-i2s.c linux-rpi/sound/soc/bcm/bcm2835-i2s.c
+--- linux-4.1.10/sound/soc/bcm/bcm2835-i2s.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/bcm/bcm2835-i2s.c 2015-10-07 16:41:15.000000000 +0200
@@ -861,6 +861,7 @@
{ .compatible = "brcm,bcm2835-i2s", },
{},
@@ -309164,9 +311946,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/bcm2835-i2s.c linux-rpi/sound/soc/bcm/bcm283
static struct platform_driver bcm2835_i2s_driver = {
.probe = bcm2835_i2s_probe,
-diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_amp.c linux-rpi/sound/soc/bcm/hifiberry_amp.c
---- linux-4.1.6/sound/soc/bcm/hifiberry_amp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/hifiberry_amp.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/hifiberry_amp.c linux-rpi/sound/soc/bcm/hifiberry_amp.c
+--- linux-4.1.10/sound/soc/bcm/hifiberry_amp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/hifiberry_amp.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,127 @@
+/*
+ * ASoC Driver for HifiBerry AMP
@@ -309295,9 +312077,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_amp.c linux-rpi/sound/soc/bcm/hifi
+MODULE_AUTHOR("Sebastian Eickhoff <basti.eickhoff@googlemail.com>");
+MODULE_DESCRIPTION("ASoC driver for HiFiBerry-AMP");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dac.c linux-rpi/sound/soc/bcm/hifiberry_dac.c
---- linux-4.1.6/sound/soc/bcm/hifiberry_dac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/hifiberry_dac.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/hifiberry_dac.c linux-rpi/sound/soc/bcm/hifiberry_dac.c
+--- linux-4.1.10/sound/soc/bcm/hifiberry_dac.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/hifiberry_dac.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,122 @@
+/*
+ * ASoC Driver for HifiBerry DAC
@@ -309421,15 +312203,15 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dac.c linux-rpi/sound/soc/bcm/hifi
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_DESCRIPTION("ASoC Driver for HifiBerry DAC");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/hifiberry_dacplus.c
---- linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/hifiberry_dacplus.c 2015-08-26 10:26:13.365379818 +0200
-@@ -0,0 +1,141 @@
+diff -Nur linux-4.1.10/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/hifiberry_dacplus.c
+--- linux-4.1.10/sound/soc/bcm/hifiberry_dacplus.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/hifiberry_dacplus.c 2015-10-07 16:41:15.000000000 +0200
+@@ -0,0 +1,337 @@
+/*
-+ * ASoC Driver for HiFiBerry DAC+
++ * ASoC Driver for HiFiBerry DAC+ / DAC Pro
+ *
-+ * Author: Daniel Matuschek
-+ * Copyright 2014
++ * Author: Daniel Matuschek, Stuart MacLean <stuart@hifiberry.com>
++ * Copyright 2014-2015
+ * based on code by Florian Meier <florian.meier@koalo.de>
+ *
+ * This program is free software; you can redistribute it and/or
@@ -309444,6 +312226,13 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
++#include <linux/kernel.h>
++#include <linux/clk.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/of.h>
++#include <linux/slab.h>
++#include <linux/delay.h>
+
+#include <sound/core.h>
+#include <sound/pcm.h>
@@ -309453,34 +312242,222 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/
+
+#include "../codecs/pcm512x.h"
+
++#define HIFIBERRY_DACPRO_NOCLOCK 0
++#define HIFIBERRY_DACPRO_CLK44EN 1
++#define HIFIBERRY_DACPRO_CLK48EN 2
++
++struct pcm512x_priv {
++ struct regmap *regmap;
++ struct clk *sclk;
++};
++
++/* Clock rate of CLK44EN attached to GPIO6 pin */
++#define CLK_44EN_RATE 22579200UL
++/* Clock rate of CLK48EN attached to GPIO3 pin */
++#define CLK_48EN_RATE 24576000UL
++
++static bool snd_rpi_hifiberry_is_dacpro;
++
++static void snd_rpi_hifiberry_dacplus_select_clk(struct snd_soc_codec *codec,
++ int clk_id)
++{
++ switch (clk_id) {
++ case HIFIBERRY_DACPRO_NOCLOCK:
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x24, 0x00);
++ break;
++ case HIFIBERRY_DACPRO_CLK44EN:
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x24, 0x20);
++ break;
++ case HIFIBERRY_DACPRO_CLK48EN:
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x24, 0x04);
++ break;
++ }
++}
++
++static void snd_rpi_hifiberry_dacplus_clk_gpio(struct snd_soc_codec *codec)
++{
++ snd_soc_update_bits(codec, PCM512x_GPIO_EN, 0x24, 0x24);
++ snd_soc_update_bits(codec, PCM512x_GPIO_OUTPUT_3, 0x0f, 0x02);
++ snd_soc_update_bits(codec, PCM512x_GPIO_OUTPUT_6, 0x0f, 0x02);
++}
++
++static bool snd_rpi_hifiberry_dacplus_is_sclk(struct snd_soc_codec *codec)
++{
++ int sck;
++
++ sck = snd_soc_read(codec, PCM512x_RATE_DET_4);
++ return (!(sck & 0x40));
++}
++
++static bool snd_rpi_hifiberry_dacplus_is_sclk_sleep(
++ struct snd_soc_codec *codec)
++{
++ msleep(2);
++ return snd_rpi_hifiberry_dacplus_is_sclk(codec);
++}
++
++static bool snd_rpi_hifiberry_dacplus_is_pro_card(struct snd_soc_codec *codec)
++{
++ bool isClk44EN, isClk48En, isNoClk;
++
++ snd_rpi_hifiberry_dacplus_clk_gpio(codec);
++
++ snd_rpi_hifiberry_dacplus_select_clk(codec, HIFIBERRY_DACPRO_CLK44EN);
++ isClk44EN = snd_rpi_hifiberry_dacplus_is_sclk_sleep(codec);
++
++ snd_rpi_hifiberry_dacplus_select_clk(codec, HIFIBERRY_DACPRO_NOCLOCK);
++ isNoClk = snd_rpi_hifiberry_dacplus_is_sclk_sleep(codec);
++
++ snd_rpi_hifiberry_dacplus_select_clk(codec, HIFIBERRY_DACPRO_CLK48EN);
++ isClk48En = snd_rpi_hifiberry_dacplus_is_sclk_sleep(codec);
++
++ return (isClk44EN && isClk48En && !isNoClk);
++}
++
++static int snd_rpi_hifiberry_dacplus_clk_for_rate(int sample_rate)
++{
++ int type;
++
++ switch (sample_rate) {
++ case 11025:
++ case 22050:
++ case 44100:
++ case 88200:
++ case 176400:
++ type = HIFIBERRY_DACPRO_CLK44EN;
++ break;
++ default:
++ type = HIFIBERRY_DACPRO_CLK48EN;
++ break;
++ }
++ return type;
++}
++
++static void snd_rpi_hifiberry_dacplus_set_sclk(struct snd_soc_codec *codec,
++ int sample_rate)
++{
++ struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec);
++
++ if (!IS_ERR(pcm512x->sclk)) {
++ int ctype;
++
++ ctype = snd_rpi_hifiberry_dacplus_clk_for_rate(sample_rate);
++ clk_set_rate(pcm512x->sclk, (ctype == HIFIBERRY_DACPRO_CLK44EN)
++ ? CLK_44EN_RATE : CLK_48EN_RATE);
++ snd_rpi_hifiberry_dacplus_select_clk(codec, ctype);
++ }
++}
++
+static int snd_rpi_hifiberry_dacplus_init(struct snd_soc_pcm_runtime *rtd)
+{
+ struct snd_soc_codec *codec = rtd->codec;
++ struct pcm512x_priv *priv;
++
++ snd_rpi_hifiberry_is_dacpro
++ = snd_rpi_hifiberry_dacplus_is_pro_card(codec);
++
++ if (snd_rpi_hifiberry_is_dacpro) {
++ struct snd_soc_dai_link *dai = rtd->dai_link;
++
++ dai->name = "HiFiBerry DAC+ Pro";
++ dai->stream_name = "HiFiBerry DAC+ Pro HiFi";
++ dai->dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF
++ | SND_SOC_DAIFMT_CBM_CFM;
++
++ snd_soc_update_bits(codec, PCM512x_BCLK_LRCLK_CFG, 0x31, 0x11);
++ snd_soc_update_bits(codec, PCM512x_MASTER_MODE, 0x03, 0x03);
++ snd_soc_update_bits(codec, PCM512x_MASTER_CLKDIV_2, 0x7f, 63);
++ } else {
++ priv = snd_soc_codec_get_drvdata(codec);
++ priv->sclk = ERR_PTR(-ENOENT);
++ }
++
+ snd_soc_update_bits(codec, PCM512x_GPIO_EN, 0x08, 0x08);
-+ snd_soc_update_bits(codec, PCM512x_GPIO_OUTPUT_4, 0xf, 0x02);
-+ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x08);
++ snd_soc_update_bits(codec, PCM512x_GPIO_OUTPUT_4, 0x0f, 0x02);
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08, 0x08);
++
+ return 0;
+}
+
-+static int snd_rpi_hifiberry_dacplus_hw_params(struct snd_pcm_substream *substream,
-+ struct snd_pcm_hw_params *params)
++static int snd_rpi_hifiberry_dacplus_update_rate_den(
++ struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->codec;
++ struct pcm512x_priv *pcm512x = snd_soc_codec_get_drvdata(codec);
++ struct snd_ratnum *rats_no_pll;
++ unsigned int num = 0, den = 0;
++ int err;
++
++ rats_no_pll = devm_kzalloc(rtd->dev, sizeof(*rats_no_pll), GFP_KERNEL);
++ if (!rats_no_pll)
++ return -ENOMEM;
++
++ rats_no_pll->num = clk_get_rate(pcm512x->sclk) / 64;
++ rats_no_pll->den_min = 1;
++ rats_no_pll->den_max = 128;
++ rats_no_pll->den_step = 1;
++
++ err = snd_interval_ratnum(hw_param_interval(params,
++ SNDRV_PCM_HW_PARAM_RATE), 1, rats_no_pll, &num, &den);
++ if (err >= 0 && den) {
++ params->rate_num = num;
++ params->rate_den = den;
++ }
++
++ devm_kfree(rtd->dev, rats_no_pll);
++ return 0;
++}
++
++static int snd_rpi_hifiberry_dacplus_set_bclk_ratio_pro(
++ struct snd_soc_dai *cpu_dai, struct snd_pcm_hw_params *params)
++{
++ int bratio = snd_pcm_format_physical_width(params_format(params))
++ * params_channels(params);
++ return snd_soc_dai_set_bclk_ratio(cpu_dai, bratio);
++}
++
++static int snd_rpi_hifiberry_dacplus_hw_params(
++ struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params)
++{
++ int ret;
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
-+ return snd_soc_dai_set_bclk_ratio(cpu_dai, 64);
++
++ if (snd_rpi_hifiberry_is_dacpro) {
++ struct snd_soc_codec *codec = rtd->codec;
++
++ snd_rpi_hifiberry_dacplus_set_sclk(codec,
++ params_rate(params));
++
++ ret = snd_rpi_hifiberry_dacplus_set_bclk_ratio_pro(cpu_dai,
++ params);
++ if (!ret)
++ ret = snd_rpi_hifiberry_dacplus_update_rate_den(
++ substream, params);
++ } else {
++ ret = snd_soc_dai_set_bclk_ratio(cpu_dai, 64);
++ }
++ return ret;
+}
+
-+static int snd_rpi_hifiberry_dacplus_startup(struct snd_pcm_substream *substream) {
++static int snd_rpi_hifiberry_dacplus_startup(
++ struct snd_pcm_substream *substream)
++{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
-+ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x08);
++
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08, 0x08);
+ return 0;
+}
+
-+static void snd_rpi_hifiberry_dacplus_shutdown(struct snd_pcm_substream *substream) {
++static void snd_rpi_hifiberry_dacplus_shutdown(
++ struct snd_pcm_substream *substream)
++{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_codec *codec = rtd->codec;
-+ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x00);
++
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08, 0x00);
+}
+
+/* machine stream operations */
@@ -309517,19 +312494,20 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/
+ int ret = 0;
+
+ snd_rpi_hifiberry_dacplus.dev = &pdev->dev;
-+
+ if (pdev->dev.of_node) {
-+ struct device_node *i2s_node;
-+ struct snd_soc_dai_link *dai = &snd_rpi_hifiberry_dacplus_dai[0];
-+ i2s_node = of_parse_phandle(pdev->dev.of_node,
-+ "i2s-controller", 0);
++ struct device_node *i2s_node;
++ struct snd_soc_dai_link *dai;
+
-+ if (i2s_node) {
-+ dai->cpu_dai_name = NULL;
-+ dai->cpu_of_node = i2s_node;
-+ dai->platform_name = NULL;
-+ dai->platform_of_node = i2s_node;
-+ }
++ dai = &snd_rpi_hifiberry_dacplus_dai[0];
++ i2s_node = of_parse_phandle(pdev->dev.of_node,
++ "i2s-controller", 0);
++
++ if (i2s_node) {
++ dai->cpu_dai_name = NULL;
++ dai->cpu_of_node = i2s_node;
++ dai->platform_name = NULL;
++ dai->platform_of_node = i2s_node;
++ }
+ }
+
+ ret = snd_soc_register_card(&snd_rpi_hifiberry_dacplus);
@@ -309566,9 +312544,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_dacplus.c linux-rpi/sound/soc/bcm/
+MODULE_AUTHOR("Daniel Matuschek <daniel@hifiberry.com>");
+MODULE_DESCRIPTION("ASoC Driver for HiFiBerry DAC+");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_digi.c linux-rpi/sound/soc/bcm/hifiberry_digi.c
---- linux-4.1.6/sound/soc/bcm/hifiberry_digi.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/hifiberry_digi.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/hifiberry_digi.c linux-rpi/sound/soc/bcm/hifiberry_digi.c
+--- linux-4.1.10/sound/soc/bcm/hifiberry_digi.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/hifiberry_digi.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,223 @@
+/*
+ * ASoC Driver for HifiBerry Digi
@@ -309793,9 +312771,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/hifiberry_digi.c linux-rpi/sound/soc/bcm/hif
+MODULE_AUTHOR("Daniel Matuschek <info@crazy-audio.com>");
+MODULE_DESCRIPTION("ASoC Driver for HifiBerry Digi");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/iqaudio-dac.c linux-rpi/sound/soc/bcm/iqaudio-dac.c
---- linux-4.1.6/sound/soc/bcm/iqaudio-dac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/iqaudio-dac.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/iqaudio-dac.c linux-rpi/sound/soc/bcm/iqaudio-dac.c
+--- linux-4.1.10/sound/soc/bcm/iqaudio-dac.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/iqaudio-dac.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,133 @@
+/*
+ * ASoC Driver for IQaudIO DAC
@@ -309930,9 +312908,309 @@ diff -Nur linux-4.1.6/sound/soc/bcm/iqaudio-dac.c linux-rpi/sound/soc/bcm/iqaudi
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_DESCRIPTION("ASoC Driver for IQAudio DAC");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/rpi-dac.c linux-rpi/sound/soc/bcm/rpi-dac.c
---- linux-4.1.6/sound/soc/bcm/rpi-dac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/rpi-dac.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/Kconfig linux-rpi/sound/soc/bcm/Kconfig
+--- linux-4.1.10/sound/soc/bcm/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/bcm/Kconfig 2015-10-07 16:41:15.000000000 +0200
+@@ -7,3 +7,71 @@
+ Say Y or M if you want to add support for codecs attached to
+ the BCM2835 I2S interface. You will also need
+ to select the audio interfaces to support below.
++
++config SND_BCM2708_SOC_I2S
++ tristate "SoC Audio support for the Broadcom BCM2708 I2S module"
++ depends on MACH_BCM2708 || MACH_BCM2709
++ select REGMAP_MMIO
++ select SND_SOC_DMAENGINE_PCM
++ select SND_SOC_GENERIC_DMAENGINE_PCM
++ help
++ Say Y or M if you want to add support for codecs attached to
++ the BCM2708 I2S interface. You will also need
++ to select the audio interfaces to support below.
++
++config SND_BCM2708_SOC_HIFIBERRY_DAC
++ tristate "Support for HifiBerry DAC"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_PCM5102A
++ help
++ Say Y or M if you want to add support for HifiBerry DAC.
++
++config SND_BCM2708_SOC_HIFIBERRY_DACPLUS
++ tristate "Support for HifiBerry DAC+"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_PCM512x
++ help
++ Say Y or M if you want to add support for HifiBerry DAC+.
++
++config SND_BCM2708_SOC_HIFIBERRY_DIGI
++ tristate "Support for HifiBerry Digi"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_WM8804
++ help
++ Say Y or M if you want to add support for HifiBerry Digi S/PDIF output board.
++
++config SND_BCM2708_SOC_HIFIBERRY_AMP
++ tristate "Support for the HifiBerry Amp"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_TAS5713
++ help
++ Say Y or M if you want to add support for the HifiBerry Amp amplifier board.
++
++config SND_BCM2708_SOC_RPI_DAC
++ tristate "Support for RPi-DAC"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_PCM1794A
++ help
++ Say Y or M if you want to add support for RPi-DAC.
++
++config SND_BCM2708_SOC_RPI_PROTO
++ tristate "Support for Rpi-PROTO"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_WM8731
++ help
++ Say Y or M if you want to add support for Audio Codec Board PROTO (WM8731).
++
++config SND_BCM2708_SOC_IQAUDIO_DAC
++ tristate "Support for IQaudIO-DAC"
++ depends on SND_BCM2708_SOC_I2S || SND_BCM2835_SOC_I2S
++ select SND_SOC_PCM512x_I2C
++ help
++ Say Y or M if you want to add support for IQaudIO-DAC.
++
++config SND_BCM2708_SOC_RASPIDAC3
++ tristate "Support for RaspiDAC Rev.3x"
++ depends on SND_BCM2708_SOC_I2S
++ select SND_SOC_PCM512x_I2C
++ select SND_SOC_TPA6130A2
++ help
++ Say Y or M if you want to add support for RaspiDAC Rev.3x.
+diff -Nur linux-4.1.10/sound/soc/bcm/Makefile linux-rpi/sound/soc/bcm/Makefile
+--- linux-4.1.10/sound/soc/bcm/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/bcm/Makefile 2015-10-07 16:41:15.000000000 +0200
+@@ -3,3 +3,26 @@
+
+ obj-$(CONFIG_SND_BCM2835_SOC_I2S) += snd-soc-bcm2835-i2s.o
+
++# BCM2708 Platform Support
++snd-soc-bcm2708-i2s-objs := bcm2708-i2s.o
++
++obj-$(CONFIG_SND_BCM2708_SOC_I2S) += snd-soc-bcm2708-i2s.o
++
++# BCM2708 Machine Support
++snd-soc-hifiberry-dac-objs := hifiberry_dac.o
++snd-soc-hifiberry-dacplus-objs := hifiberry_dacplus.o
++snd-soc-hifiberry-digi-objs := hifiberry_digi.o
++snd-soc-hifiberry-amp-objs := hifiberry_amp.o
++snd-soc-rpi-dac-objs := rpi-dac.o
++snd-soc-rpi-proto-objs := rpi-proto.o
++snd-soc-iqaudio-dac-objs := iqaudio-dac.o
++snd-soc-raspidac3-objs := raspidac3.o
++
++obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) += snd-soc-hifiberry-dac.o
++obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += snd-soc-hifiberry-dacplus.o
++obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DIGI) += snd-soc-hifiberry-digi.o
++obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_AMP) += snd-soc-hifiberry-amp.o
++obj-$(CONFIG_SND_BCM2708_SOC_RPI_DAC) += snd-soc-rpi-dac.o
++obj-$(CONFIG_SND_BCM2708_SOC_RPI_PROTO) += snd-soc-rpi-proto.o
++obj-$(CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC) += snd-soc-iqaudio-dac.o
++obj-$(CONFIG_SND_BCM2708_SOC_RASPIDAC3) += snd-soc-raspidac3.o
+diff -Nur linux-4.1.10/sound/soc/bcm/raspidac3.c linux-rpi/sound/soc/bcm/raspidac3.c
+--- linux-4.1.10/sound/soc/bcm/raspidac3.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/raspidac3.c 2015-10-07 16:41:15.000000000 +0200
+@@ -0,0 +1,191 @@
++/*
++ * ASoC Driver for RaspiDAC v3
++ *
++ * Author: Jan Grulich <jan@grulich.eu>
++ * Copyright 2015
++ * based on code by Daniel Matuschek <daniel@hifiberry.com>
++ * based on code by Florian Meier <florian.meier@koalo.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * version 2 as published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but
++ * WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++ * General Public License for more details.
++ */
++
++#include <linux/module.h>
++#include <linux/platform_device.h>
++
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++#include <sound/jack.h>
++#include <sound/soc-dapm.h>
++
++#include "../codecs/pcm512x.h"
++#include "../codecs/tpa6130a2.h"
++
++/* sound card init */
++static int snd_rpi_raspidac3_init(struct snd_soc_pcm_runtime *rtd)
++{
++ int ret;
++ struct snd_soc_card *card = rtd->card;
++ struct snd_soc_codec *codec = rtd->codec;
++ snd_soc_update_bits(codec, PCM512x_GPIO_EN, 0x08, 0x08);
++ snd_soc_update_bits(codec, PCM512x_GPIO_OUTPUT_4, 0xf, 0x02);
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x00);
++
++ ret = snd_soc_limit_volume(codec, "Digital Playback Volume", 207);
++ if (ret < 0)
++ dev_warn(card->dev, "Failed to set volume limit: %d\n", ret);
++ else {
++ struct snd_kcontrol *kctl;
++
++ ret = tpa6130a2_add_controls(codec);
++ if (ret < 0)
++ dev_warn(card->dev, "Failed to add TPA6130A2 controls: %d\n",
++ ret);
++ ret = snd_soc_limit_volume(codec,
++ "TPA6130A2 Headphone Playback Volume",
++ 54);
++ if (ret < 0)
++ dev_warn(card->dev, "Failed to set TPA6130A2 volume limit: %d\n",
++ ret);
++ kctl = snd_soc_card_get_kcontrol(card,
++ "TPA6130A2 Headphone Playback Volume");
++ if (kctl) {
++ strcpy(kctl->id.name, "Headphones Playback Volume");
++ /* disable the volume dB scale so alsamixer works */
++ kctl->vd[0].access = SNDRV_CTL_ELEM_ACCESS_READWRITE;
++ }
++
++ kctl = snd_soc_card_get_kcontrol(card,
++ "TPA6130A2 Headphone Playback Switch");
++ if (kctl)
++ strcpy(kctl->id.name, "Headphones Playback Switch");
++ }
++
++ return 0;
++}
++
++/* set hw parameters */
++static int snd_rpi_raspidac3_hw_params(struct snd_pcm_substream *substream,
++ struct snd_pcm_hw_params *params)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
++
++ unsigned int sample_bits =
++ snd_pcm_format_physical_width(params_format(params));
++
++ return snd_soc_dai_set_bclk_ratio(cpu_dai, sample_bits * 2);
++}
++
++/* startup */
++static int snd_rpi_raspidac3_startup(struct snd_pcm_substream *substream) {
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->codec;
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x08);
++ tpa6130a2_stereo_enable(codec, 1);
++ return 0;
++}
++
++/* shutdown */
++static void snd_rpi_raspidac3_shutdown(struct snd_pcm_substream *substream) {
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->codec;
++ snd_soc_update_bits(codec, PCM512x_GPIO_CONTROL_1, 0x08,0x00);
++ tpa6130a2_stereo_enable(codec, 0);
++}
++
++/* machine stream operations */
++static struct snd_soc_ops snd_rpi_raspidac3_ops = {
++ .hw_params = snd_rpi_raspidac3_hw_params,
++ .startup = snd_rpi_raspidac3_startup,
++ .shutdown = snd_rpi_raspidac3_shutdown,
++};
++
++/* interface setup */
++static struct snd_soc_dai_link snd_rpi_raspidac3_dai[] = {
++{
++ .name = "RaspiDAC Rev.3x",
++ .stream_name = "RaspiDAC HiFi",
++ .cpu_dai_name = "bcm2708-i2s.0",
++ .codec_dai_name = "pcm512x-hifi",
++ .platform_name = "bcm2708-i2s.0",
++ .codec_name = "pcm512x.1-004c",
++ .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF |
++ SND_SOC_DAIFMT_CBS_CFS,
++ .ops = &snd_rpi_raspidac3_ops,
++ .init = snd_rpi_raspidac3_init,
++},
++};
++
++/* audio machine driver */
++static struct snd_soc_card snd_rpi_raspidac3 = {
++ .name = "RaspiDAC Rev.3x HiFi Audio Card",
++ .dai_link = snd_rpi_raspidac3_dai,
++ .num_links = ARRAY_SIZE(snd_rpi_raspidac3_dai),
++};
++
++/* sound card test */
++static int snd_rpi_raspidac3_probe(struct platform_device *pdev)
++{
++ int ret = 0;
++
++ snd_rpi_raspidac3.dev = &pdev->dev;
++
++ if (pdev->dev.of_node) {
++ struct device_node *i2s_node;
++ struct snd_soc_dai_link *dai = &snd_rpi_raspidac3_dai[0];
++ i2s_node = of_parse_phandle(pdev->dev.of_node,
++ "i2s-controller", 0);
++
++ if (i2s_node) {
++ dai->cpu_dai_name = NULL;
++ dai->cpu_of_node = i2s_node;
++ dai->platform_name = NULL;
++ dai->platform_of_node = i2s_node;
++ }
++ }
++
++ ret = snd_soc_register_card(&snd_rpi_raspidac3);
++ if (ret)
++ dev_err(&pdev->dev,
++ "snd_soc_register_card() failed: %d\n", ret);
++
++ return ret;
++}
++
++/* sound card disconnect */
++static int snd_rpi_raspidac3_remove(struct platform_device *pdev)
++{
++ return snd_soc_unregister_card(&snd_rpi_raspidac3);
++}
++
++static const struct of_device_id raspidac3_of_match[] = {
++ { .compatible = "jg,raspidacv3", },
++ {},
++};
++MODULE_DEVICE_TABLE(of, raspidac3_of_match);
++
++/* sound card platform driver */
++static struct platform_driver snd_rpi_raspidac3_driver = {
++ .driver = {
++ .name = "snd-rpi-raspidac3",
++ .owner = THIS_MODULE,
++ .of_match_table = raspidac3_of_match,
++ },
++ .probe = snd_rpi_raspidac3_probe,
++ .remove = snd_rpi_raspidac3_remove,
++};
++
++module_platform_driver(snd_rpi_raspidac3_driver);
++
++MODULE_AUTHOR("Jan Grulich <jan@grulich.eu>");
++MODULE_DESCRIPTION("ASoC Driver for RaspiDAC Rev.3x");
++MODULE_LICENSE("GPL v2");
+diff -Nur linux-4.1.10/sound/soc/bcm/rpi-dac.c linux-rpi/sound/soc/bcm/rpi-dac.c
+--- linux-4.1.10/sound/soc/bcm/rpi-dac.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/rpi-dac.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,118 @@
+/*
+ * ASoC Driver for RPi-DAC.
@@ -310052,9 +313330,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/rpi-dac.c linux-rpi/sound/soc/bcm/rpi-dac.c
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_DESCRIPTION("ASoC Driver for RPi-DAC");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/bcm/rpi-proto.c linux-rpi/sound/soc/bcm/rpi-proto.c
---- linux-4.1.6/sound/soc/bcm/rpi-proto.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/bcm/rpi-proto.c 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/bcm/rpi-proto.c linux-rpi/sound/soc/bcm/rpi-proto.c
+--- linux-4.1.10/sound/soc/bcm/rpi-proto.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/bcm/rpi-proto.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,153 @@
+/*
+ * ASoC driver for PROTO AudioCODEC (with a WM8731)
@@ -310209,9 +313487,9 @@ diff -Nur linux-4.1.6/sound/soc/bcm/rpi-proto.c linux-rpi/sound/soc/bcm/rpi-prot
+MODULE_AUTHOR("Florian Meier");
+MODULE_DESCRIPTION("ASoC Driver for Raspberry Pi connected to PROTO board (WM8731)");
+MODULE_LICENSE("GPL");
-diff -Nur linux-4.1.6/sound/soc/codecs/Kconfig linux-rpi/sound/soc/codecs/Kconfig
---- linux-4.1.6/sound/soc/codecs/Kconfig 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/codecs/Kconfig 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/Kconfig linux-rpi/sound/soc/codecs/Kconfig
+--- linux-4.1.10/sound/soc/codecs/Kconfig 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/codecs/Kconfig 2015-10-07 16:41:15.000000000 +0200
@@ -83,6 +83,8 @@
select SND_SOC_PCM512x_I2C if I2C
select SND_SOC_PCM512x_SPI if SPI_MASTER
@@ -310252,9 +313530,9 @@ diff -Nur linux-4.1.6/sound/soc/codecs/Kconfig linux-rpi/sound/soc/codecs/Kconfi
config SND_SOC_TLV320AIC23
tristate
-diff -Nur linux-4.1.6/sound/soc/codecs/Makefile linux-rpi/sound/soc/codecs/Makefile
---- linux-4.1.6/sound/soc/codecs/Makefile 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/codecs/Makefile 2015-08-26 10:26:13.365379818 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/Makefile linux-rpi/sound/soc/codecs/Makefile
+--- linux-4.1.10/sound/soc/codecs/Makefile 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/codecs/Makefile 2015-10-07 16:41:15.000000000 +0200
@@ -78,6 +78,8 @@
snd-soc-pcm512x-spi-objs := pcm512x-spi.o
snd-soc-rl6231-objs := rl6231.o
@@ -310289,9 +313567,9 @@ diff -Nur linux-4.1.6/sound/soc/codecs/Makefile linux-rpi/sound/soc/codecs/Makef
obj-$(CONFIG_SND_SOC_TLV320AIC23) += snd-soc-tlv320aic23.o
obj-$(CONFIG_SND_SOC_TLV320AIC23_I2C) += snd-soc-tlv320aic23-i2c.o
obj-$(CONFIG_SND_SOC_TLV320AIC23_SPI) += snd-soc-tlv320aic23-spi.o
-diff -Nur linux-4.1.6/sound/soc/codecs/pcm1794a.c linux-rpi/sound/soc/codecs/pcm1794a.c
---- linux-4.1.6/sound/soc/codecs/pcm1794a.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/codecs/pcm1794a.c 2015-08-26 10:26:13.377379983 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/pcm1794a.c linux-rpi/sound/soc/codecs/pcm1794a.c
+--- linux-4.1.10/sound/soc/codecs/pcm1794a.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/codecs/pcm1794a.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,69 @@
+/*
+ * Driver for the PCM1794A codec
@@ -310362,9 +313640,9 @@ diff -Nur linux-4.1.6/sound/soc/codecs/pcm1794a.c linux-rpi/sound/soc/codecs/pcm
+MODULE_DESCRIPTION("ASoC PCM1794A codec driver");
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/codecs/pcm5102a.c linux-rpi/sound/soc/codecs/pcm5102a.c
---- linux-4.1.6/sound/soc/codecs/pcm5102a.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/codecs/pcm5102a.c 2015-08-26 10:26:13.377379983 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/pcm5102a.c linux-rpi/sound/soc/codecs/pcm5102a.c
+--- linux-4.1.10/sound/soc/codecs/pcm5102a.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/codecs/pcm5102a.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,70 @@
+/*
+ * Driver for the PCM5102A codec
@@ -310436,9 +313714,22 @@ diff -Nur linux-4.1.6/sound/soc/codecs/pcm5102a.c linux-rpi/sound/soc/codecs/pcm
+MODULE_DESCRIPTION("ASoC PCM5102A codec driver");
+MODULE_AUTHOR("Florian Meier <florian.meier@koalo.de>");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/codecs/tas5713.c linux-rpi/sound/soc/codecs/tas5713.c
---- linux-4.1.6/sound/soc/codecs/tas5713.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/codecs/tas5713.c 2015-08-26 10:26:13.385380091 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/pcm512x.c linux-rpi/sound/soc/codecs/pcm512x.c
+--- linux-4.1.10/sound/soc/codecs/pcm512x.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/codecs/pcm512x.c 2015-10-07 16:41:15.000000000 +0200
+@@ -856,7 +856,8 @@
+ int fssp;
+ int gpio;
+
+- lrclk_div = snd_soc_params_to_frame_size(params);
++ lrclk_div = snd_pcm_format_physical_width(params_format(params))
++ * params_channels(params);
+ if (lrclk_div == 0) {
+ dev_err(dev, "No LRCLK?\n");
+ return -EINVAL;
+diff -Nur linux-4.1.10/sound/soc/codecs/tas5713.c linux-rpi/sound/soc/codecs/tas5713.c
+--- linux-4.1.10/sound/soc/codecs/tas5713.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/codecs/tas5713.c 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,369 @@
+/*
+ * ASoC Driver for TAS5713
@@ -310809,9 +314100,9 @@ diff -Nur linux-4.1.6/sound/soc/codecs/tas5713.c linux-rpi/sound/soc/codecs/tas5
+MODULE_AUTHOR("Sebastian Eickhoff <basti.eickhoff@googlemail.com>");
+MODULE_DESCRIPTION("ASoC driver for TAS5713");
+MODULE_LICENSE("GPL v2");
-diff -Nur linux-4.1.6/sound/soc/codecs/tas5713.h linux-rpi/sound/soc/codecs/tas5713.h
---- linux-4.1.6/sound/soc/codecs/tas5713.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-rpi/sound/soc/codecs/tas5713.h 2015-08-26 10:26:13.385380091 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/tas5713.h linux-rpi/sound/soc/codecs/tas5713.h
+--- linux-4.1.10/sound/soc/codecs/tas5713.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-rpi/sound/soc/codecs/tas5713.h 2015-10-07 16:41:15.000000000 +0200
@@ -0,0 +1,210 @@
+/*
+ * ASoC Driver for TAS5713
@@ -311023,9 +314314,91 @@ diff -Nur linux-4.1.6/sound/soc/codecs/tas5713.h linux-rpi/sound/soc/codecs/tas5
+
+
+#endif /* _TAS5713_H */
-diff -Nur linux-4.1.6/sound/soc/codecs/wm8804.c linux-rpi/sound/soc/codecs/wm8804.c
---- linux-4.1.6/sound/soc/codecs/wm8804.c 2015-08-17 05:52:51.000000000 +0200
-+++ linux-rpi/sound/soc/codecs/wm8804.c 2015-08-26 10:26:13.393380200 +0200
+diff -Nur linux-4.1.10/sound/soc/codecs/tpa6130a2.c linux-rpi/sound/soc/codecs/tpa6130a2.c
+--- linux-4.1.10/sound/soc/codecs/tpa6130a2.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/codecs/tpa6130a2.c 2015-10-07 16:41:15.000000000 +0200
+@@ -4,6 +4,7 @@
+ * Copyright (C) Nokia Corporation
+ *
+ * Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
++ * Modified: Jan Grulich <jan@grulich.eu>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+@@ -52,6 +53,8 @@
+ enum tpa_model id;
+ };
+
++static void tpa6130a2_channel_enable(u8 channel, int enable);
++
+ static int tpa6130a2_i2c_read(int reg)
+ {
+ struct tpa6130a2_data *data;
+@@ -189,7 +192,7 @@
+ }
+
+ static int tpa6130a2_get_volsw(struct snd_kcontrol *kcontrol,
+- struct snd_ctl_elem_value *ucontrol)
++ struct snd_ctl_elem_value *ucontrol)
+ {
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+@@ -218,7 +221,7 @@
+ }
+
+ static int tpa6130a2_put_volsw(struct snd_kcontrol *kcontrol,
+- struct snd_ctl_elem_value *ucontrol)
++ struct snd_ctl_elem_value *ucontrol)
+ {
+ struct soc_mixer_control *mc =
+ (struct soc_mixer_control *)kcontrol->private_value;
+@@ -255,8 +258,22 @@
+ return 1;
+ }
+
++static int tpa6130a2_put_hp_sw(struct snd_kcontrol *kcontrol,
++ struct snd_ctl_elem_value *ucontrol)
++{
++ int enable = ucontrol->value.integer.value[0];
++ unsigned int state;
++
++ state = (tpa6130a2_read(TPA6130A2_REG_VOL_MUTE) & 0x80) == 0;
++ if (state == enable)
++ return 0; /* No change */
++
++ tpa6130a2_channel_enable(TPA6130A2_HP_EN_R | TPA6130A2_HP_EN_L, enable);
++ return 1; /* Changed */
++}
++
+ /*
+- * TPA6130 volume. From -59.5 to 4 dB with increasing step size when going
++ * TPA6130 volume. From -59.5 to +4.0 dB with increasing step size when going
+ * down in gain.
+ */
+ static const unsigned int tpa6130_tlv[] = {
+@@ -278,6 +295,9 @@
+ TPA6130A2_REG_VOL_MUTE, 0, 0x3f, 0,
+ tpa6130a2_get_volsw, tpa6130a2_put_volsw,
+ tpa6130_tlv),
++ SOC_SINGLE_EXT("TPA6130A2 Headphone Playback Switch",
++ TPA6130A2_REG_VOL_MUTE, 7, 1, 1,
++ tpa6130a2_get_volsw, tpa6130a2_put_hp_sw),
+ };
+
+ static const unsigned int tpa6140_tlv[] = {
+@@ -292,6 +312,9 @@
+ TPA6130A2_REG_VOL_MUTE, 1, 0x1f, 0,
+ tpa6130a2_get_volsw, tpa6130a2_put_volsw,
+ tpa6140_tlv),
++ SOC_SINGLE_EXT("TPA6140A2 Headphone Playback Switch",
++ TPA6130A2_REG_VOL_MUTE, 7, 1, 1,
++ tpa6130a2_get_volsw, tpa6130a2_put_hp_sw),
+ };
+
+ /*
+diff -Nur linux-4.1.10/sound/soc/codecs/wm8804.c linux-rpi/sound/soc/codecs/wm8804.c
+--- linux-4.1.10/sound/soc/codecs/wm8804.c 2015-10-03 13:49:38.000000000 +0200
++++ linux-rpi/sound/soc/codecs/wm8804.c 2015-10-07 16:41:15.000000000 +0200
@@ -304,6 +304,7 @@
blen = 0x1;
break;