mirror of https://github.com/hak5/openwrt.git
brcm2708: update linux 4.4 patches to latest version
As usual these patches were extracted and rebased from the raspberry pi repo: https://github.com/raspberrypi/linux/tree/rpi-4.4.y - led1 can't be controlled on rpi-3 for linux 4.4, remove it. - Fix modules.mk typos. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>lede-17.01
parent
b3ba3764d0
commit
8b52a8906b
|
@ -12,8 +12,7 @@ set_state() {
|
|||
status_led="led0"
|
||||
;;
|
||||
rpi-b-plus |\
|
||||
rpi-2-b |\
|
||||
rpi-3-b)
|
||||
rpi-2-b)
|
||||
status_led="led1"
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#
|
||||
# Copyright (C) 2012-2016 OpenWrt.org
|
||||
# Copyright (C) 2017 LEDE project
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
|
@ -126,8 +127,8 @@ define KernelPackage/sound-soc-digidac1-soundcard
|
|||
$(LINUX_DIR)/sound/soc/codecs/snd-soc-wm8741.ko \
|
||||
$(LINUX_DIR)/sound/soc/codecs/snd-soc-wm8804.ko \
|
||||
$(LINUX_DIR)/sound/soc/codecs/snd-soc-wm8804-i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,68,snd-soc-snd-soc-wm8741 \
|
||||
snd-soc-snd-soc-wm8804 snd-soc-snd-soc-wm8804-i2c \
|
||||
AUTOLOAD:=$(call AutoLoad,68,snd-soc-wm8741 \
|
||||
snd-soc-wm8804 snd-soc-wm8804-i2c \
|
||||
snd-soc-digidac1-soundcard)
|
||||
DEPENDS:= \
|
||||
kmod-sound-soc-bcm2835-i2s \
|
||||
|
@ -149,7 +150,7 @@ define KernelPackage/sound-soc-dionaudio-loco
|
|||
FILES:= \
|
||||
$(LINUX_DIR)/sound/soc/bcm/snd-soc-dionaudio-loco.ko \
|
||||
$(LINUX_DIR)/sound/soc/codecs/snd-soc-pcm5102a.ko
|
||||
AUTOLOAD:=$(call AutoLoad,68,snd-soc-snd-soc-pcm5102a \
|
||||
AUTOLOAD:=$(call AutoLoad,68,snd-soc-pcm5102a \
|
||||
snd-soc-dionaudio-loco)
|
||||
DEPENDS:= \
|
||||
kmod-sound-soc-bcm2835-i2s
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
From d7c87b54cdabe76c12f2bb527f2a6b02b6255a0f Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||||
Date: Fri, 4 Nov 2016 19:39:38 +0100
|
||||
Subject: [PATCH] kbuild: add -fno-PIE
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
commit 8ae94224c9d72fc4d9aaac93b2d7833cf46d7141 upstream.
|
||||
|
||||
Debian started to build the gcc with -fPIE by default so the kernel
|
||||
build ends before it starts properly with:
|
||||
|kernel/bounds.c:1:0: error: code model kernel does not support PIC mode
|
||||
|
||||
Also add to KBUILD_AFLAGS due to:
|
||||
|
||||
|gcc -Wp,-MD,arch/x86/entry/vdso/vdso32/.note.o.d … -mfentry -DCC_USING_FENTRY … vdso/vdso32/note.S
|
||||
|arch/x86/entry/vdso/vdso32/note.S:1:0: sorry, unimplemented: -mfentry isn’t supported for 32-bit in combination with -fpic
|
||||
|
||||
Tagging it stable so it is possible to compile recent stable kernels as
|
||||
well.
|
||||
|
||||
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||||
Signed-off-by: Michal Marek <mmarek@suse.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
Makefile | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index 1099371..c17219e 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -619,6 +619,8 @@ include arch/$(SRCARCH)/Makefile
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
|
||||
+KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
||||
+KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
KBUILD_CFLAGS += -Os
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From e1c194ad704d298d6914e5b1efc4afee41a18a4c Mon Sep 17 00:00:00 2001
|
||||
From: Borislav Petkov <bp@suse.de>
|
||||
Date: Mon, 14 Nov 2016 19:41:31 +0100
|
||||
Subject: [PATCH] kbuild: Steal gcc's pie from the very beginning
|
||||
|
||||
commit c6a385539175ebc603da53aafb7753d39089f32e upstream.
|
||||
|
||||
So Sebastian turned off the PIE for kernel builds but that was too late
|
||||
- Kbuild.include already uses KBUILD_CFLAGS and trying to disable gcc
|
||||
options with, say cc-disable-warning, fails:
|
||||
|
||||
gcc -D__KERNEL__ -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs
|
||||
...
|
||||
-Wno-sign-compare -fno-asynchronous-unwind-tables -Wframe-address -c -x c /dev/null -o .31392.tmp
|
||||
/dev/null:1:0: error: code model kernel does not support PIC mode
|
||||
|
||||
because that returns an error and we can't disable the warning. For
|
||||
example in this case:
|
||||
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
|
||||
|
||||
which leads to gcc issuing all those warnings again.
|
||||
|
||||
So let's turn off PIE/PIC at the earliest possible moment, when we
|
||||
declare KBUILD_CFLAGS so that cc-disable-warning picks it up too.
|
||||
|
||||
Also, we need the $(call cc-option ...) because -fno-PIE is supported
|
||||
since gcc v3.4 and our lowest supported gcc version is 3.2 right now.
|
||||
|
||||
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||||
Cc: Ben Hutchings <ben@decadent.org.uk>
|
||||
Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
||||
Signed-off-by: Michal Marek <mmarek@suse.com>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
Makefile | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index c17219e..1099371 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -619,8 +619,6 @@ include arch/$(SRCARCH)/Makefile
|
||||
KBUILD_CFLAGS += $(call cc-option,-fno-delete-null-pointer-checks,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning,maybe-uninitialized,)
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning,frame-address,)
|
||||
-KBUILD_CFLAGS += $(call cc-option,-fno-PIE)
|
||||
-KBUILD_AFLAGS += $(call cc-option,-fno-PIE)
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
KBUILD_CFLAGS += -Os
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 49b92b33aa6681e75f579b7369f34a53e9376e6c Mon Sep 17 00:00:00 2001
|
||||
From 192835cf562bf63050f3f4b3dab768f3481eb93d Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Sat, 26 Nov 2016 14:01:52 +0000
|
||||
Subject: [PATCH] ARM: dts: Restore dtbs_install functionality
|
||||
|
@ -8,6 +8,8 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
arch/arm/boot/dts/Makefile | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||
index cbfc8ba..14a491c 100644
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -806,10 +806,11 @@ dtstree := $(srctree)/$(src)
|
||||
|
@ -23,3 +25,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
DTC_FLAGS ?= -@ -H epapr
|
||||
+ dts-dirs += overlays
|
||||
endif
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 1efce478669516e7a0fad7fa9943c889fcc21d2e Mon Sep 17 00:00:00 2001
|
||||
From 70af0eca2c4a2a80a8edd6ce4c4c7a9eac038893 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Sun, 27 Nov 2016 21:45:55 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Update UART0 clock-frequency
|
||||
|
@ -16,6 +16,8 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
arch/arm/boot/dts/bcm2708_common.dtsi | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm2708_common.dtsi b/arch/arm/boot/dts/bcm2708_common.dtsi
|
||||
index c449493..a9fd97e 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708_common.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2708_common.dtsi
|
||||
@@ -456,7 +456,7 @@
|
||||
|
@ -27,3 +29,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
};
|
||||
|
||||
clk_apb_p: clock@3 {
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
From 05b2785cb7e1f40900dad84579c6f7fd4ad8aeda Mon Sep 17 00:00:00 2001
|
||||
From e94e99c9650e48f0de0399cf04ec3ae597f05ed2 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <6by9@users.noreply.github.com>
|
||||
Date: Wed, 30 Nov 2016 20:17:14 +0000
|
||||
Subject: [PATCH] BCM2835-v4l2: Fix a conformance test failure
|
||||
|
@ -13,9 +13,11 @@ Format ioctls:
|
|||
drivers/media/platform/bcm2835/bcm2835-camera.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/media/platform/bcm2835/bcm2835-camera.c b/drivers/media/platform/bcm2835/bcm2835-camera.c
|
||||
index a2cfff9..23ba458 100644
|
||||
--- a/drivers/media/platform/bcm2835/bcm2835-camera.c
|
||||
+++ b/drivers/media/platform/bcm2835/bcm2835-camera.c
|
||||
@@ -1397,6 +1397,7 @@ static int vidioc_s_parm(struct file *fi
|
||||
@@ -1397,6 +1397,7 @@ static int vidioc_s_parm(struct file *file, void *priv,
|
||||
dev->capture.timeperframe = tpf;
|
||||
parm->parm.capture.timeperframe = tpf;
|
||||
parm->parm.capture.readbuffers = 1;
|
||||
|
@ -23,3 +25,6 @@ Format ioctls:
|
|||
|
||||
fps_param.num = 0; /* Select variable fps, and then use
|
||||
* FPS_RANGE to select the actual limits.
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
From ea006f68522d82b294094fd29585b16290758d29 Mon Sep 17 00:00:00 2001
|
||||
From: Alan Yiding Wang <y2366wan@uwaterloo.ca>
|
||||
Date: Sat, 3 Dec 2016 23:22:02 -0500
|
||||
Subject: [PATCH] BCM270X_DT: Add overlay for enc28j60 on SPI2
|
||||
|
||||
Works on SPI2 for compute module
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 10 ++++-
|
||||
.../boot/dts/overlays/enc28j60-spi2-overlay.dts | 47 ++++++++++++++++++++++
|
||||
3 files changed, 57 insertions(+), 1 deletion(-)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index 57d60a4..c4186aa 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -28,6 +28,7 @@ dtbo-$(RPI_DT_OVERLAYS) += dpi24.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += dwc-otg.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += dwc2.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += enc28j60.dtbo
|
||||
+dtbo-$(RPI_DT_OVERLAYS) += enc28j60-spi2.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += gpio-ir.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += gpio-poweroff.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += hifiberry-amp.dtbo
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 35c0cec1..4a77ee6 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -344,13 +344,21 @@ Params: dr_mode Dual role mode: "host", "peripheral" or "otg"
|
||||
|
||||
|
||||
Name: enc28j60
|
||||
-Info: Overlay for the Microchip ENC28J60 Ethernet Controller (SPI)
|
||||
+Info: Overlay for the Microchip ENC28J60 Ethernet Controller on SPI0
|
||||
Load: dtoverlay=enc28j60,<param>=<val>
|
||||
Params: int_pin GPIO used for INT (default 25)
|
||||
|
||||
speed SPI bus speed (default 12000000)
|
||||
|
||||
|
||||
+Name: enc28j60-spi2
|
||||
+Info: Overlay for the Microchip ENC28J60 Ethernet Controller on SPI2
|
||||
+Load: dtoverlay=enc28j60-spi2,<param>=<val>
|
||||
+Params: int_pin GPIO used for INT (default 39)
|
||||
+
|
||||
+ speed SPI bus speed (default 12000000)
|
||||
+
|
||||
+
|
||||
Name: gpio-ir
|
||||
Info: Use GPIO pin as rc-core style infrared receiver input. The rc-core-
|
||||
based gpio_ir_recv driver maps received keys directly to a
|
||||
diff --git a/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts b/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
|
||||
new file mode 100644
|
||||
index 0000000..946c9d2
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/enc28j60-spi2-overlay.dts
|
||||
@@ -0,0 +1,47 @@
|
||||
+// Overlay for the Microchip ENC28J60 Ethernet Controller - SPI2 Compute Module
|
||||
+// Interrupt pin: 39
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&spi2>;
|
||||
+ __overlay__ {
|
||||
+ /* needed to avoid dtc warning */
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ status = "okay";
|
||||
+
|
||||
+ eth1: enc28j60@0{
|
||||
+ compatible = "microchip,enc28j60";
|
||||
+ reg = <0>; /* CE0 */
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <ð1_pins>;
|
||||
+ interrupt-parent = <&gpio>;
|
||||
+ interrupts = <39 0x2>; /* falling edge */
|
||||
+ spi-max-frequency = <12000000>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&gpio>;
|
||||
+ __overlay__ {
|
||||
+ eth1_pins: eth1_pins {
|
||||
+ brcm,pins = <39>;
|
||||
+ brcm,function = <0>; /* in */
|
||||
+ brcm,pull = <0>; /* none */
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ int_pin = <ð1>, "interrupts:0",
|
||||
+ <ð1_pins>, "brcm,pins:0";
|
||||
+ speed = <ð1>, "spi-max-frequency:0";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
From a5cf7bed6a2d7267e2f0a3109807051e166930fb Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 5 Dec 2016 09:58:16 +0000
|
||||
Subject: [PATCH] lirc_rpi: Delete vestigial gpio_in_pull parameter
|
||||
|
||||
The RPi GPIO no longer support run-time "pull" settings - one should
|
||||
Device Tree and pinctrl instead - so remove the parameter to avoid
|
||||
confusion.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/1711
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
drivers/staging/media/lirc/lirc_rpi.c | 6 ------
|
||||
1 file changed, 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/media/lirc/lirc_rpi.c b/drivers/staging/media/lirc/lirc_rpi.c
|
||||
index 6132896..ebbf0d6 100644
|
||||
--- a/drivers/staging/media/lirc/lirc_rpi.c
|
||||
+++ b/drivers/staging/media/lirc/lirc_rpi.c
|
||||
@@ -64,8 +64,6 @@
|
||||
|
||||
/* set the default GPIO input pin */
|
||||
static int gpio_in_pin = 18;
|
||||
-/* set the default pull behaviour for input pin */
|
||||
-static int gpio_in_pull = BCM2708_PULL_DOWN;
|
||||
/* set the default GPIO output pin */
|
||||
static int gpio_out_pin = 17;
|
||||
/* enable debugging messages */
|
||||
@@ -716,10 +714,6 @@ module_param(gpio_in_pin, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(gpio_in_pin, "GPIO input pin number of the BCM processor."
|
||||
" (default 18");
|
||||
|
||||
-module_param(gpio_in_pull, int, S_IRUGO);
|
||||
-MODULE_PARM_DESC(gpio_in_pull, "GPIO input pin pull configuration."
|
||||
- " (0 = off, 1 = up, 2 = down, default down)");
|
||||
-
|
||||
module_param(sense, int, S_IRUGO);
|
||||
MODULE_PARM_DESC(sense, "Override autodetection of IR receiver circuit"
|
||||
" (0 = active high, 1 = active low )");
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
From ec94d922b57bb7d6586eaf1e1af02e9383680d15 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 5 Dec 2016 17:10:44 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Add i2c-sensor overlay
|
||||
|
||||
The i2c-sensor overlay is a container for various pressure and
|
||||
temperature sensors, currently bmp085 and bmp280. The standalone
|
||||
bmp085_i2c-sensor overlay is now deprecated.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 12 ++++++--
|
||||
arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts | 34 +++++++++++++++++++++++
|
||||
3 files changed, 45 insertions(+), 2 deletions(-)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index c4186aa..bc7f4a9 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -42,6 +42,7 @@ dtbo-$(RPI_DT_OVERLAYS) += i2c-gpio.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2c-mux.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2c-pwm-pca9685a.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2c-rtc.dtbo
|
||||
+dtbo-$(RPI_DT_OVERLAYS) += i2c-sensor.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2c0-bcm2708.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2c1-bcm2708.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += i2s-gpio28-31.dtbo
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 4a77ee6..80ea3de 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -283,8 +283,7 @@ Params: swap_lr Reverse the channel allocation, which will also
|
||||
|
||||
|
||||
Name: bmp085_i2c-sensor
|
||||
-Info: Configures the BMP085/BMP180 digital barometric pressure and temperature
|
||||
- sensors from Bosch Sensortec
|
||||
+Info: This overlay is now deprecated - see i2c-sensor
|
||||
Load: dtoverlay=bmp085_i2c-sensor
|
||||
Params: <None>
|
||||
|
||||
@@ -536,6 +535,15 @@ Params: abx80x Select one of the ABx80x family:
|
||||
source
|
||||
|
||||
|
||||
+Name: i2c-sensor
|
||||
+Info: Adds support for a number of I2C barometric pressure and temperature
|
||||
+ sensors on i2c_arm
|
||||
+Load: dtoverlay=i2c-sensor,<param>=<val>
|
||||
+Params: bmp085 Select the Bosch sensortronic BMP085
|
||||
+
|
||||
+ bmp280 Select the Bosch sensortronic BMP280
|
||||
+
|
||||
+
|
||||
Name: i2c0-bcm2708
|
||||
Info: Enable the i2c_bcm2708 driver for the i2c0 bus. Not all pin combinations
|
||||
are usable on all platforms.
|
||||
diff --git a/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
new file mode 100644
|
||||
index 0000000..f6d134c
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
@@ -0,0 +1,34 @@
|
||||
+// Definitions for a few digital barometric pressure and temperature sensors
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&i2c_arm>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
+
|
||||
+ bmp085: bmp085@77 {
|
||||
+ compatible = "bosch,bmp085";
|
||||
+ reg = <0x77>;
|
||||
+ default-oversampling = <3>;
|
||||
+ status = "disable";
|
||||
+ };
|
||||
+
|
||||
+ bmp280: bmp280@76 {
|
||||
+ compatible = "bosch,bmp280";
|
||||
+ reg = <0x76>;
|
||||
+ status = "disable";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ bmp085 = <&bmp085>,"status";
|
||||
+ bmp280 = <&bmp280>,"status";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
From 32b74f9dc3caa9d3422ffa735db0ecf088dbffbe Mon Sep 17 00:00:00 2001
|
||||
From: Georgii Staroselskii <gosha371@gmail.com>
|
||||
Date: Wed, 7 Dec 2016 15:10:27 +0300
|
||||
Subject: [PATCH] BCM270X_DT: overlays/*-overlay.dtb -> overlays/*.dtbo (#1752)
|
||||
|
||||
We now create overlays as .dtbo files.
|
||||
---
|
||||
arch/arm/boot/dts/overlays/README | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 80ea3de..7aee1af 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -61,7 +61,7 @@ this becomes a line in config.txt:
|
||||
|
||||
dtoverlay=lirc-rpi
|
||||
|
||||
-This causes the file /boot/overlays/lirc-rpi-overlay.dtb to be loaded. By
|
||||
+This causes the file /boot/overlays/lirc-rpi.dtbo to be loaded. By
|
||||
default it will use GPIOs 17 (out) and 18 (in), but this can be modified using
|
||||
DT parameters:
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
From e7b5643bfddd3ce80f4ade03a980da6b8979136d Mon Sep 17 00:00:00 2001
|
||||
From: Ioan-Adrian Ratiu <adi@adirat.com>
|
||||
Date: Tue, 27 Sep 2016 21:41:37 +0300
|
||||
Subject: [PATCH] Revert "HID: dragonrise: fix HID Descriptor for 0x0006 PID"
|
||||
|
||||
[ Upstream commit 1bcaa05ebee115213e34f1806cc6a4f7a6175a88 ]
|
||||
This reverts commit 18339f59c3a6 ("HID: dragonrise: fix HID...") because it
|
||||
breaks certain dragonrise 0079:0006 gamepads. While it may fix a breakage
|
||||
caused by commit 79346d620e9d ("HID: input: force generic axis to be mapped
|
||||
to their user space axis"), it is probable that the manufacturer released
|
||||
different hardware with the same PID so this fix works for only a subset
|
||||
and breaks the other gamepads sharing the PID.
|
||||
|
||||
What is needed is another more generic solution which fixes 79346d620e9d
|
||||
("HID: input: force generic axis ...") breakage for this controller: we
|
||||
need to add an exception for this driver to make it keep the old behaviour
|
||||
previous to the initial breakage (this is done in patch 2 of this series).
|
||||
|
||||
Signed-off-by: Ioan-Adrian Ratiu <adi@adirat.com>
|
||||
Reviewed-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
drivers/hid/hid-dr.c | 58 ----------------------------------------------------
|
||||
1 file changed, 58 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-dr.c b/drivers/hid/hid-dr.c
|
||||
index 1d78ba3..ce06444 100644
|
||||
--- a/drivers/hid/hid-dr.c
|
||||
+++ b/drivers/hid/hid-dr.c
|
||||
@@ -234,58 +234,6 @@ static __u8 pid0011_rdesc_fixed[] = {
|
||||
0xC0 /* End Collection */
|
||||
};
|
||||
|
||||
-static __u8 pid0006_rdesc_fixed[] = {
|
||||
- 0x05, 0x01, /* Usage Page (Generic Desktop) */
|
||||
- 0x09, 0x04, /* Usage (Joystick) */
|
||||
- 0xA1, 0x01, /* Collection (Application) */
|
||||
- 0xA1, 0x02, /* Collection (Logical) */
|
||||
- 0x75, 0x08, /* Report Size (8) */
|
||||
- 0x95, 0x05, /* Report Count (5) */
|
||||
- 0x15, 0x00, /* Logical Minimum (0) */
|
||||
- 0x26, 0xFF, 0x00, /* Logical Maximum (255) */
|
||||
- 0x35, 0x00, /* Physical Minimum (0) */
|
||||
- 0x46, 0xFF, 0x00, /* Physical Maximum (255) */
|
||||
- 0x09, 0x30, /* Usage (X) */
|
||||
- 0x09, 0x33, /* Usage (Ry) */
|
||||
- 0x09, 0x32, /* Usage (Z) */
|
||||
- 0x09, 0x31, /* Usage (Y) */
|
||||
- 0x09, 0x34, /* Usage (Ry) */
|
||||
- 0x81, 0x02, /* Input (Variable) */
|
||||
- 0x75, 0x04, /* Report Size (4) */
|
||||
- 0x95, 0x01, /* Report Count (1) */
|
||||
- 0x25, 0x07, /* Logical Maximum (7) */
|
||||
- 0x46, 0x3B, 0x01, /* Physical Maximum (315) */
|
||||
- 0x65, 0x14, /* Unit (Centimeter) */
|
||||
- 0x09, 0x39, /* Usage (Hat switch) */
|
||||
- 0x81, 0x42, /* Input (Variable) */
|
||||
- 0x65, 0x00, /* Unit (None) */
|
||||
- 0x75, 0x01, /* Report Size (1) */
|
||||
- 0x95, 0x0C, /* Report Count (12) */
|
||||
- 0x25, 0x01, /* Logical Maximum (1) */
|
||||
- 0x45, 0x01, /* Physical Maximum (1) */
|
||||
- 0x05, 0x09, /* Usage Page (Button) */
|
||||
- 0x19, 0x01, /* Usage Minimum (0x01) */
|
||||
- 0x29, 0x0C, /* Usage Maximum (0x0C) */
|
||||
- 0x81, 0x02, /* Input (Variable) */
|
||||
- 0x06, 0x00, 0xFF, /* Usage Page (Vendor Defined) */
|
||||
- 0x75, 0x01, /* Report Size (1) */
|
||||
- 0x95, 0x08, /* Report Count (8) */
|
||||
- 0x25, 0x01, /* Logical Maximum (1) */
|
||||
- 0x45, 0x01, /* Physical Maximum (1) */
|
||||
- 0x09, 0x01, /* Usage (0x01) */
|
||||
- 0x81, 0x02, /* Input (Variable) */
|
||||
- 0xC0, /* End Collection */
|
||||
- 0xA1, 0x02, /* Collection (Logical) */
|
||||
- 0x75, 0x08, /* Report Size (8) */
|
||||
- 0x95, 0x07, /* Report Count (7) */
|
||||
- 0x46, 0xFF, 0x00, /* Physical Maximum (255) */
|
||||
- 0x26, 0xFF, 0x00, /* Logical Maximum (255) */
|
||||
- 0x09, 0x02, /* Usage (0x02) */
|
||||
- 0x91, 0x02, /* Output (Variable) */
|
||||
- 0xC0, /* End Collection */
|
||||
- 0xC0 /* End Collection */
|
||||
-};
|
||||
-
|
||||
static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
unsigned int *rsize)
|
||||
{
|
||||
@@ -296,12 +244,6 @@ static __u8 *dr_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||
*rsize = sizeof(pid0011_rdesc_fixed);
|
||||
}
|
||||
break;
|
||||
- case 0x0006:
|
||||
- if (*rsize == sizeof(pid0006_rdesc_fixed)) {
|
||||
- rdesc = pid0006_rdesc_fixed;
|
||||
- *rsize = sizeof(pid0006_rdesc_fixed);
|
||||
- }
|
||||
- break;
|
||||
}
|
||||
return rdesc;
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
From b7791eea502e0d98ae204750aff2abafc431fb11 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 6 Dec 2016 17:05:39 +0000
|
||||
Subject: [PATCH] bcm2835-rng: Avoid initialising if already enabled
|
||||
|
||||
Avoids the 0x40000 cycles of warmup again if firmware has already used it
|
||||
---
|
||||
drivers/char/hw_random/bcm2835-rng.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
|
||||
index 7192ec2..2ff49c1 100644
|
||||
--- a/drivers/char/hw_random/bcm2835-rng.c
|
||||
+++ b/drivers/char/hw_random/bcm2835-rng.c
|
||||
@@ -62,9 +62,10 @@ static int bcm2835_rng_probe(struct platform_device *pdev)
|
||||
bcm2835_rng_ops.priv = (unsigned long)rng_base;
|
||||
|
||||
/* set warm-up count & enable */
|
||||
- __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS);
|
||||
- __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL);
|
||||
-
|
||||
+ if (!(__raw_readl(rng_base + RNG_CTRL) & RNG_RBGEN)) {
|
||||
+ __raw_writel(RNG_WARMUP_COUNT, rng_base + RNG_STATUS);
|
||||
+ __raw_writel(RNG_RBGEN, rng_base + RNG_CTRL);
|
||||
+ }
|
||||
/* register driver */
|
||||
err = hwrng_register(&bcm2835_rng_ops);
|
||||
if (err) {
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
From cdf6acdd6a6270538b0fdd08e79986d4a553062a Mon Sep 17 00:00:00 2001
|
||||
From: gtrainavicius <gtrainavicius@users.noreply.github.com>
|
||||
Date: Sat, 10 Dec 2016 16:05:25 +0200
|
||||
Subject: [PATCH] Pisound dynamic overlay (#1760)
|
||||
|
||||
Restructuring pisound-overlay.dts, so it can be loaded and unloaded dynamically using dtoverlay.
|
||||
|
||||
Print a logline when the kernel module is removed.
|
||||
---
|
||||
arch/arm/boot/dts/overlays/pisound-overlay.dts | 94 ++++++++++++++------------
|
||||
sound/soc/bcm/pisound.c | 2 +
|
||||
2 files changed, 52 insertions(+), 44 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/pisound-overlay.dts b/arch/arm/boot/dts/overlays/pisound-overlay.dts
|
||||
index 7cdfc29..5197e65 100644
|
||||
--- a/arch/arm/boot/dts/overlays/pisound-overlay.dts
|
||||
+++ b/arch/arm/boot/dts/overlays/pisound-overlay.dts
|
||||
@@ -26,6 +26,54 @@
|
||||
compatible = "brcm,bcm2708";
|
||||
|
||||
fragment@0 {
|
||||
+ target = <&spi0>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&spidev0>;
|
||||
+ __overlay__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@2 {
|
||||
+ target = <&spidev1>;
|
||||
+ __overlay__ {
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@3 {
|
||||
+ target = <&spi0>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ pisound_spi: pisound_spi@0{
|
||||
+ compatible = "blokaslabs,pisound-spi";
|
||||
+ reg = <0>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi0_pins>;
|
||||
+ spi-max-frequency = <1000000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@4 {
|
||||
+ target-path = "/";
|
||||
+ __overlay__ {
|
||||
+ pcm5102a-codec {
|
||||
+ #sound-dai-cells = <0>;
|
||||
+ compatible = "ti,pcm5102a";
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@5 {
|
||||
target = <&sound>;
|
||||
__overlay__ {
|
||||
compatible = "blokaslabs,pisound";
|
||||
@@ -49,7 +97,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
- fragment@1 {
|
||||
+ fragment@6 {
|
||||
target = <&gpio>;
|
||||
__overlay__ {
|
||||
pinctrl-names = "default";
|
||||
@@ -63,52 +111,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
- fragment@2 {
|
||||
+ fragment@7 {
|
||||
target = <&i2s>;
|
||||
__overlay__ {
|
||||
status = "okay";
|
||||
};
|
||||
};
|
||||
-
|
||||
- fragment@3 {
|
||||
- target-path = "/";
|
||||
- __overlay__ {
|
||||
- pcm5102a-codec {
|
||||
- #sound-dai-cells = <0>;
|
||||
- compatible = "ti,pcm5102a";
|
||||
- status = "okay";
|
||||
- };
|
||||
- };
|
||||
- };
|
||||
-
|
||||
- fragment@4 {
|
||||
- target = <&spi0>;
|
||||
- __overlay__ {
|
||||
- status = "okay";
|
||||
-
|
||||
- spidev@0{
|
||||
- status = "disabled";
|
||||
- };
|
||||
-
|
||||
- spidev@1{
|
||||
- status = "okay";
|
||||
- };
|
||||
- };
|
||||
- };
|
||||
-
|
||||
- fragment@5 {
|
||||
- target = <&spi0>;
|
||||
- __overlay__ {
|
||||
- #address-cells = <1>;
|
||||
- #size-cells = <0>;
|
||||
-
|
||||
- pisound_spi: pisound_spi@0{
|
||||
- compatible = "blokaslabs,pisound-spi";
|
||||
- reg = <0>;
|
||||
- pinctrl-names = "default";
|
||||
- pinctrl-0 = <&spi0_pins>;
|
||||
- spi-max-frequency = <1000000>;
|
||||
- };
|
||||
- };
|
||||
- };
|
||||
};
|
||||
diff --git a/sound/soc/bcm/pisound.c b/sound/soc/bcm/pisound.c
|
||||
index a3cd089..30903fcf 100644
|
||||
--- a/sound/soc/bcm/pisound.c
|
||||
+++ b/sound/soc/bcm/pisound.c
|
||||
@@ -954,6 +954,8 @@ static int pisnd_probe(struct platform_device *pdev)
|
||||
|
||||
static int pisnd_remove(struct platform_device *pdev)
|
||||
{
|
||||
+ printi("Unloading.\n");
|
||||
+
|
||||
if (pisnd_kobj) {
|
||||
kobject_put(pisnd_kobj);
|
||||
pisnd_kobj = NULL;
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
From 72b5fe0084ce231fc0325cdf6151da0e83f5ef4e Mon Sep 17 00:00:00 2001
|
||||
From: Alex Tucker <alex@floop.org.uk>
|
||||
Date: Tue, 3 Jan 2017 21:30:41 +0000
|
||||
Subject: [PATCH] Add support for Silicon Labs Si7013/20/21
|
||||
humidity/temperature sensor. (#1765)
|
||||
|
||||
---
|
||||
arch/arm/boot/dts/overlays/README | 3 ++
|
||||
arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts | 49 +++++++++++++----------
|
||||
2 files changed, 31 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 7aee1af..44ad21f 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -543,6 +543,9 @@ Params: bmp085 Select the Bosch sensortronic BMP085
|
||||
|
||||
bmp280 Select the Bosch sensortronic BMP280
|
||||
|
||||
+ si7020 Select the Silicon Labs Si7013/20/21 humidity/
|
||||
+ temperature sensor
|
||||
+
|
||||
|
||||
Name: i2c0-bcm2708
|
||||
Info: Enable the i2c_bcm2708 driver for the i2c0 bus. Not all pin combinations
|
||||
diff --git a/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
index f6d134c..31bda8d 100644
|
||||
--- a/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
+++ b/arch/arm/boot/dts/overlays/i2c-sensor-overlay.dts
|
||||
@@ -1,34 +1,41 @@
|
||||
-// Definitions for a few digital barometric pressure and temperature sensors
|
||||
+// Definitions for I2C based sensors using the Industrial IO interface.
|
||||
/dts-v1/;
|
||||
/plugin/;
|
||||
|
||||
/ {
|
||||
- compatible = "brcm,bcm2708";
|
||||
+ compatible = "brcm,bcm2708";
|
||||
|
||||
- fragment@0 {
|
||||
- target = <&i2c_arm>;
|
||||
- __overlay__ {
|
||||
- #address-cells = <1>;
|
||||
- #size-cells = <0>;
|
||||
- status = "okay";
|
||||
+ fragment@0 {
|
||||
+ target = <&i2c_arm>;
|
||||
+ __overlay__ {
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ status = "okay";
|
||||
|
||||
- bmp085: bmp085@77 {
|
||||
- compatible = "bosch,bmp085";
|
||||
- reg = <0x77>;
|
||||
- default-oversampling = <3>;
|
||||
- status = "disable";
|
||||
- };
|
||||
+ bmp085: bmp085@77 {
|
||||
+ compatible = "bosch,bmp085";
|
||||
+ reg = <0x77>;
|
||||
+ default-oversampling = <3>;
|
||||
+ status = "disable";
|
||||
+ };
|
||||
|
||||
- bmp280: bmp280@76 {
|
||||
- compatible = "bosch,bmp280";
|
||||
- reg = <0x76>;
|
||||
- status = "disable";
|
||||
- };
|
||||
- };
|
||||
- };
|
||||
+ bmp280: bmp280@76 {
|
||||
+ compatible = "bosch,bmp280";
|
||||
+ reg = <0x76>;
|
||||
+ status = "disable";
|
||||
+ };
|
||||
+
|
||||
+ si7020: si7020@40 {
|
||||
+ compatible = "si7020";
|
||||
+ reg = <0x40>;
|
||||
+ status = "disable";
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
|
||||
__overrides__ {
|
||||
bmp085 = <&bmp085>,"status";
|
||||
bmp280 = <&bmp280>,"status";
|
||||
+ si7020 = <&si7020>,"status";
|
||||
};
|
||||
};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
From ed621cdfdf0a5acf35079208818c9648f44ec638 Mon Sep 17 00:00:00 2001
|
||||
From: gtrainavicius <gtrainavicius@users.noreply.github.com>
|
||||
Date: Thu, 5 Jan 2017 17:08:45 +0200
|
||||
Subject: [PATCH] pisound improvements: (#1778)
|
||||
|
||||
* Added a writable sysfs object to enable scripts / user space software
|
||||
to blink MIDI activity LEDs for variable duration.
|
||||
* Improved hw_param constraints setting.
|
||||
* Added compatibility with S16_LE sample format.
|
||||
* Exposed some simple placeholder volume controls, so the card appears
|
||||
in volumealsa widget.
|
||||
|
||||
Signed-off-by: Giedrius Trainavicius <giedrius@blokas.io>
|
||||
---
|
||||
sound/soc/bcm/pisound.c | 175 ++++++++++++++++++++++++++++++++++++++++++------
|
||||
1 file changed, 154 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/sound/soc/bcm/pisound.c b/sound/soc/bcm/pisound.c
|
||||
index 30903fcf..d317eb9 100644
|
||||
--- a/sound/soc/bcm/pisound.c
|
||||
+++ b/sound/soc/bcm/pisound.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <sound/jack.h>
|
||||
#include <sound/rawmidi.h>
|
||||
#include <sound/asequencer.h>
|
||||
+#include <sound/control.h>
|
||||
|
||||
static int pisnd_spi_init(struct device *dev);
|
||||
static void pisnd_spi_uninit(void);
|
||||
@@ -214,6 +215,9 @@ static char g_serial_num[11];
|
||||
static char g_id[25];
|
||||
static char g_version[5];
|
||||
|
||||
+static uint8_t g_ledFlashDuration;
|
||||
+static bool g_ledFlashDurationChanged;
|
||||
+
|
||||
DEFINE_KFIFO(spi_fifo_in, uint8_t, FIFO_SIZE);
|
||||
DEFINE_KFIFO(spi_fifo_out, uint8_t, FIFO_SIZE);
|
||||
|
||||
@@ -396,8 +400,13 @@ static void pisnd_work_handler(struct work_struct *work)
|
||||
val = 0;
|
||||
tx = 0;
|
||||
|
||||
- if (kfifo_get(&spi_fifo_out, &val))
|
||||
+ if (g_ledFlashDurationChanged) {
|
||||
+ tx = 0xf000 | g_ledFlashDuration;
|
||||
+ g_ledFlashDuration = 0;
|
||||
+ g_ledFlashDurationChanged = false;
|
||||
+ } else if (kfifo_get(&spi_fifo_out, &val)) {
|
||||
tx = 0x0f00 | val;
|
||||
+ }
|
||||
|
||||
rx = spi_transfer16(tx);
|
||||
|
||||
@@ -410,6 +419,7 @@ static void pisnd_work_handler(struct work_struct *work)
|
||||
} while (rx != 0
|
||||
|| !kfifo_is_empty(&spi_fifo_out)
|
||||
|| pisnd_spi_has_more()
|
||||
+ || g_ledFlashDurationChanged
|
||||
);
|
||||
|
||||
if (!kfifo_is_empty(&spi_fifo_in) && g_recvCallback)
|
||||
@@ -569,7 +579,7 @@ static int pisnd_spi_init(struct device *dev)
|
||||
}
|
||||
|
||||
/* Flash the LEDs. */
|
||||
- spi_transfer16(0xf000);
|
||||
+ spi_transfer16(0xf008);
|
||||
|
||||
ret = pisnd_spi_gpio_irq_init(dev);
|
||||
if (ret < 0) {
|
||||
@@ -610,6 +620,14 @@ static void pisnd_spi_uninit(void)
|
||||
pisnd_spi_gpio_uninit();
|
||||
}
|
||||
|
||||
+static void pisnd_spi_flash_leds(uint8_t duration)
|
||||
+{
|
||||
+ g_ledFlashDuration = duration;
|
||||
+ g_ledFlashDurationChanged = true;
|
||||
+ printd("schedule from spi_flash_leds\n");
|
||||
+ pisnd_schedule_process(TASK_PROCESS);
|
||||
+}
|
||||
+
|
||||
static void pisnd_spi_send(uint8_t val)
|
||||
{
|
||||
kfifo_put(&spi_fifo_out, val);
|
||||
@@ -658,6 +676,83 @@ static const struct of_device_id pisound_of_match[] = {
|
||||
{},
|
||||
};
|
||||
|
||||
+enum {
|
||||
+ SWITCH = 0,
|
||||
+ VOLUME = 1,
|
||||
+};
|
||||
+
|
||||
+static int pisnd_ctl_info(struct snd_kcontrol *kcontrol,
|
||||
+ struct snd_ctl_elem_info *uinfo)
|
||||
+{
|
||||
+ if (kcontrol->private_value == SWITCH) {
|
||||
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
|
||||
+ uinfo->count = 1;
|
||||
+ uinfo->value.integer.min = 0;
|
||||
+ uinfo->value.integer.max = 1;
|
||||
+ return 0;
|
||||
+ } else if (kcontrol->private_value == VOLUME) {
|
||||
+ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
+ uinfo->count = 1;
|
||||
+ uinfo->value.integer.min = 0;
|
||||
+ uinfo->value.integer.max = 100;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
+
|
||||
+static int pisnd_ctl_get(struct snd_kcontrol *kcontrol,
|
||||
+ struct snd_ctl_elem_value *ucontrol)
|
||||
+{
|
||||
+ if (kcontrol->private_value == SWITCH) {
|
||||
+ ucontrol->value.integer.value[0] = 1;
|
||||
+ return 0;
|
||||
+ } else if (kcontrol->private_value == VOLUME) {
|
||||
+ ucontrol->value.integer.value[0] = 100;
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
+
|
||||
+static struct snd_kcontrol_new pisnd_ctl[] = {
|
||||
+ {
|
||||
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
+ .name = "PCM Playback Switch",
|
||||
+ .index = 0,
|
||||
+ .private_value = SWITCH,
|
||||
+ .access = SNDRV_CTL_ELEM_ACCESS_READ,
|
||||
+ .info = pisnd_ctl_info,
|
||||
+ .get = pisnd_ctl_get,
|
||||
+ },
|
||||
+ {
|
||||
+ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
|
||||
+ .name = "PCM Playback Volume",
|
||||
+ .index = 0,
|
||||
+ .private_value = VOLUME,
|
||||
+ .access = SNDRV_CTL_ELEM_ACCESS_READ,
|
||||
+ .info = pisnd_ctl_info,
|
||||
+ .get = pisnd_ctl_get,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static int pisnd_ctl_init(struct snd_card *card)
|
||||
+{
|
||||
+ int err, i;
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(pisnd_ctl); ++i) {
|
||||
+ err = snd_ctl_add(card, snd_ctl_new1(&pisnd_ctl[i], NULL));
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int pisnd_ctl_uninit(void)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static struct gpio_desc *osr0, *osr1, *osr2;
|
||||
static struct gpio_desc *reset;
|
||||
static struct gpio_desc *button;
|
||||
@@ -667,6 +762,14 @@ static int pisnd_hw_params(
|
||||
struct snd_pcm_hw_params *params
|
||||
)
|
||||
{
|
||||
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
|
||||
+
|
||||
+ /* pisound runs on fixed 32 clock counts per channel,
|
||||
+ * as generated by the master ADC.
|
||||
+ */
|
||||
+ snd_soc_dai_set_bclk_ratio(cpu_dai, 32*2);
|
||||
+
|
||||
printd("rate = %d\n", params_rate(params));
|
||||
printd("ch = %d\n", params_channels(params));
|
||||
printd("bits = %u\n",
|
||||
@@ -711,16 +814,6 @@ static struct snd_pcm_hw_constraint_list constraints_rates = {
|
||||
.mask = 0,
|
||||
};
|
||||
|
||||
-static unsigned int sample_bits[] = {
|
||||
- 24, 32
|
||||
-};
|
||||
-
|
||||
-static struct snd_pcm_hw_constraint_list constraints_sample_bits = {
|
||||
- .count = ARRAY_SIZE(sample_bits),
|
||||
- .list = sample_bits,
|
||||
- .mask = 0,
|
||||
-};
|
||||
-
|
||||
static int pisnd_startup(struct snd_pcm_substream *substream)
|
||||
{
|
||||
int err = snd_pcm_hw_constraint_list(
|
||||
@@ -733,11 +826,21 @@ static int pisnd_startup(struct snd_pcm_substream *substream)
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
- err = snd_pcm_hw_constraint_list(
|
||||
+ err = snd_pcm_hw_constraint_single(
|
||||
substream->runtime,
|
||||
- 0,
|
||||
- SNDRV_PCM_HW_PARAM_SAMPLE_BITS,
|
||||
- &constraints_sample_bits
|
||||
+ SNDRV_PCM_HW_PARAM_CHANNELS,
|
||||
+ 2
|
||||
+ );
|
||||
+
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ err = snd_pcm_hw_constraint_mask64(
|
||||
+ substream->runtime,
|
||||
+ SNDRV_PCM_HW_PARAM_FORMAT,
|
||||
+ SNDRV_PCM_FMTBIT_S16_LE |
|
||||
+ SNDRV_PCM_FMTBIT_S24_LE |
|
||||
+ SNDRV_PCM_FMTBIT_S32_LE
|
||||
);
|
||||
|
||||
if (err < 0)
|
||||
@@ -771,14 +874,23 @@ static int pisnd_card_probe(struct snd_soc_card *card)
|
||||
{
|
||||
int err = pisnd_midi_init(card->snd_card);
|
||||
|
||||
- if (err < 0)
|
||||
+ if (err < 0) {
|
||||
printe("pisnd_midi_init failed: %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
|
||||
- return err;
|
||||
+ err = pisnd_ctl_init(card->snd_card);
|
||||
+ if (err < 0) {
|
||||
+ printe("pisnd_ctl_init failed: %d\n", err);
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
static int pisnd_card_remove(struct snd_soc_card *card)
|
||||
{
|
||||
+ pisnd_ctl_uninit();
|
||||
pisnd_midi_uninit();
|
||||
return 0;
|
||||
}
|
||||
@@ -870,17 +982,38 @@ static ssize_t pisnd_version_show(
|
||||
return sprintf(buf, "%s\n", pisnd_spi_get_version());
|
||||
}
|
||||
|
||||
+static ssize_t pisnd_led_store(
|
||||
+ struct kobject *kobj,
|
||||
+ struct kobj_attribute *attr,
|
||||
+ const char *buf,
|
||||
+ size_t length
|
||||
+ )
|
||||
+{
|
||||
+ uint32_t timeout;
|
||||
+ int err;
|
||||
+
|
||||
+ err = kstrtou32(buf, 10, &timeout);
|
||||
+
|
||||
+ if (err == 0 && timeout <= 255)
|
||||
+ pisnd_spi_flash_leds(timeout);
|
||||
+
|
||||
+ return length;
|
||||
+}
|
||||
+
|
||||
static struct kobj_attribute pisnd_serial_attribute =
|
||||
- __ATTR(serial, 0644, pisnd_serial_show, NULL);
|
||||
+ __ATTR(serial, 0444, pisnd_serial_show, NULL);
|
||||
static struct kobj_attribute pisnd_id_attribute =
|
||||
- __ATTR(id, 0644, pisnd_id_show, NULL);
|
||||
+ __ATTR(id, 0444, pisnd_id_show, NULL);
|
||||
static struct kobj_attribute pisnd_version_attribute =
|
||||
- __ATTR(version, 0644, pisnd_version_show, NULL);
|
||||
+ __ATTR(version, 0444, pisnd_version_show, NULL);
|
||||
+static struct kobj_attribute pisnd_led_attribute =
|
||||
+ __ATTR(led, 0644, NULL, pisnd_led_store);
|
||||
|
||||
static struct attribute *attrs[] = {
|
||||
&pisnd_serial_attribute.attr,
|
||||
&pisnd_id_attribute.attr,
|
||||
&pisnd_version_attribute.attr,
|
||||
+ &pisnd_led_attribute.attr,
|
||||
NULL
|
||||
};
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 0ec03b021ee12ab6c30bcc8cb617cc4b87384d25 Mon Sep 17 00:00:00 2001
|
||||
From: Aaron Shaw <shawaj@gmail.com>
|
||||
Date: Tue, 10 Jan 2017 16:22:53 +0000
|
||||
Subject: [PATCH] Add driver_name properties to JustBoom drivers (#1787)
|
||||
|
||||
Add driver name properties for use with 5.1 passthrough audio in LibreElec
|
||||
and other Kodi based OSs
|
||||
---
|
||||
sound/soc/bcm/justboom-dac.c | 1 +
|
||||
sound/soc/bcm/justboom-digi.c | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/sound/soc/bcm/justboom-dac.c b/sound/soc/bcm/justboom-dac.c
|
||||
index 8fd50db..05a224e 100644
|
||||
--- a/sound/soc/bcm/justboom-dac.c
|
||||
+++ b/sound/soc/bcm/justboom-dac.c
|
||||
@@ -98,6 +98,7 @@ static struct snd_soc_dai_link snd_rpi_justboom_dac_dai[] = {
|
||||
/* audio machine driver */
|
||||
static struct snd_soc_card snd_rpi_justboom_dac = {
|
||||
.name = "snd_rpi_justboom_dac",
|
||||
+ .driver_name = "JustBoomDac",
|
||||
.owner = THIS_MODULE,
|
||||
.dai_link = snd_rpi_justboom_dac_dai,
|
||||
.num_links = ARRAY_SIZE(snd_rpi_justboom_dac_dai),
|
||||
diff --git a/sound/soc/bcm/justboom-digi.c b/sound/soc/bcm/justboom-digi.c
|
||||
index 91acb66..abfdc5c 100644
|
||||
--- a/sound/soc/bcm/justboom-digi.c
|
||||
+++ b/sound/soc/bcm/justboom-digi.c
|
||||
@@ -154,6 +154,7 @@ static struct snd_soc_dai_link snd_rpi_justboom_digi_dai[] = {
|
||||
/* audio machine driver */
|
||||
static struct snd_soc_card snd_rpi_justboom_digi = {
|
||||
.name = "snd_rpi_justboom_digi",
|
||||
+ .driver_name = "JustBoomDigi",
|
||||
.owner = THIS_MODULE,
|
||||
.dai_link = snd_rpi_justboom_digi_dai,
|
||||
.num_links = ARRAY_SIZE(snd_rpi_justboom_digi_dai),
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
From b97a67a14e5c5904b84e52150e0d13da794fc9d7 Mon Sep 17 00:00:00 2001
|
||||
From: gtrainavicius <gtrainavicius@users.noreply.github.com>
|
||||
Date: Tue, 10 Jan 2017 21:59:39 +0200
|
||||
Subject: [PATCH] bcm2835-i2s: Changes for allowing asymmetric sample formats.
|
||||
(#1783)
|
||||
|
||||
This is achieved by making changes only to the requested
|
||||
stream direction format, keeping the other stream direction
|
||||
configuration intact.
|
||||
|
||||
Signed-off-by: Giedrius Trainavicius <giedrius@blokas.io>
|
||||
---
|
||||
sound/soc/bcm/bcm2835-i2s.c | 54 +++++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 38 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c
|
||||
index aedb01f..d2b0801 100644
|
||||
--- a/sound/soc/bcm/bcm2835-i2s.c
|
||||
+++ b/sound/soc/bcm/bcm2835-i2s.c
|
||||
@@ -310,6 +310,7 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
unsigned int sampling_rate = params_rate(params);
|
||||
unsigned int data_length, data_delay, bclk_ratio;
|
||||
unsigned int ch1pos, ch2pos, mode, format;
|
||||
+ unsigned int previous_ftxp, previous_frxp;
|
||||
unsigned int mash = BCM2835_CLK_MASH_1;
|
||||
unsigned int divi, divf, target_frequency;
|
||||
int clk_src = -1;
|
||||
@@ -320,6 +321,7 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
bool frame_master = (master == SND_SOC_DAIFMT_CBS_CFS
|
||||
|| master == SND_SOC_DAIFMT_CBM_CFS);
|
||||
uint32_t csreg;
|
||||
+ bool packed;
|
||||
|
||||
/*
|
||||
* If a stream is already enabled,
|
||||
@@ -465,26 +467,46 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- /*
|
||||
- * Set format for both streams.
|
||||
- * We cannot set another frame length
|
||||
- * (and therefore word length) anyway,
|
||||
- * so the format will be the same.
|
||||
- */
|
||||
- regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
|
||||
- regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
|
||||
+ /* Set the format for the matching stream direction. */
|
||||
+ switch (substream->stream) {
|
||||
+ case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
|
||||
+ break;
|
||||
+ case SNDRV_PCM_STREAM_CAPTURE:
|
||||
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
|
||||
/* Setup the I2S mode */
|
||||
+ /* Keep existing FTXP and FRXP values. */
|
||||
+ regmap_read(dev->i2s_regmap, BCM2835_I2S_MODE_A_REG, &mode);
|
||||
+
|
||||
+ previous_ftxp = mode & BCM2835_I2S_FTXP;
|
||||
+ previous_frxp = mode & BCM2835_I2S_FRXP;
|
||||
+
|
||||
mode = 0;
|
||||
|
||||
- if (data_length <= 16) {
|
||||
- /*
|
||||
- * Use frame packed mode (2 channels per 32 bit word)
|
||||
- * We cannot set another frame length in the second stream
|
||||
- * (and therefore word length) anyway,
|
||||
- * so the format will be the same.
|
||||
- */
|
||||
- mode |= BCM2835_I2S_FTXP | BCM2835_I2S_FRXP;
|
||||
+ /*
|
||||
+ * Retain the frame packed mode (2 channels per 32 bit word)
|
||||
+ * of the other direction stream intact. The formats of each
|
||||
+ * direction can be different as long as the frame length is
|
||||
+ * shared for both.
|
||||
+ */
|
||||
+ packed = data_length <= 16;
|
||||
+
|
||||
+ switch (substream->stream) {
|
||||
+ case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
+ mode |= previous_frxp;
|
||||
+ mode |= packed ? BCM2835_I2S_FTXP : 0;
|
||||
+ break;
|
||||
+ case SNDRV_PCM_STREAM_CAPTURE:
|
||||
+ mode |= previous_ftxp;
|
||||
+ mode |= packed ? BCM2835_I2S_FRXP : 0;
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
}
|
||||
|
||||
mode |= BCM2835_I2S_FLEN(bclk_ratio - 1);
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
From 2abc666d62828bbc2889f31ebfb3754a55a51fb9 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 11 Jan 2017 13:01:21 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Add pi3-disable-wifi overlay
|
||||
|
||||
pi3-disable-wifi is a minimal overlay to disable the onboard WiFi.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 6 ++++++
|
||||
arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts | 13 +++++++++++++
|
||||
3 files changed, 20 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index bc7f4a9..05eda03 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -61,6 +61,7 @@ dtbo-$(RPI_DT_OVERLAYS) += mmc.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mz61581.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += pi3-act-led.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += pi3-disable-bt.dtbo
|
||||
+dtbo-$(RPI_DT_OVERLAYS) += pi3-disable-wifi.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += pi3-miniuart-bt.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += piscreen.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += piscreen2r.dtbo
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 44ad21f..adb86bc 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -793,6 +793,12 @@ Load: dtoverlay=pi3-disable-bt
|
||||
Params: <None>
|
||||
|
||||
|
||||
+Name: pi3-disable-wifi
|
||||
+Info: Disable Pi3 onboard WiFi
|
||||
+Load: dtoverlay=pi3-disable-wifi
|
||||
+Params: <None>
|
||||
+
|
||||
+
|
||||
Name: pi3-miniuart-bt
|
||||
Info: Switch Pi3 Bluetooth function to use the mini-UART (ttyS0) and restore
|
||||
UART0/ttyAMA0 over GPIOs 14 & 15. Note that this may reduce the maximum
|
||||
diff --git a/arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts b/arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts
|
||||
new file mode 100644
|
||||
index 0000000..0171995
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/pi3-disable-wifi-overlay.dts
|
||||
@@ -0,0 +1,13 @@
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/{
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&mmc>;
|
||||
+ __overlay__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From b928add95c9ddaa70b591da00d129558535d14d3 Mon Sep 17 00:00:00 2001
|
||||
From: Marek Vasut <marex@denx.de>
|
||||
Date: Wed, 18 May 2016 16:16:51 +0200
|
||||
Subject: [PATCH] configfs: Remove ppos increment in configfs_write_bin_file
|
||||
|
||||
[ Back-port of f8608985f851c917b3884b692d8e326b0210d34e ]
|
||||
|
||||
The simple_write_to_buffer() already increments the @ppos on success,
|
||||
see fs/libfs.c simple_write_to_buffer() comment:
|
||||
|
||||
"
|
||||
On success, the number of bytes written is returned and the offset @ppos
|
||||
advanced by this number, or negative value is returned on error.
|
||||
"
|
||||
|
||||
If the configfs_write_bin_file() is invoked with @count smaller than the
|
||||
total length of the written binary file, it will be invoked multiple times.
|
||||
Since configfs_write_bin_file() increments @ppos on success, after calling
|
||||
simple_write_to_buffer(), the @ppos is incremented twice.
|
||||
|
||||
Subsequent invocation of configfs_write_bin_file() will result in the next
|
||||
piece of data being written to the offset twice as long as the length of
|
||||
the previous write, thus creating buffer with "holes" in it.
|
||||
|
||||
The simple testcase using DTO follows:
|
||||
$ mkdir /sys/kernel/config/device-tree/overlays/1
|
||||
$ dd bs=1 if=foo.dtbo of=/sys/kernel/config/device-tree/overlays/1/dtbo
|
||||
Without this patch, the testcase will result in twice as big buffer in the
|
||||
kernel, which is then passed to the cfs_overlay_item_dtbo_write() .
|
||||
|
||||
Signed-off-by: Marek Vasut <marex@denx.de>
|
||||
Cc: Geert Uytterhoeven <geert+renesas@glider.be>
|
||||
Cc: Christoph Hellwig <hch@lst.de>
|
||||
Cc: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
|
||||
---
|
||||
fs/configfs/file.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/fs/configfs/file.c b/fs/configfs/file.c
|
||||
index 3687187..6e322f2 100644
|
||||
--- a/fs/configfs/file.c
|
||||
+++ b/fs/configfs/file.c
|
||||
@@ -357,8 +357,6 @@ configfs_write_bin_file(struct file *file, const char __user *buf,
|
||||
|
||||
len = simple_write_to_buffer(buffer->bin_buffer,
|
||||
buffer->bin_buffer_size, ppos, buf, count);
|
||||
- if (len > 0)
|
||||
- *ppos += len;
|
||||
out:
|
||||
mutex_unlock(&buffer->mutex);
|
||||
return len;
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From d560d7f385d0988d7747e9078a2330e4db4f28b8 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Sun, 15 Jan 2017 21:56:59 +0000
|
||||
Subject: [PATCH] config: Add CONFIG_DM_CACHE See:
|
||||
https://github.com/raspberrypi/linux/issues/1793
|
||||
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index c7606f2..0d07eed 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -438,6 +438,7 @@ CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
+CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_LOG_USERSPACE=m
|
||||
CONFIG_DM_RAID=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 8121ad2..51640cb 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -431,6 +431,7 @@ CONFIG_BLK_DEV_DM=m
|
||||
CONFIG_DM_CRYPT=m
|
||||
CONFIG_DM_SNAPSHOT=m
|
||||
CONFIG_DM_THIN_PROVISIONING=m
|
||||
+CONFIG_DM_CACHE=m
|
||||
CONFIG_DM_MIRROR=m
|
||||
CONFIG_DM_LOG_USERSPACE=m
|
||||
CONFIG_DM_RAID=m
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
From 1a2339385e478e3ae3ee4f79edbfefd7fd22e96c Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 16 Jan 2017 14:53:12 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Add spi0-cs overlay
|
||||
|
||||
The spi0-cs overlay allows the software chip selectts to be modified
|
||||
using the cs0_pin and cs1_pin parameters.
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 9 +++++++-
|
||||
arch/arm/boot/dts/overlays/spi0-cs-overlay.dts | 29 ++++++++++++++++++++++++++
|
||||
3 files changed, 38 insertions(+), 1 deletion(-)
|
||||
create mode 100644 arch/arm/boot/dts/overlays/spi0-cs-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index 05eda03..72f2d90a 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -93,6 +93,7 @@ dtbo-$(RPI_DT_OVERLAYS) += smi-dev.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += smi-nand.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += spi-gpio35-39.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += spi-rtc.dtbo
|
||||
+dtbo-$(RPI_DT_OVERLAYS) += spi0-cs.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += spi0-hw-cs.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += spi1-1cs.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += spi1-2cs.dtbo
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index adb86bc..7f4bd29 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -1131,7 +1131,7 @@ Params: <None>
|
||||
|
||||
|
||||
Name: spi-gpio35-39
|
||||
-Info: move SPI function block to GPIO 35 to 39
|
||||
+Info: Move SPI function block to GPIO 35 to 39
|
||||
Load: dtoverlay=spi-gpio35-39
|
||||
Params: <None>
|
||||
|
||||
@@ -1142,6 +1142,13 @@ Load: dtoverlay=spi-rtc,<param>=<val>
|
||||
Params: pcf2123 Select the PCF2123 device
|
||||
|
||||
|
||||
+Name: spi0-cs
|
||||
+Info: Allows the (software) CS pins for SPI0 to be changed
|
||||
+Load: dtoverlay=spi0-cs,<param>=<val>
|
||||
+Params: cs0_pin GPIO pin for CS0 (default 8)
|
||||
+ cs1_pin GPIO pin for CS1 (default 7)
|
||||
+
|
||||
+
|
||||
Name: spi0-hw-cs
|
||||
Info: Re-enables hardware CS/CE (chip selects) for SPI0
|
||||
Load: dtoverlay=spi0-hw-cs
|
||||
diff --git a/arch/arm/boot/dts/overlays/spi0-cs-overlay.dts b/arch/arm/boot/dts/overlays/spi0-cs-overlay.dts
|
||||
new file mode 100644
|
||||
index 0000000..7f79029
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/spi0-cs-overlay.dts
|
||||
@@ -0,0 +1,29 @@
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&spi0_cs_pins>;
|
||||
+ frag0: __overlay__ {
|
||||
+ brcm,pins = <8 7>;
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&spi0>;
|
||||
+ frag1: __overlay__ {
|
||||
+ cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||
+ status = "okay";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ cs0_pin = <&frag0>,"brcm,pins:0",
|
||||
+ <&frag1>,"cs-gpios:4";
|
||||
+ cs1_pin = <&frag0>,"brcm,pins:4",
|
||||
+ <&frag1>,"cs-gpios:16";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
From ba1f22a0d2179a0201e764c341d9dbf8f1c27ffe Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 16 Jan 2017 20:58:18 +0000
|
||||
Subject: [PATCH] Revert "bcm2835-i2s: Changes for allowing asymmetric sample
|
||||
formats. (#1783)"
|
||||
|
||||
This reverts commit 4897c5c2f7adb4f77d638121e9959174dff87b9c.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/1799
|
||||
---
|
||||
sound/soc/bcm/bcm2835-i2s.c | 54 ++++++++++++++-------------------------------
|
||||
1 file changed, 16 insertions(+), 38 deletions(-)
|
||||
|
||||
diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c
|
||||
index d2b0801..aedb01f 100644
|
||||
--- a/sound/soc/bcm/bcm2835-i2s.c
|
||||
+++ b/sound/soc/bcm/bcm2835-i2s.c
|
||||
@@ -310,7 +310,6 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
unsigned int sampling_rate = params_rate(params);
|
||||
unsigned int data_length, data_delay, bclk_ratio;
|
||||
unsigned int ch1pos, ch2pos, mode, format;
|
||||
- unsigned int previous_ftxp, previous_frxp;
|
||||
unsigned int mash = BCM2835_CLK_MASH_1;
|
||||
unsigned int divi, divf, target_frequency;
|
||||
int clk_src = -1;
|
||||
@@ -321,7 +320,6 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
bool frame_master = (master == SND_SOC_DAIFMT_CBS_CFS
|
||||
|| master == SND_SOC_DAIFMT_CBM_CFS);
|
||||
uint32_t csreg;
|
||||
- bool packed;
|
||||
|
||||
/*
|
||||
* If a stream is already enabled,
|
||||
@@ -467,46 +465,26 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
- /* Set the format for the matching stream direction. */
|
||||
- switch (substream->stream) {
|
||||
- case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
- regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
|
||||
- break;
|
||||
- case SNDRV_PCM_STREAM_CAPTURE:
|
||||
- regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
|
||||
- break;
|
||||
- default:
|
||||
- return -EINVAL;
|
||||
- }
|
||||
+ /*
|
||||
+ * Set format for both streams.
|
||||
+ * We cannot set another frame length
|
||||
+ * (and therefore word length) anyway,
|
||||
+ * so the format will be the same.
|
||||
+ */
|
||||
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_RXC_A_REG, format);
|
||||
+ regmap_write(dev->i2s_regmap, BCM2835_I2S_TXC_A_REG, format);
|
||||
|
||||
/* Setup the I2S mode */
|
||||
- /* Keep existing FTXP and FRXP values. */
|
||||
- regmap_read(dev->i2s_regmap, BCM2835_I2S_MODE_A_REG, &mode);
|
||||
-
|
||||
- previous_ftxp = mode & BCM2835_I2S_FTXP;
|
||||
- previous_frxp = mode & BCM2835_I2S_FRXP;
|
||||
-
|
||||
mode = 0;
|
||||
|
||||
- /*
|
||||
- * Retain the frame packed mode (2 channels per 32 bit word)
|
||||
- * of the other direction stream intact. The formats of each
|
||||
- * direction can be different as long as the frame length is
|
||||
- * shared for both.
|
||||
- */
|
||||
- packed = data_length <= 16;
|
||||
-
|
||||
- switch (substream->stream) {
|
||||
- case SNDRV_PCM_STREAM_PLAYBACK:
|
||||
- mode |= previous_frxp;
|
||||
- mode |= packed ? BCM2835_I2S_FTXP : 0;
|
||||
- break;
|
||||
- case SNDRV_PCM_STREAM_CAPTURE:
|
||||
- mode |= previous_ftxp;
|
||||
- mode |= packed ? BCM2835_I2S_FRXP : 0;
|
||||
- break;
|
||||
- default:
|
||||
- return -EINVAL;
|
||||
+ if (data_length <= 16) {
|
||||
+ /*
|
||||
+ * Use frame packed mode (2 channels per 32 bit word)
|
||||
+ * We cannot set another frame length in the second stream
|
||||
+ * (and therefore word length) anyway,
|
||||
+ * so the format will be the same.
|
||||
+ */
|
||||
+ mode |= BCM2835_I2S_FTXP | BCM2835_I2S_FRXP;
|
||||
}
|
||||
|
||||
mode |= BCM2835_I2S_FLEN(bclk_ratio - 1);
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
From ab03c5487ebcb3f7a87609792d7f0888c2655657 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 17 Jan 2017 11:34:58 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Enable UART0 on CM3
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2710-rpi-cm3.dts | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
index 98e6f92..7ceb16b 100644
|
||||
--- a/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
+++ b/arch/arm/boot/dts/bcm2710-rpi-cm3.dts
|
||||
@@ -7,6 +7,10 @@
|
||||
model = "Raspberry Pi Compute Module 3";
|
||||
};
|
||||
|
||||
+&uart0 {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
&gpio {
|
||||
sdhost_pins: sdhost_pins {
|
||||
brcm,pins = <48 49 50 51 52 53>;
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
From 3a1a399aeeea62610498b5a54d6e28a9c8e4df3f Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 17 Jan 2017 14:39:39 +0000
|
||||
Subject: [PATCH] config: Add CONFIG_MD_M25P80 and CONFIG_MD_SPI_NOR
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/1781
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 2 ++
|
||||
arch/arm/configs/bcmrpi_defconfig | 2 ++
|
||||
2 files changed, 4 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 0d07eed..1085058 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -407,7 +407,9 @@ CONFIG_DMA_CMA=y
|
||||
CONFIG_CMA_SIZE_MBYTES=5
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
+CONFIG_MTD_M25P80=m
|
||||
CONFIG_MTD_NAND=m
|
||||
+CONFIG_MTD_SPI_NOR=m
|
||||
CONFIG_MTD_UBI=m
|
||||
CONFIG_OF_CONFIGFS=y
|
||||
CONFIG_ZRAM=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 51640cb..ca52c36 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -400,7 +400,9 @@ CONFIG_DMA_CMA=y
|
||||
CONFIG_CMA_SIZE_MBYTES=5
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
+CONFIG_MTD_M25P80=m
|
||||
CONFIG_MTD_NAND=m
|
||||
+CONFIG_MTD_SPI_NOR=m
|
||||
CONFIG_MTD_UBI=m
|
||||
CONFIG_OF_CONFIGFS=y
|
||||
CONFIG_ZRAM=m
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
From f0f29d36c24d4dfa0a7197b83b2fb9ccec147421 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <pelwell@users.noreply.github.com>
|
||||
Date: Thu, 19 Jan 2017 16:44:43 +0000
|
||||
Subject: [PATCH] config: More USB config options for bcm2709_defconfig (#1805)
|
||||
|
||||
Bring bcm2709_defconfig up to the level of bcmrpi_defconfig with
|
||||
respect to USB support. This is prompted by the introduction of CM3,
|
||||
which makes gadget mode on 2709/2710 a useful option.
|
||||
|
||||
Note that the DWC2 driver is not loaded by default and must be enabled
|
||||
using a DT overlay or custom .dtb.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 1085058..19daca4 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -969,6 +969,7 @@ CONFIG_USB_MICROTEK=m
|
||||
CONFIG_USBIP_CORE=m
|
||||
CONFIG_USBIP_VHCI_HCD=m
|
||||
CONFIG_USBIP_HOST=m
|
||||
+CONFIG_USB_DWC2=m
|
||||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
CONFIG_USB_SERIAL_AIRCABLE=m
|
||||
@@ -1042,6 +1043,20 @@ CONFIG_USB_SPEEDTOUCH=m
|
||||
CONFIG_USB_CXACRU=m
|
||||
CONFIG_USB_UEAGLEATM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
+CONFIG_USB_GADGET=m
|
||||
+CONFIG_USB_ZERO=m
|
||||
+CONFIG_USB_AUDIO=m
|
||||
+CONFIG_USB_ETH=m
|
||||
+CONFIG_USB_GADGETFS=m
|
||||
+CONFIG_USB_MASS_STORAGE=m
|
||||
+CONFIG_USB_G_SERIAL=m
|
||||
+CONFIG_USB_MIDI_GADGET=m
|
||||
+CONFIG_USB_G_PRINTER=m
|
||||
+CONFIG_USB_CDC_COMPOSITE=m
|
||||
+CONFIG_USB_G_ACM_MS=m
|
||||
+CONFIG_USB_G_MULTI=m
|
||||
+CONFIG_USB_G_HID=m
|
||||
+CONFIG_USB_G_WEBCAM=m
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BLOCK_MINORS=32
|
||||
CONFIG_MMC_BCM2835=y
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From 82f7e67564d89bba063b6b2e1cafee871aa22aaf Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 23 Jan 2017 17:36:50 +0000
|
||||
Subject: [PATCH] BCM270X_DT: Add reference to audio_pins to CM dtb
|
||||
|
||||
The CM1 dtb contains an empty audio_pins node, but no reference to it.
|
||||
Adding the usual pinctrl reference from the audio node enables the
|
||||
audremap overlay (and others) to easily turn on audio.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/bcm2708-rpi-cm.dtsi | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi b/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
|
||||
index 0a3a962..ba0f316 100644
|
||||
--- a/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-cm.dtsi
|
||||
@@ -36,6 +36,11 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
+&audio {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&audio_pins>;
|
||||
+};
|
||||
+
|
||||
/ {
|
||||
__overrides__ {
|
||||
core_freq = <&clk_core>,"clock-frequency:0";
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,291 @@
|
|||
From f6a9afad8ed6521991c138caf7f20fd5222c2a5a Mon Sep 17 00:00:00 2001
|
||||
From: Scott Ellis <scott@jumpnowtek.com>
|
||||
Date: Fri, 27 Jan 2017 06:42:42 -0500
|
||||
Subject: [PATCH] Add overlay for mcp3008 adc (#1818)
|
||||
|
||||
Some example usage:
|
||||
|
||||
SPI0.0
|
||||
dtparam=spi=on
|
||||
dtoverlay=mcp3008:spi0-0-present
|
||||
|
||||
SPI0.1
|
||||
dtparam=spi=on
|
||||
dtoverlay=mcp3008:spi0-1-present
|
||||
|
||||
SPI0.0 and SPI0.1
|
||||
dtparam=spi=on
|
||||
dtoverlay=mcp3008:spi0-0-present,spi0-1-present
|
||||
|
||||
SPI1.0
|
||||
dtparam=spi=on
|
||||
dtoverlay=spi1-1cs
|
||||
dtoverlay=mcp3008:spi1-0-present
|
||||
|
||||
SPI1.2
|
||||
dtparam=spi=on
|
||||
dtoverlay=spi1-1cs:cs0_pin=16
|
||||
dtoverlay=mcp3008:spi1-0-present
|
||||
|
||||
SPI1.0 and SPI1.1
|
||||
dtoverlay=spi1-2cs
|
||||
dtoverlay=mcp3008:spi1-0-present,spi1-1-present
|
||||
|
||||
Changing the speed
|
||||
|
||||
SPI0.0
|
||||
dtparam=spi=on
|
||||
dtoverlay=mcp3008:spi0-0-present,spi0-0-speed=2000000
|
||||
---
|
||||
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||||
arch/arm/boot/dts/overlays/README | 9 ++
|
||||
arch/arm/boot/dts/overlays/mcp3008-overlay.dts | 205 +++++++++++++++++++++++++
|
||||
3 files changed, 215 insertions(+)
|
||||
create mode 100755 arch/arm/boot/dts/overlays/mcp3008-overlay.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
|
||||
index 72f2d90a..b13e340 100644
|
||||
--- a/arch/arm/boot/dts/overlays/Makefile
|
||||
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||||
@@ -57,6 +57,7 @@ dtbo-$(RPI_DT_OVERLAYS) += mcp23017.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mcp23s17.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mcp2515-can0.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mcp2515-can1.dtbo
|
||||
+dtbo-$(RPI_DT_OVERLAYS) += mcp3008.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mmc.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += mz61581.dtbo
|
||||
dtbo-$(RPI_DT_OVERLAYS) += pi3-act-led.dtbo
|
||||
diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README
|
||||
index 7f4bd29..72601f8 100644
|
||||
--- a/arch/arm/boot/dts/overlays/README
|
||||
+++ b/arch/arm/boot/dts/overlays/README
|
||||
@@ -736,6 +736,15 @@ Params: oscillator Clock frequency for the CAN controller (Hz)
|
||||
interrupt GPIO for interrupt signal
|
||||
|
||||
|
||||
+Name: mcp3008
|
||||
+Info: Configures MCP3008 A/D converters
|
||||
+ For devices on spi1 or spi2, the interfaces should be enabled
|
||||
+ with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
|
||||
+Load: dtoverlay=mcp3008,<param>[=<val>]
|
||||
+Params: spi<n>-<m>-present boolean, configure device at spi<n>, cs<m>
|
||||
+ spi<n>-<m>-speed integer, set the spi bus speed for this device
|
||||
+
|
||||
+
|
||||
Name: mmc
|
||||
Info: Selects the bcm2835-mmc SD/MMC driver, optionally with overclock
|
||||
Load: dtoverlay=mmc,<param>=<val>
|
||||
diff --git a/arch/arm/boot/dts/overlays/mcp3008-overlay.dts b/arch/arm/boot/dts/overlays/mcp3008-overlay.dts
|
||||
new file mode 100755
|
||||
index 0000000..06bf426
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/overlays/mcp3008-overlay.dts
|
||||
@@ -0,0 +1,205 @@
|
||||
+/*
|
||||
+ * Device tree overlay for Microchip mcp3008 10-Bit A/D Converters
|
||||
+ */
|
||||
+
|
||||
+/dts-v1/;
|
||||
+/plugin/;
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";
|
||||
+
|
||||
+ fragment@0 {
|
||||
+ target = <&spidev0>;
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@1 {
|
||||
+ target = <&spidev1>;
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@2 {
|
||||
+ target-path = "spi1/spidev@0";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@3 {
|
||||
+ target-path = "spi1/spidev@1";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@4 {
|
||||
+ target-path = "spi1/spidev@2";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@5 {
|
||||
+ target-path = "spi2/spidev@0";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@6 {
|
||||
+ target-path = "spi2/spidev@1";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@7 {
|
||||
+ target-path = "spi2/spidev@2";
|
||||
+ __dormant__ {
|
||||
+ status = "disabled";
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@8 {
|
||||
+ target = <&spi0>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_00: mcp3008@0 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <0>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@9 {
|
||||
+ target = <&spi0>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_01: mcp3008@1 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <1>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@10 {
|
||||
+ target = <&spi1>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_10: mcp3008@0 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <0>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@11 {
|
||||
+ target = <&spi1>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_11: mcp3008@1 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <1>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@12 {
|
||||
+ target = <&spi1>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_12: mcp3008@2 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <2>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@13 {
|
||||
+ target = <&spi2>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_20: mcp3008@0 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <0>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@14 {
|
||||
+ target = <&spi2>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_21: mcp3008@1 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <1>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ fragment@15 {
|
||||
+ target = <&spi2>;
|
||||
+ __dormant__ {
|
||||
+ status = "okay";
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+
|
||||
+ mcp3008_22: mcp3008@2 {
|
||||
+ compatible = "mcp3008";
|
||||
+ reg = <2>;
|
||||
+ spi-max-frequency = <1600000>;
|
||||
+ };
|
||||
+ };
|
||||
+ };
|
||||
+
|
||||
+ __overrides__ {
|
||||
+ spi0-0-present = <0>, "+0+8";
|
||||
+ spi0-1-present = <0>, "+1+9";
|
||||
+ spi1-0-present = <0>, "+2+10";
|
||||
+ spi1-1-present = <0>, "+3+11";
|
||||
+ spi1-2-present = <0>, "+4+12";
|
||||
+ spi2-0-present = <0>, "+5+13";
|
||||
+ spi2-1-present = <0>, "+6+14";
|
||||
+ spi2-2-present = <0>, "+7+15";
|
||||
+ spi0-0-speed = <&mcp3008_00>, "spi-max-frequency:0";
|
||||
+ spi0-1-speed = <&mcp3008_01>, "spi-max-frequency:0";
|
||||
+ spi1-0-speed = <&mcp3008_10>, "spi-max-frequency:0";
|
||||
+ spi1-1-speed = <&mcp3008_11>, "spi-max-frequency:0";
|
||||
+ spi1-2-speed = <&mcp3008_12>, "spi-max-frequency:0";
|
||||
+ spi2-0-speed = <&mcp3008_20>, "spi-max-frequency:0";
|
||||
+ spi2-1-speed = <&mcp3008_21>, "spi-max-frequency:0";
|
||||
+ spi2-2-speed = <&mcp3008_22>, "spi-max-frequency:0";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
From 1dab2d7f80fa955ff493785033008b2c17f7cc53 Mon Sep 17 00:00:00 2001
|
||||
From: Ruslan Ruslichenko <rruslich@cisco.com>
|
||||
Date: Tue, 17 Jan 2017 16:13:52 +0200
|
||||
Subject: [PATCH] x86/ioapic: Restore IO-APIC irq_chip retrigger callback
|
||||
|
||||
commit 020eb3daaba2857b32c4cf4c82f503d6a00a67de upstream.
|
||||
|
||||
commit d32932d02e18 removed the irq_retrigger callback from the IO-APIC
|
||||
chip and did not add it to the new IO-APIC-IR irq chip.
|
||||
|
||||
Unfortunately the software resend fallback is not enabled on X86, so edge
|
||||
interrupts which are received during the lazy disabled state of the
|
||||
interrupt line are not retriggered and therefor lost.
|
||||
|
||||
Restore the callbacks.
|
||||
|
||||
[ tglx: Massaged changelog ]
|
||||
|
||||
Fixes: d32932d02e18 ("x86/irq: Convert IOAPIC to use hierarchical irqdomain interfaces")
|
||||
Signed-off-by: Ruslan Ruslichenko <rruslich@cisco.com>
|
||||
Cc: xe-linux-external@cisco.com
|
||||
Link: http://lkml.kernel.org/r/1484662432-13580-1-git-send-email-rruslich@cisco.com
|
||||
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
arch/x86/kernel/apic/io_apic.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index 8ca533b..1e5d2f0 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = {
|
||||
.irq_ack = irq_chip_ack_parent,
|
||||
.irq_eoi = ioapic_ack_level,
|
||||
.irq_set_affinity = ioapic_set_affinity,
|
||||
+ .irq_retrigger = irq_chip_retrigger_hierarchy,
|
||||
.flags = IRQCHIP_SKIP_SET_WAKE,
|
||||
};
|
||||
|
||||
@@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = {
|
||||
.irq_ack = irq_chip_ack_parent,
|
||||
.irq_eoi = ioapic_ir_ack_level,
|
||||
.irq_set_affinity = ioapic_set_affinity,
|
||||
+ .irq_retrigger = irq_chip_retrigger_hierarchy,
|
||||
.flags = IRQCHIP_SKIP_SET_WAKE,
|
||||
};
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
From 7342071952322e209c40dd3474c020c673814ada Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 27 Jan 2017 18:49:30 +0000
|
||||
Subject: [PATCH] config: add slcan kernel module
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/1819
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 19daca4..783d2c2 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -358,6 +358,7 @@ CONFIG_BAYCOM_SER_HDX=m
|
||||
CONFIG_YAM=m
|
||||
CONFIG_CAN=m
|
||||
CONFIG_CAN_VCAN=m
|
||||
+CONFIG_CAN_SLCAN=m
|
||||
CONFIG_CAN_MCP251X=m
|
||||
CONFIG_IRDA=m
|
||||
CONFIG_IRLAN=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index ca52c36..be7bf41 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -351,6 +351,7 @@ CONFIG_BAYCOM_SER_HDX=m
|
||||
CONFIG_YAM=m
|
||||
CONFIG_CAN=m
|
||||
CONFIG_CAN_VCAN=m
|
||||
+CONFIG_CAN_SLCAN=m
|
||||
CONFIG_CAN_MCP251X=m
|
||||
CONFIG_IRDA=m
|
||||
CONFIG_IRLAN=m
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
From 5aecf0a83cc2271427aad4f1a313a3c01e581c03 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Thu, 2 Feb 2017 09:42:18 -0800
|
||||
Subject: [PATCH] drm/vc4: Fix sending of page flip completion events in FKMS
|
||||
mode.
|
||||
|
||||
In the rewrite of vc4_crtc.c for fkms, I dropped the part of the
|
||||
CRTC's atomic flush handler that moved the completion event from the
|
||||
proposed atomic state change to the CRTC's current state. That meant
|
||||
that when full screen pageflipping happened (glxgears -fullscreen in
|
||||
X, compton, por weston), the app would end up blocked firever waiting
|
||||
to draw its next frame.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_firmware_kms.c | 15 +++++++++++++++
|
||||
1 file changed, 15 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_firmware_kms.c b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
|
||||
index a1b6511..8f74382 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_firmware_kms.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_firmware_kms.c
|
||||
@@ -312,6 +312,21 @@ static int vc4_crtc_atomic_check(struct drm_crtc *crtc,
|
||||
static void vc4_crtc_atomic_flush(struct drm_crtc *crtc,
|
||||
struct drm_crtc_state *old_state)
|
||||
{
|
||||
+ struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
|
||||
+ struct drm_device *dev = crtc->dev;
|
||||
+
|
||||
+ if (crtc->state->event) {
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ crtc->state->event->pipe = drm_crtc_index(crtc);
|
||||
+
|
||||
+ WARN_ON(drm_crtc_vblank_get(crtc) != 0);
|
||||
+
|
||||
+ spin_lock_irqsave(&dev->event_lock, flags);
|
||||
+ vc4_crtc->event = crtc->state->event;
|
||||
+ crtc->state->event = NULL;
|
||||
+ spin_unlock_irqrestore(&dev->event_lock, flags);
|
||||
+ }
|
||||
}
|
||||
|
||||
static void vc4_crtc_handle_page_flip(struct vc4_crtc *vc4_crtc)
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
From 514dc56068291b52b6f8bb2fe29d8755d6126283 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Date: Tue, 22 Nov 2016 12:45:28 -0800
|
||||
Subject: [PATCH] clk: bcm2835: Fix ->fixed_divider of pllh_aux
|
||||
|
||||
There is no fixed divider on pllh_aux.
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
(cherry picked from commit f2a46926aba1f0c33944901d2420a6a887455ddc)
|
||||
---
|
||||
drivers/clk/bcm/clk-bcm2835.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index e9e8c25..3fbd2e8 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1657,7 +1657,7 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLH_AUX,
|
||||
.load_mask = CM_PLLH_LOADAUX,
|
||||
.hold_mask = 0,
|
||||
- .fixed_divider = 10),
|
||||
+ .fixed_divider = 1),
|
||||
[BCM2835_PLLH_PIX] = REGISTER_PLL_DIV(
|
||||
.name = "pllh_pix",
|
||||
.source_pll = "pllh",
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,129 @@
|
|||
From e75f021850a698fec611538e8ff293c22a4604f5 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Date: Thu, 1 Dec 2016 22:00:19 +0100
|
||||
Subject: [PATCH] clk: bcm: Support rate change propagation on bcm2835 clocks
|
||||
|
||||
Some peripheral clocks, like the VEC (Video EnCoder) clock need to be set
|
||||
to a precise rate (in our case 108MHz). With the current implementation,
|
||||
where peripheral clocks are not allowed to forward rate change requests
|
||||
to their parents, it is impossible to match this requirement unless the
|
||||
bootloader has configured things correctly, or a specific rate has been
|
||||
assigned through the DT (with the assigned-clk-rates property).
|
||||
|
||||
Add a new field to struct bcm2835_clock_data to specify which parent
|
||||
clocks accept rate change propagation, and support set rate propagation
|
||||
in bcm2835_clock_determine_rate().
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
(cherry picked from commit 155e8b3b0ee320ae866b97dd31eba8a1f080a772)
|
||||
---
|
||||
drivers/clk/bcm/clk-bcm2835.c | 67 ++++++++++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 63 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 3fbd2e8..5f0e2f3 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -457,6 +457,9 @@ struct bcm2835_clock_data {
|
||||
const char *const *parents;
|
||||
int num_mux_parents;
|
||||
|
||||
+ /* Bitmap encoding which parents accept rate change propagation. */
|
||||
+ unsigned int set_rate_parent;
|
||||
+
|
||||
u32 ctl_reg;
|
||||
u32 div_reg;
|
||||
|
||||
@@ -1055,10 +1058,60 @@ bcm2835_clk_is_pllc(struct clk_hw *hw)
|
||||
return strncmp(clk_hw_get_name(hw), "pllc", 4) == 0;
|
||||
}
|
||||
|
||||
+static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw,
|
||||
+ int parent_idx,
|
||||
+ unsigned long rate,
|
||||
+ u32 *div,
|
||||
+ unsigned long *prate)
|
||||
+{
|
||||
+ struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw);
|
||||
+ struct bcm2835_cprman *cprman = clock->cprman;
|
||||
+ const struct bcm2835_clock_data *data = clock->data;
|
||||
+ unsigned long best_rate;
|
||||
+ u32 curdiv, mindiv, maxdiv;
|
||||
+ struct clk_hw *parent;
|
||||
+
|
||||
+ parent = clk_hw_get_parent_by_index(hw, parent_idx);
|
||||
+
|
||||
+ if (!(BIT(parent_idx) & data->set_rate_parent)) {
|
||||
+ *prate = clk_hw_get_rate(parent);
|
||||
+ *div = bcm2835_clock_choose_div(hw, rate, *prate, true);
|
||||
+
|
||||
+ return bcm2835_clock_rate_from_divisor(clock, *prate,
|
||||
+ *div);
|
||||
+ }
|
||||
+
|
||||
+ if (data->frac_bits)
|
||||
+ dev_warn(cprman->dev,
|
||||
+ "frac bits are not used when propagating rate change");
|
||||
+
|
||||
+ /* clamp to min divider of 2 if we're dealing with a mash clock */
|
||||
+ mindiv = data->is_mash_clock ? 2 : 1;
|
||||
+ maxdiv = BIT(data->int_bits) - 1;
|
||||
+
|
||||
+ /* TODO: Be smart, and only test a subset of the available divisors. */
|
||||
+ for (curdiv = mindiv; curdiv <= maxdiv; curdiv++) {
|
||||
+ unsigned long tmp_rate;
|
||||
+
|
||||
+ tmp_rate = clk_hw_round_rate(parent, rate * curdiv);
|
||||
+ tmp_rate /= curdiv;
|
||||
+ if (curdiv == mindiv ||
|
||||
+ (tmp_rate > best_rate && tmp_rate <= rate))
|
||||
+ best_rate = tmp_rate;
|
||||
+
|
||||
+ if (best_rate == rate)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ *div = curdiv << CM_DIV_FRAC_BITS;
|
||||
+ *prate = curdiv * best_rate;
|
||||
+
|
||||
+ return best_rate;
|
||||
+}
|
||||
+
|
||||
static int bcm2835_clock_determine_rate(struct clk_hw *hw,
|
||||
struct clk_rate_request *req)
|
||||
{
|
||||
- struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw);
|
||||
struct clk_hw *parent, *best_parent = NULL;
|
||||
bool current_parent_is_pllc;
|
||||
unsigned long rate, best_rate = 0;
|
||||
@@ -1086,9 +1139,8 @@ static int bcm2835_clock_determine_rate(struct clk_hw *hw,
|
||||
if (bcm2835_clk_is_pllc(parent) && !current_parent_is_pllc)
|
||||
continue;
|
||||
|
||||
- prate = clk_hw_get_rate(parent);
|
||||
- div = bcm2835_clock_choose_div(hw, req->rate, prate, true);
|
||||
- rate = bcm2835_clock_rate_from_divisor(clock, prate, div);
|
||||
+ rate = bcm2835_clock_choose_div_and_prate(hw, i, req->rate,
|
||||
+ &div, &prate);
|
||||
if (rate > best_rate && rate <= req->rate) {
|
||||
best_parent = parent;
|
||||
best_prate = prate;
|
||||
@@ -1308,6 +1360,13 @@ static struct clk *bcm2835_register_clock(struct bcm2835_cprman *cprman,
|
||||
if ((cprman_read(cprman, data->ctl_reg) & CM_ENABLE) == 0)
|
||||
init.flags &= ~CLK_IS_CRITICAL;
|
||||
|
||||
+ /*
|
||||
+ * Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate
|
||||
+ * rate changes on at least of the parents.
|
||||
+ */
|
||||
+ if (data->set_rate_parent)
|
||||
+ init.flags |= CLK_SET_RATE_PARENT;
|
||||
+
|
||||
if (data->is_vpu_clock) {
|
||||
init.ops = &bcm2835_vpu_clock_clk_ops;
|
||||
} else {
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From 5c301af484ece3e61146572167bbe9418d536616 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Date: Thu, 1 Dec 2016 22:00:20 +0100
|
||||
Subject: [PATCH] clk: bcm: Allow rate change propagation to PLLH_AUX on VEC
|
||||
clock
|
||||
|
||||
The VEC clock requires needs to be set at exactly 108MHz. Allow rate
|
||||
change propagation on PLLH_AUX to match this requirement wihtout
|
||||
impacting other IPs (PLLH is currently only used by the HDMI encoder,
|
||||
which cannot be enabled when the VEC encoder is enabled).
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
(cherry picked from commit d86d46af84855403c00018be1c3e7bc190f2a6cd)
|
||||
---
|
||||
drivers/clk/bcm/clk-bcm2835.c | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 5f0e2f3..d023e4a 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1920,7 +1920,12 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.ctl_reg = CM_VECCTL,
|
||||
.div_reg = CM_VECDIV,
|
||||
.int_bits = 4,
|
||||
- .frac_bits = 0),
|
||||
+ .frac_bits = 0,
|
||||
+ /*
|
||||
+ * Allow rate change propagation only on PLLH_AUX which is
|
||||
+ * assigned index 7 in the parent array.
|
||||
+ */
|
||||
+ .set_rate_parent = BIT(7)),
|
||||
|
||||
/* dsi clocks */
|
||||
[BCM2835_CLOCK_DSI0E] = REGISTER_PER_CLK(
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
From d4be0d5751c1bfe067a07a4ec95d7575ec03ab83 Mon Sep 17 00:00:00 2001
|
||||
From: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Date: Mon, 12 Dec 2016 09:00:53 +0100
|
||||
Subject: [PATCH] clk: bcm: Fix 'maybe-uninitialized' warning in
|
||||
bcm2835_clock_choose_div_and_prate()
|
||||
|
||||
best_rate is reported as potentially uninitialized by gcc.
|
||||
|
||||
Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
|
||||
Fixes: 155e8b3b0ee3 ("clk: bcm: Support rate change propagation on bcm2835 clocks")
|
||||
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
|
||||
Reviewed-by: Eric Anholt <eric@anholt.net>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
(cherry picked from commit 2aab7a2055a1705c9e30920d95a596226999eb21)
|
||||
---
|
||||
drivers/clk/bcm/clk-bcm2835.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index d023e4a..89dad97 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1067,7 +1067,7 @@ static unsigned long bcm2835_clock_choose_div_and_prate(struct clk_hw *hw,
|
||||
struct bcm2835_clock *clock = bcm2835_clock_from_hw(hw);
|
||||
struct bcm2835_cprman *cprman = clock->cprman;
|
||||
const struct bcm2835_clock_data *data = clock->data;
|
||||
- unsigned long best_rate;
|
||||
+ unsigned long best_rate = 0;
|
||||
u32 curdiv, mindiv, maxdiv;
|
||||
struct clk_hw *parent;
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,177 @@
|
|||
From c08886564938df6796a7d98495cf5cc3f7a09337 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Wed, 18 Jan 2017 07:31:55 +1100
|
||||
Subject: [PATCH] clk: bcm2835: Don't rate change PLLs on behalf of DSI PLL
|
||||
dividers (v2).
|
||||
|
||||
Our core PLLs are intended to be configured once and left alone. With
|
||||
the SET_RATE_PARENT, asking to set the PLLD_DSI1 clock rate would
|
||||
change PLLD just to get closer to the requested DSI clock, thus
|
||||
changing PLLD_PER, the UART and ethernet PHY clock rates downstream of
|
||||
it, and breaking ethernet.
|
||||
|
||||
We *do* want PLLH to change so that PLLH_AUX can be exactly the value
|
||||
we want, though. Thus, we need to have a per-divider policy of
|
||||
whether to pass rate changes up.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
|
||||
(cherry picked from commit 55486091bd1e1c5ed28c43c0d6b3392468a9adb5)
|
||||
---
|
||||
drivers/clk/bcm/clk-bcm2835.c | 42 ++++++++++++++++++++++++++++--------------
|
||||
1 file changed, 28 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 89dad97..54cb4e1 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -449,6 +449,7 @@ struct bcm2835_pll_divider_data {
|
||||
u32 load_mask;
|
||||
u32 hold_mask;
|
||||
u32 fixed_divider;
|
||||
+ u32 flags;
|
||||
};
|
||||
|
||||
struct bcm2835_clock_data {
|
||||
@@ -1286,7 +1287,7 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman,
|
||||
init.num_parents = 1;
|
||||
init.name = divider_name;
|
||||
init.ops = &bcm2835_pll_divider_clk_ops;
|
||||
- init.flags = CLK_IGNORE_UNUSED;
|
||||
+ init.flags = data->flags | CLK_IGNORE_UNUSED;
|
||||
|
||||
divider = devm_kzalloc(cprman->dev, sizeof(*divider), GFP_KERNEL);
|
||||
if (!divider)
|
||||
@@ -1525,7 +1526,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLA_CORE,
|
||||
.load_mask = CM_PLLA_LOADCORE,
|
||||
.hold_mask = CM_PLLA_HOLDCORE,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLA_PER] = REGISTER_PLL_DIV(
|
||||
.name = "plla_per",
|
||||
.source_pll = "plla",
|
||||
@@ -1533,7 +1535,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLA_PER,
|
||||
.load_mask = CM_PLLA_LOADPER,
|
||||
.hold_mask = CM_PLLA_HOLDPER,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLA_DSI0] = REGISTER_PLL_DIV(
|
||||
.name = "plla_dsi0",
|
||||
.source_pll = "plla",
|
||||
@@ -1549,7 +1552,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLA_CCP2,
|
||||
.load_mask = CM_PLLA_LOADCCP2,
|
||||
.hold_mask = CM_PLLA_HOLDCCP2,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
|
||||
/* PLLB is used for the ARM's clock. */
|
||||
[BCM2835_PLLB] = REGISTER_PLL(
|
||||
@@ -1573,7 +1577,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLB_ARM,
|
||||
.load_mask = CM_PLLB_LOADARM,
|
||||
.hold_mask = CM_PLLB_HOLDARM,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
|
||||
/*
|
||||
* PLLC is the core PLL, used to drive the core VPU clock.
|
||||
@@ -1602,7 +1607,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLC_CORE0,
|
||||
.load_mask = CM_PLLC_LOADCORE0,
|
||||
.hold_mask = CM_PLLC_HOLDCORE0,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLC_CORE1] = REGISTER_PLL_DIV(
|
||||
.name = "pllc_core1",
|
||||
.source_pll = "pllc",
|
||||
@@ -1610,7 +1616,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLC_CORE1,
|
||||
.load_mask = CM_PLLC_LOADCORE1,
|
||||
.hold_mask = CM_PLLC_HOLDCORE1,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLC_CORE2] = REGISTER_PLL_DIV(
|
||||
.name = "pllc_core2",
|
||||
.source_pll = "pllc",
|
||||
@@ -1618,7 +1625,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLC_CORE2,
|
||||
.load_mask = CM_PLLC_LOADCORE2,
|
||||
.hold_mask = CM_PLLC_HOLDCORE2,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLC_PER] = REGISTER_PLL_DIV(
|
||||
.name = "pllc_per",
|
||||
.source_pll = "pllc",
|
||||
@@ -1626,7 +1634,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLC_PER,
|
||||
.load_mask = CM_PLLC_LOADPER,
|
||||
.hold_mask = CM_PLLC_HOLDPER,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
|
||||
/*
|
||||
* PLLD is the display PLL, used to drive DSI display panels.
|
||||
@@ -1655,7 +1664,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLD_CORE,
|
||||
.load_mask = CM_PLLD_LOADCORE,
|
||||
.hold_mask = CM_PLLD_HOLDCORE,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLD_PER] = REGISTER_PLL_DIV(
|
||||
.name = "plld_per",
|
||||
.source_pll = "plld",
|
||||
@@ -1663,7 +1673,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLD_PER,
|
||||
.load_mask = CM_PLLD_LOADPER,
|
||||
.hold_mask = CM_PLLD_HOLDPER,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLD_DSI0] = REGISTER_PLL_DIV(
|
||||
.name = "plld_dsi0",
|
||||
.source_pll = "plld",
|
||||
@@ -1708,7 +1719,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLH_RCAL,
|
||||
.load_mask = CM_PLLH_LOADRCAL,
|
||||
.hold_mask = 0,
|
||||
- .fixed_divider = 10),
|
||||
+ .fixed_divider = 10,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLH_AUX] = REGISTER_PLL_DIV(
|
||||
.name = "pllh_aux",
|
||||
.source_pll = "pllh",
|
||||
@@ -1716,7 +1728,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLH_AUX,
|
||||
.load_mask = CM_PLLH_LOADAUX,
|
||||
.hold_mask = 0,
|
||||
- .fixed_divider = 1),
|
||||
+ .fixed_divider = 1,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
[BCM2835_PLLH_PIX] = REGISTER_PLL_DIV(
|
||||
.name = "pllh_pix",
|
||||
.source_pll = "pllh",
|
||||
@@ -1724,7 +1737,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
.a2w_reg = A2W_PLLH_PIX,
|
||||
.load_mask = CM_PLLH_LOADPIX,
|
||||
.hold_mask = 0,
|
||||
- .fixed_divider = 10),
|
||||
+ .fixed_divider = 10,
|
||||
+ .flags = CLK_SET_RATE_PARENT),
|
||||
|
||||
/* the clocks */
|
||||
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
From cc3ee0379f3b2d605234098568c8b4b7b33254ae Mon Sep 17 00:00:00 2001
|
||||
From: JamesH65 <JamesH65@users.noreply.github.com>
|
||||
Date: Mon, 6 Feb 2017 15:24:47 +0000
|
||||
Subject: [PATCH] gpio_mem: Remove unnecessary dev_info output (#1830)
|
||||
|
||||
The open function was spamming syslog every time
|
||||
called, so have removed call completely.
|
||||
---
|
||||
drivers/char/broadcom/bcm2835-gpiomem.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/broadcom/bcm2835-gpiomem.c b/drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
index 911f5b7..f5e7f1b 100644
|
||||
--- a/drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
+++ b/drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
@@ -76,8 +76,6 @@ static int bcm2835_gpiomem_open(struct inode *inode, struct file *file)
|
||||
int dev = iminor(inode);
|
||||
int ret = 0;
|
||||
|
||||
- dev_info(inst->dev, "gpiomem device opened.");
|
||||
-
|
||||
if (dev != DEVICE_MINOR) {
|
||||
dev_err(inst->dev, "Unknown minor device: %d", dev);
|
||||
ret = -ENXIO;
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
From 6b7250b2393653e5d08deed591b78b41a2ee8d43 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Wed, 8 Feb 2017 15:00:54 -0800
|
||||
Subject: [PATCH] drm/vc4: Fulfill user BO creation requests from the kernel BO
|
||||
cache.
|
||||
|
||||
The from_cache flag was actually "the BO is invisible to userspace",
|
||||
so we can repurpose to just zero out a cached BO and return it to
|
||||
userspace.
|
||||
|
||||
Improves wall time for a loop of 5 glsl-algebraic-add-add-1 by
|
||||
-1.44989% +/- 0.862891% (n=28, 1 outlier removed from each that
|
||||
appeared to be other system noise)
|
||||
|
||||
Note that there's an intel-gpu-tools test to check for the proper
|
||||
zeroing behavior here, which we continue to pass.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_bo.c | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
index 56b779c..ce8a5fd 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
@@ -208,22 +208,23 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
|
||||
}
|
||||
|
||||
struct vc4_bo *vc4_bo_create(struct drm_device *dev, size_t unaligned_size,
|
||||
- bool from_cache)
|
||||
+ bool allow_unzeroed)
|
||||
{
|
||||
size_t size = roundup(unaligned_size, PAGE_SIZE);
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
struct drm_gem_cma_object *cma_obj;
|
||||
int pass, ret;
|
||||
+ struct vc4_bo *bo;
|
||||
|
||||
if (size == 0)
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
/* First, try to get a vc4_bo from the kernel BO cache. */
|
||||
- if (from_cache) {
|
||||
- struct vc4_bo *bo = vc4_bo_get_from_cache(dev, size);
|
||||
-
|
||||
- if (bo)
|
||||
- return bo;
|
||||
+ bo = vc4_bo_get_from_cache(dev, size);
|
||||
+ if (bo) {
|
||||
+ if (!allow_unzeroed)
|
||||
+ memset(bo->base.vaddr, 0, bo->base.base.size);
|
||||
+ return bo;
|
||||
}
|
||||
|
||||
/* Otherwise, make a new BO. */
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 73042261439a2d73e4e7b711de55a8a135725739 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Thu, 9 Feb 2017 09:23:34 -0800
|
||||
Subject: [PATCH] drm/vc4: Fix OOPSes from trying to cache a partially
|
||||
constructed BO.
|
||||
|
||||
If a CMA allocation failed, the partially constructed BO would be
|
||||
unreferenced through the normal path, and we might choose to put it in
|
||||
the BO cache. If we then reused it before it expired from the cache,
|
||||
the kernel would OOPS.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
Fixes: c826a6e10644 ("drm/vc4: Add a BO cache.")
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_bo.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_bo.c b/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
index ce8a5fd..d7474dd 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_bo.c
|
||||
@@ -334,6 +334,14 @@ void vc4_free_object(struct drm_gem_object *gem_bo)
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ /* If this object was partially constructed but CMA allocation
|
||||
+ * had failed, just free it.
|
||||
+ */
|
||||
+ if (!bo->base.vaddr) {
|
||||
+ vc4_bo_destroy(bo);
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
cache_list = vc4_get_cache_list_for_size(dev, gem_bo->size);
|
||||
if (!cache_list) {
|
||||
vc4_bo_destroy(bo);
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
From bf4b7e8817115f839241e55add244cf60225e436 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Anholt <eric@anholt.net>
|
||||
Date: Mon, 12 Oct 2015 08:58:08 -0700
|
||||
Subject: [PATCH] drm/vc4: Verify at boot that CMA doesn't cross a 256MB
|
||||
boundary.
|
||||
|
||||
I've seen lots of users cranking CMA up higher, so throw an error if
|
||||
they do.
|
||||
|
||||
Signed-off-by: Eric Anholt <eric@anholt.net>
|
||||
---
|
||||
drivers/base/dma-contiguous.c | 1 +
|
||||
drivers/gpu/drm/vc4/vc4_v3d.c | 18 ++++++++++++++++++
|
||||
mm/cma.c | 2 ++
|
||||
3 files changed, 21 insertions(+)
|
||||
|
||||
diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c
|
||||
index e167a1e1..60f5c25 100644
|
||||
--- a/drivers/base/dma-contiguous.c
|
||||
+++ b/drivers/base/dma-contiguous.c
|
||||
@@ -35,6 +35,7 @@
|
||||
#endif
|
||||
|
||||
struct cma *dma_contiguous_default_area;
|
||||
+EXPORT_SYMBOL(dma_contiguous_default_area);
|
||||
|
||||
/*
|
||||
* Default global CMA area size can be defined in kernel's .config.
|
||||
diff --git a/drivers/gpu/drm/vc4/vc4_v3d.c b/drivers/gpu/drm/vc4/vc4_v3d.c
|
||||
index 7cc346a..1d9e5a6 100644
|
||||
--- a/drivers/gpu/drm/vc4/vc4_v3d.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_v3d.c
|
||||
@@ -16,7 +16,10 @@
|
||||
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
+#include "linux/init.h"
|
||||
+#include "linux/cma.h"
|
||||
#include "linux/component.h"
|
||||
+#include "linux/dma-contiguous.h"
|
||||
#include "linux/pm_runtime.h"
|
||||
#include "vc4_drv.h"
|
||||
#include "vc4_regs.h"
|
||||
@@ -185,8 +188,23 @@ static int vc4_v3d_bind(struct device *dev, struct device *master, void *data)
|
||||
struct drm_device *drm = dev_get_drvdata(master);
|
||||
struct vc4_dev *vc4 = to_vc4_dev(drm);
|
||||
struct vc4_v3d *v3d = NULL;
|
||||
+ struct cma *cma;
|
||||
int ret;
|
||||
|
||||
+ cma = dev_get_cma_area(dev);
|
||||
+ if (!cma)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ if ((cma_get_base(cma) & 0xf0000000) !=
|
||||
+ ((cma_get_base(cma) + cma_get_size(cma) - 1) & 0xf0000000)) {
|
||||
+ DRM_ERROR("V3D requires that the CMA area (0x%08lx - 0x%08lx) "
|
||||
+ "not span a 256MB boundary, or memory corruption "
|
||||
+ "would happen.\n",
|
||||
+ (long)cma_get_base(cma),
|
||||
+ cma_get_base(cma) + cma_get_size(cma));
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
v3d = devm_kzalloc(&pdev->dev, sizeof(*v3d), GFP_KERNEL);
|
||||
if (!v3d)
|
||||
return -ENOMEM;
|
||||
diff --git a/mm/cma.c b/mm/cma.c
|
||||
index bd0e141..efac29b 100644
|
||||
--- a/mm/cma.c
|
||||
+++ b/mm/cma.c
|
||||
@@ -47,11 +47,13 @@ phys_addr_t cma_get_base(const struct cma *cma)
|
||||
{
|
||||
return PFN_PHYS(cma->base_pfn);
|
||||
}
|
||||
+EXPORT_SYMBOL(cma_get_base);
|
||||
|
||||
unsigned long cma_get_size(const struct cma *cma)
|
||||
{
|
||||
return cma->count << PAGE_SHIFT;
|
||||
}
|
||||
+EXPORT_SYMBOL(cma_get_size);
|
||||
|
||||
static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
|
||||
int align_order)
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
From 124370babf0428ec8db2d0ba314105cd9e6ea2c7 Mon Sep 17 00:00:00 2001
|
||||
From: Claggy3 <stephen.maclagan@hotmail.com>
|
||||
Date: Sat, 11 Feb 2017 14:00:30 +0000
|
||||
Subject: [PATCH] Update vfpmodule.c
|
||||
|
||||
Christopher Alexander Tobias Schulze - May 2, 2015, 11:57 a.m.
|
||||
This patch fixes a problem with VFP state save and restore related
|
||||
to exception handling (panic with message "BUG: unsupported FP
|
||||
instruction in kernel mode") present on VFP11 floating point units
|
||||
(as used with ARM1176JZF-S CPUs, e.g. on first generation Raspberry
|
||||
Pi boards). This patch was developed and discussed on
|
||||
|
||||
https://github.com/raspberrypi/linux/issues/859
|
||||
|
||||
A precondition to see the crashes is that floating point exception
|
||||
traps are enabled. In this case, the VFP11 might determine that a FPU
|
||||
operation needs to trap at a point in time when it is not possible to
|
||||
signal this to the ARM11 core any more. The VFP11 will then set the
|
||||
FPEXC.EX bit and store the trapped opcode in FPINST. (In some cases,
|
||||
a second opcode might have been accepted by the VFP11 before the
|
||||
exception was detected and could be reported to the ARM11 - in this
|
||||
case, the VFP11 also sets FPEXC.FP2V and stores the second opcode in
|
||||
FPINST2.)
|
||||
|
||||
If FPEXC.EX is set, the VFP11 will "bounce" the next FPU opcode issued
|
||||
by the ARM11 CPU, which will be seen by the ARM11 as an undefined opcode
|
||||
trap. The VFP support code examines the FPEXC.EX and FPEXC.FP2V bits
|
||||
to decide what actions to take, i.e., whether to emulate the opcodes
|
||||
found in FPINST and FPINST2, and whether to retry the bounced instruction.
|
||||
|
||||
If a user space application has left the VFP11 in this "pending trap"
|
||||
state, the next FPU opcode issued to the VFP11 might actually be the
|
||||
VSTMIA operation vfp_save_state() uses to store the FPU registers
|
||||
to memory (in our test cases, when building the signal stack frame).
|
||||
In this case, the kernel crashes as described above.
|
||||
|
||||
This patch fixes the problem by making sure that vfp_save_state() is
|
||||
always entered with FPEXC.EX cleared. (The current value of FPEXC has
|
||||
already been saved, so this does not corrupt the context. Clearing
|
||||
FPEXC.EX has no effects on FPINST or FPINST2. Also note that many
|
||||
callers already modify FPEXC by setting FPEXC.EN before invoking
|
||||
vfp_save_state().)
|
||||
|
||||
This patch also addresses a second problem related to FPEXC.EX: After
|
||||
returning from signal handling, the kernel reloads the VFP context
|
||||
from the user mode stack. However, the current code explicitly clears
|
||||
both FPEXC.EX and FPEXC.FP2V during reload. As VFP11 requires these
|
||||
bits to be preserved, this patch disables clearing them for VFP
|
||||
implementations belonging to architecture 1. There should be no
|
||||
negative side effects: the user can set both bits by executing FPU
|
||||
opcodes anyway, and while user code may now place arbitrary values
|
||||
into FPINST and FPINST2 (e.g., non-VFP ARM opcodes) the VFP support
|
||||
code knows which instructions can be emulated, and rejects other
|
||||
opcodes with "unhandled bounce" messages, so there should be no
|
||||
security impact from allowing reloading FPEXC.EX and FPEXC.FP2V.
|
||||
|
||||
Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net>
|
||||
---
|
||||
arch/arm/vfp/vfpmodule.c | 27 ++++++++++++++++++++-------
|
||||
1 file changed, 20 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
|
||||
index 2a61e4b..7675518 100644
|
||||
--- a/arch/arm/vfp/vfpmodule.c
|
||||
+++ b/arch/arm/vfp/vfpmodule.c
|
||||
@@ -183,8 +183,11 @@ static int vfp_notifier(struct notifier_block *self, unsigned long cmd, void *v)
|
||||
* case the thread migrates to a different CPU. The
|
||||
* restoring is done lazily.
|
||||
*/
|
||||
- if ((fpexc & FPEXC_EN) && vfp_current_hw_state[cpu])
|
||||
- vfp_save_state(vfp_current_hw_state[cpu], fpexc);
|
||||
+ if ((fpexc & FPEXC_EN) && vfp_current_hw_state[cpu]) {
|
||||
+ /* vfp_save_state oopses on VFP11 if EX bit set */
|
||||
+ fmxr(FPEXC, fpexc & ~FPEXC_EX);
|
||||
+ vfp_save_state(vfp_current_hw_state[cpu], fpexc);
|
||||
+ }
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -467,13 +470,16 @@ static int vfp_pm_suspend(void)
|
||||
/* if vfp is on, then save state for resumption */
|
||||
if (fpexc & FPEXC_EN) {
|
||||
pr_debug("%s: saving vfp state\n", __func__);
|
||||
+ /* vfp_save_state oopses on VFP11 if EX bit set */
|
||||
+ fmxr(FPEXC, fpexc & ~FPEXC_EX);
|
||||
vfp_save_state(&ti->vfpstate, fpexc);
|
||||
|
||||
/* disable, just in case */
|
||||
fmxr(FPEXC, fmrx(FPEXC) & ~FPEXC_EN);
|
||||
} else if (vfp_current_hw_state[ti->cpu]) {
|
||||
#ifndef CONFIG_SMP
|
||||
- fmxr(FPEXC, fpexc | FPEXC_EN);
|
||||
+ /* vfp_save_state oopses on VFP11 if EX bit set */
|
||||
+ fmxr(FPEXC, (fpexc & ~FPEXC_EX) | FPEXC_EN);
|
||||
vfp_save_state(vfp_current_hw_state[ti->cpu], fpexc);
|
||||
fmxr(FPEXC, fpexc);
|
||||
#endif
|
||||
@@ -536,7 +542,8 @@ void vfp_sync_hwstate(struct thread_info *thread)
|
||||
/*
|
||||
* Save the last VFP state on this CPU.
|
||||
*/
|
||||
- fmxr(FPEXC, fpexc | FPEXC_EN);
|
||||
+ /* vfp_save_state oopses on VFP11 if EX bit set */
|
||||
+ fmxr(FPEXC, (fpexc & ~FPEXC_EX) | FPEXC_EN);
|
||||
vfp_save_state(&thread->vfpstate, fpexc | FPEXC_EN);
|
||||
fmxr(FPEXC, fpexc);
|
||||
}
|
||||
@@ -608,6 +615,7 @@ int vfp_restore_user_hwstate(struct user_vfp __user *ufp,
|
||||
struct vfp_hard_struct *hwstate = &thread->vfpstate.hard;
|
||||
unsigned long fpexc;
|
||||
int err = 0;
|
||||
+ u32 fpsid = fmrx(FPSID);
|
||||
|
||||
/* Disable VFP to avoid corrupting the new thread state. */
|
||||
vfp_flush_hwstate(thread);
|
||||
@@ -631,8 +639,12 @@ int vfp_restore_user_hwstate(struct user_vfp __user *ufp,
|
||||
/* Ensure the VFP is enabled. */
|
||||
fpexc |= FPEXC_EN;
|
||||
|
||||
- /* Ensure FPINST2 is invalid and the exception flag is cleared. */
|
||||
- fpexc &= ~(FPEXC_EX | FPEXC_FP2V);
|
||||
+ /* Mask FPXEC_EX and FPEXC_FP2V if not required by VFP arch */
|
||||
+ if ((fpsid & FPSID_ARCH_MASK) != (1 << FPSID_ARCH_BIT)) {
|
||||
+ /* Ensure FPINST2 is invalid and the exception flag is cleared. */
|
||||
+ fpexc &= ~(FPEXC_EX | FPEXC_FP2V);
|
||||
+ }
|
||||
+
|
||||
hwstate->fpexc = fpexc;
|
||||
|
||||
__get_user_error(hwstate->fpinst, &ufp_exc->fpinst, err);
|
||||
@@ -702,7 +714,8 @@ void kernel_neon_begin(void)
|
||||
cpu = get_cpu();
|
||||
|
||||
fpexc = fmrx(FPEXC) | FPEXC_EN;
|
||||
- fmxr(FPEXC, fpexc);
|
||||
+ /* vfp_save_state oopses on VFP11 if EX bit set */
|
||||
+ fmxr(FPEXC, fpexc & ~FPEXC_EX);
|
||||
|
||||
/*
|
||||
* Save the userland NEON/VFP state. Under UP,
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
From 83672d68ed0199fbe119510626116a32622e4003 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Cerveny <M.Cerveny@computer.org>
|
||||
Date: Mon, 13 Feb 2017 17:23:47 +0100
|
||||
Subject: [PATCH] dwc_otg: fix summarize urb->actual_length for isochronous
|
||||
transfers
|
||||
|
||||
Kernel does not copy input data of ISO transfers to userspace
|
||||
if actual_length is set only in ISO transfers and not summarized
|
||||
in urb->actual_length. Fixes raspberrypi/linux#903
|
||||
---
|
||||
drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
|
||||
index 2ceed42..5011750 100644
|
||||
--- a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
|
||||
@@ -325,10 +325,12 @@ static int _complete(dwc_otg_hcd_t * hcd, void *urb_handle,
|
||||
int i;
|
||||
|
||||
urb->error_count = dwc_otg_hcd_urb_get_error_count(dwc_otg_urb);
|
||||
+ urb->actual_length = 0;
|
||||
for (i = 0; i < urb->number_of_packets; ++i) {
|
||||
urb->iso_frame_desc[i].actual_length =
|
||||
dwc_otg_hcd_urb_get_iso_desc_actual_length
|
||||
(dwc_otg_urb, i);
|
||||
+ urb->actual_length += urb->iso_frame_desc[i].actual_length;
|
||||
urb->iso_frame_desc[i].status =
|
||||
dwc_otg_hcd_urb_get_iso_desc_status(dwc_otg_urb, i);
|
||||
}
|
||||
--
|
||||
2.1.4
|
||||
|
|
@ -0,0 +1,236 @@
|
|||
From 97425acaefeeb2bf4a704225b544cdd863bc5bc6 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 24 May 2016 16:30:05 +0100
|
||||
Subject: [PATCH] BCM270X_DT: Add bcm2708-rpi-0-w.dts
|
||||
|
||||
Add DT support for the Pi Zero W. N.B. It will not be loaded
|
||||
automatically without a corresponding change to the firmware.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
||||
---
|
||||
arch/arm/boot/dts/Makefile | 1 +
|
||||
arch/arm/boot/dts/bcm2708-rpi-0-w.dts | 200 ++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 201 insertions(+)
|
||||
create mode 100644 arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
|
||||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
|
||||
index 14a491c..bd963ef 100644
|
||||
--- a/arch/arm/boot/dts/Makefile
|
||||
+++ b/arch/arm/boot/dts/Makefile
|
||||
@@ -2,6 +2,7 @@ ifeq ($(CONFIG_OF),y)
|
||||
|
||||
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-b-plus.dtb
|
||||
+dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-0-w.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2708) += bcm2708-rpi-cm.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2835) += bcm2835-rpi-cm.dtb
|
||||
dtb-$(CONFIG_ARCH_BCM2709) += bcm2709-rpi-2-b.dtb
|
||||
diff --git a/arch/arm/boot/dts/bcm2708-rpi-0-w.dts b/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
new file mode 100644
|
||||
index 0000000..9f7de60
|
||||
--- /dev/null
|
||||
+++ b/arch/arm/boot/dts/bcm2708-rpi-0-w.dts
|
||||
@@ -0,0 +1,200 @@
|
||||
+/dts-v1/;
|
||||
+
|
||||
+#include "bcm2708.dtsi"
|
||||
+
|
||||
+/ {
|
||||
+ compatible = "brcm,bcm2708";
|
||||
+ model = "Raspberry Pi Zero W";
|
||||
+};
|
||||
+
|
||||
+&gpio {
|
||||
+ sdhost_pins: sdhost_pins {
|
||||
+ brcm,pins = <48 49 50 51 52 53>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+
|
||||
+ spi0_pins: spi0_pins {
|
||||
+ brcm,pins = <9 10 11>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+
|
||||
+ spi0_cs_pins: spi0_cs_pins {
|
||||
+ brcm,pins = <8 7>;
|
||||
+ brcm,function = <1>; /* output */
|
||||
+ };
|
||||
+
|
||||
+ i2c0_pins: i2c0 {
|
||||
+ brcm,pins = <0 1>;
|
||||
+ brcm,function = <4>;
|
||||
+ };
|
||||
+
|
||||
+ i2c1_pins: i2c1 {
|
||||
+ brcm,pins = <2 3>;
|
||||
+ brcm,function = <4>;
|
||||
+ };
|
||||
+
|
||||
+ i2s_pins: i2s {
|
||||
+ brcm,pins = <18 19 20 21>;
|
||||
+ brcm,function = <4>; /* alt0 */
|
||||
+ };
|
||||
+
|
||||
+ sdio_pins: sdio_pins {
|
||||
+ brcm,pins = <34 35 36 37 38 39>;
|
||||
+ brcm,function = <7 7 7 7 7 7>; /* ALT3 = SD1 */
|
||||
+ brcm,pull = <0 2 2 2 2 2>;
|
||||
+ };
|
||||
+
|
||||
+ bt_pins: bt_pins {
|
||||
+ brcm,pins = <43>;
|
||||
+ brcm,function = <4>; /* alt0:GPCLK2 */
|
||||
+ brcm,pull = <0>; /* none */
|
||||
+ };
|
||||
+
|
||||
+ uart0_pins: uart0_pins {
|
||||
+ brcm,pins = <30 31 32 33>;
|
||||
+ brcm,function = <7>; /* alt3=UART0 */
|
||||
+ brcm,pull = <2 0 0 2>; /* up none none up */
|
||||
+ };
|
||||
+
|
||||
+ uart1_pins: uart1_pins {
|
||||
+ brcm,pins;
|
||||
+ brcm,function;
|
||||
+ brcm,pull;
|
||||
+ };
|
||||
+
|
||||
+ audio_pins: audio_pins {
|
||||
+ brcm,pins = <>;
|
||||
+ brcm,function = <>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&sdhost {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&sdhost_pins>;
|
||||
+ bus-width = <4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&mmc {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&sdio_pins>;
|
||||
+ non-removable;
|
||||
+ bus-width = <4>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&fb {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart0_pins &bt_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&uart1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&uart1_pins>;
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&spi0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
|
||||
+ cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
|
||||
+
|
||||
+ spidev0: spidev@0{
|
||||
+ compatible = "spidev";
|
||||
+ reg = <0>; /* CE0 */
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ spi-max-frequency = <500000>;
|
||||
+ };
|
||||
+
|
||||
+ spidev1: spidev@1{
|
||||
+ compatible = "spidev";
|
||||
+ reg = <1>; /* CE1 */
|
||||
+ #address-cells = <1>;
|
||||
+ #size-cells = <0>;
|
||||
+ spi-max-frequency = <500000>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&i2c0 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c0_pins>;
|
||||
+ clock-frequency = <100000>;
|
||||
+};
|
||||
+
|
||||
+&i2c1 {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2c1_pins>;
|
||||
+ clock-frequency = <100000>;
|
||||
+};
|
||||
+
|
||||
+&i2c2 {
|
||||
+ clock-frequency = <100000>;
|
||||
+};
|
||||
+
|
||||
+&i2s {
|
||||
+ #sound-dai-cells = <0>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&i2s_pins>;
|
||||
+};
|
||||
+
|
||||
+&random {
|
||||
+ status = "okay";
|
||||
+};
|
||||
+
|
||||
+&leds {
|
||||
+ act_led: act {
|
||||
+ label = "led0";
|
||||
+ linux,default-trigger = "mmc0";
|
||||
+ gpios = <&gpio 47 0>;
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+&hdmi {
|
||||
+ hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
|
||||
+};
|
||||
+
|
||||
+&audio {
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&audio_pins>;
|
||||
+};
|
||||
+
|
||||
+/ {
|
||||
+ chosen {
|
||||
+ bootargs = "8250.nr_uarts=1";
|
||||
+ };
|
||||
+};
|
||||
+
|
||||
+/ {
|
||||
+ __overrides__ {
|
||||
+ uart0 = <&uart0>,"status";
|
||||
+ uart0_clkrate = <&clk_uart0>,"clock-frequency:0";
|
||||
+ uart1 = <&uart1>,"status";
|
||||
+ i2s = <&i2s>,"status";
|
||||
+ spi = <&spi0>,"status";
|
||||
+ i2c0 = <&i2c0>,"status";
|
||||
+ i2c1 = <&i2c1>,"status";
|
||||
+ i2c2_iknowwhatimdoing = <&i2c2>,"status";
|
||||
+ i2c0_baudrate = <&i2c0>,"clock-frequency:0";
|
||||
+ i2c1_baudrate = <&i2c1>,"clock-frequency:0";
|
||||
+ i2c2_baudrate = <&i2c2>,"clock-frequency:0";
|
||||
+ core_freq = <&clk_core>,"clock-frequency:0";
|
||||
+
|
||||
+ act_led_gpio = <&act_led>,"gpios:4";
|
||||
+ act_led_activelow = <&act_led>,"gpios:8";
|
||||
+ act_led_trigger = <&act_led>,"linux,default-trigger";
|
||||
+
|
||||
+ audio = <&audio>,"status";
|
||||
+ watchdog = <&watchdog>,"status";
|
||||
+ random = <&random>,"status";
|
||||
+ sd_overclock = <&sdhost>,"brcm,overclock-50:0";
|
||||
+ sd_force_pio = <&sdhost>,"brcm,force-pio?";
|
||||
+ sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
|
||||
+ sd_debug = <&sdhost>,"brcm,debug";
|
||||
+ };
|
||||
+};
|
||||
--
|
||||
2.1.4
|
||||
|
Loading…
Reference in New Issue