main/linux-rpi: upgrade to 4.1.15, update patches and config

This commit is contained in:
Timo Teräs 2015-12-18 06:38:33 +00:00
parent 218c9e63e3
commit 57a77853ac
6 changed files with 292 additions and 335 deletions

View File

@ -2,7 +2,7 @@
_mainflavor=rpi
pkgname=linux-$_mainflavor
pkgver=4.1.13
pkgver=4.1.15
case $pkgver in
*.*.*) _kernver=${pkgver%.*};;
*.*) _kernver=${pkgver};;
@ -16,9 +16,9 @@ options="!strip"
install=
source="http://ftp.kernel.org/pub/linux/kernel/v4.x/linux-$_kernver.tar.xz
http://ftp.kernel.org/pub/linux/kernel/v4.x/patch-$pkgver.xz
http://dev.alpinelinux.org/~tteras/linux-4.1.y-rpi-20151119.patch
rpi-dma-i2s-fix.patch
rpi-cirrus-4.1.x-20151025.patch
http://dev.alpinelinux.org/~tteras/linux-4.1.y-rpi-20151218.patch
rpi-cirrus-4.1.y-20151218.patch
gpio-mcp23s08-pullups.patch
config-rpi.armhf
config-rpi2.armhf
@ -197,26 +197,23 @@ dev() {
}
md5sums="fe9dc0f6729f36400ea81aa41d614c37 linux-4.1.tar.xz
e1005015404c53692e8aa6dd14efff74 patch-4.1.13.xz
351cb861020321c0fd23fdc5a201463a linux-4.1.y-rpi-20151119.patch
52787712305201c60ab9bc128c9e373b rpi-dma-i2s-fix.patch
e3429d7772cb3bf73ff4c51aabb2a5cf rpi-cirrus-4.1.x-20151025.patch
cb71e2a517e7d019596eab9cbc91a080 config-rpi.armhf
59f634c4646dab6bc1fe059efaf773e9 config-rpi2.armhf
5ec05841161a172f8ae1a7f38bb382b0 patch-4.1.15.xz
6b091b3432dfde5452b3d1c9239622f2 linux-4.1.y-rpi-20151218.patch
d4b70738cf06dbd70534d5e873442951 rpi-cirrus-4.1.y-20151218.patch
3b645eef5408cbbcf9c6b13581ef775a config-rpi.armhf
1c21e249ea27b70dd5e0a7b69820fdee config-rpi2.armhf
e587cae1dca2f5992555d9bcf53deecf markdt"
sha256sums="caf51f085aac1e1cea4d00dbbf3093ead07b551fc07b31b2a989c05f8ea72d9f linux-4.1.tar.xz
1c3ba78cbaa1a260798d6d0d2aa319ff41ae676b443e5bf06ab441436dcdd171 patch-4.1.13.xz
cdb26705b8841bbadcf4e862dc3f582049fe8169a4951e4c4a34de1f3dac4293 linux-4.1.y-rpi-20151119.patch
f1349b95149f4a21949ebc3dae1c2b144278d170322afeb7975d2cea7f64f10c rpi-dma-i2s-fix.patch
b1b5b8bf16e2eacec19931279984f2bc96851da6e9786d4c9422caa1ac7af2fe rpi-cirrus-4.1.x-20151025.patch
c38d092ae49c4d3f642c4a99432d139092c331f2b33e81c5855b38381ad79411 config-rpi.armhf
5f450314b5af2d6079d32c3a67eb7df49dd73c4732cff392a953b19838fa6e6a config-rpi2.armhf
0ffca8557f1aa191da2f2260ad279c9cc858e6308a8af8a76f7ca3d3c0540344 patch-4.1.15.xz
21dded436f0ff6f36fdc630c406b179820a13403f18c9c221c41d98cc9b77b4b linux-4.1.y-rpi-20151218.patch
5aa17a1554598c3b364b7e8aea84bacfc13e8aca9b9101e58d89c211674a3d5a rpi-cirrus-4.1.y-20151218.patch
7eb3025189c64f4023db864169dcc9d64d029fc871d0ffbc59621292a338772a config-rpi.armhf
10318f14c68a7fafe3b1a8f3208c8586dabce5c01598a4bf7a2da76166b273b4 config-rpi2.armhf
0f6681fc5c3590e1dbe13a2bde796403bd1529cf0fe19720899eaa0db79bcb49 markdt"
sha512sums="168ef84a4e67619f9f53f3574e438542a5747f9b43443363cb83597fcdac9f40d201625c66e375a23226745eaada9176eb006ca023613cec089349e91751f3c0 linux-4.1.tar.xz
0fa60b9fceb6103c11ed1df8d4f264d1c4efcd75da258709f1d0a6813f8117977fa2279b36da22bd69cc2bc808b092207a438c2e80a65a988f4c72363a605832 patch-4.1.13.xz
cae26e2303fccf5246d1b3f8c78425860410ad7667ab7a9805497493d4926978b99ebe95486f00324e3af9cd86fb9e1965f719531ccff9c56efab8ea29b180d0 linux-4.1.y-rpi-20151119.patch
080ba354e40f86338278339b8b3fc2cfd5b77c38c34067b0b7e2b31d07834baf99b3bf04153844e86433bda6fc0de5d86679e1d99521109b1a9a5dbeee6df2b6 rpi-dma-i2s-fix.patch
3e4717c21def19d7c9714b1d9d07f8dbf8fd27e986cbd978eda50c586cc21d1399b50db4255589d09abb6fe5b532c3959481098f229c4ea4526a044fc1da17b0 rpi-cirrus-4.1.x-20151025.patch
69b5beae27dc58e7e7cf1aa351923a980ae453b39f9092fe97220f0b508f46e7e45197da22a2088723bafd6f9293c31475741c63a9ed8e587a1d45392addb9af config-rpi.armhf
7d2f238f0a460fa4cbf6b26188fdbe8241a07846eaf3f6c6f4be33bdb836e9e26c58312109d51092e6faeb304c9281541c62da46539faa1614ef4c1bdacc08eb config-rpi2.armhf
646daf16c01fb8c3013c7c9919c18c3635eb6bd37560623cb56cc7a6d0b22fb13290cee8865dfbcc435cd8544cc3ecb6f3aae538d10c9e0b1098806f233155a3 patch-4.1.15.xz
9ca5c2c0417fc091f46393a7b84b4f8520fa7e21ce6f4c6987966f535388c97e92ffaf8044c80182be584d37b458f9c95b0cf0d8bd86ba3b5cbef1e47b2178bc linux-4.1.y-rpi-20151218.patch
843afc1f2a72fa9618935dd67d4ac33a22ee78f20114af349f8d93e54864375b3ef192c8d8fde814d6685d5fe675c2a850743834ef89640eedce9f4db5ffdb67 rpi-cirrus-4.1.y-20151218.patch
51f7fcacb9fb05aa14e7ee7890f7726ce4b0001496cfe9ca2152693c2acf5fefbfa654d2d4f26058aa3b617141f29cff7e0427c30e291209829ab1e44c6412ba config-rpi.armhf
1e249312b12e5d247ca7e250653afbacb5bc9d23983eaa4d552ff5b28c2dc0b0302a1c6af499fa59fa166a31e067fddae191bd977b0bd13773a66c81ca398f93 config-rpi2.armhf
a4ecd1f48db64f9d6a189250d1937d7f2cd3a049a3d24cc527d04d05db06137722f1ba44bcd6033794781c3f2cfe2fbe065410a16de4bfdf4b1cd95d89322a77 markdt"

View File

@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 4.1.13 Kernel Configuration
# Linux/arm 4.1.15 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@ -1698,7 +1698,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_POLLDEV=m
# CONFIG_INPUT_SPARSEKMAP is not set
# CONFIG_INPUT_MATRIXKMAP is not set
CONFIG_INPUT_MATRIXKMAP=m
#
# Userland interfaces
@ -1714,8 +1714,44 @@ CONFIG_INPUT_EVDEV=m
#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_QT1070 is not set
# CONFIG_KEYBOARD_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_TCA8418 is not set
CONFIG_KEYBOARD_MATRIX=m
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_LM8333 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_SAMSUNG is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_STMPE is not set
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CAP11XX is not set
CONFIG_KEYBOARD_BCM=m
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
# CONFIG_MOUSE_CYAPA is not set
# CONFIG_MOUSE_ELAN_I2C is not set
# CONFIG_MOUSE_VSXXXAA is not set
CONFIG_MOUSE_GPIO=m
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_MOUSE_SYNAPTICS_USB is not set
CONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
@ -1779,7 +1815,7 @@ CONFIG_TOUCHSCREEN_FT6236=m
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set
# CONFIG_TOUCHSCREEN_RPI_FT5406 is not set
CONFIG_TOUCHSCREEN_RPI_FT5406=m
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_PIXCIR is not set
@ -1804,7 +1840,7 @@ CONFIG_INPUT_AD714X_SPI=m
# CONFIG_INPUT_MMA8450 is not set
# CONFIG_INPUT_MPU3050 is not set
# CONFIG_INPUT_GP2A is not set
# CONFIG_INPUT_GPIO_BEEPER is not set
CONFIG_INPUT_GPIO_BEEPER=m
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
@ -1823,6 +1859,7 @@ CONFIG_INPUT_ADXL34X_SPI=m
# CONFIG_INPUT_IMS_PCU is not set
CONFIG_INPUT_CMA3000=m
# CONFIG_INPUT_CMA3000_I2C is not set
# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set
# CONFIG_INPUT_DRV260X_HAPTICS is not set
# CONFIG_INPUT_DRV2667_HAPTICS is not set

View File

@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 4.1.13 Kernel Configuration
# Linux/arm 4.1.15 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@ -1749,7 +1749,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_FF_MEMLESS=m
CONFIG_INPUT_POLLDEV=m
# CONFIG_INPUT_SPARSEKMAP is not set
# CONFIG_INPUT_MATRIXKMAP is not set
CONFIG_INPUT_MATRIXKMAP=m
#
# Userland interfaces
@ -1765,8 +1765,44 @@ CONFIG_INPUT_EVDEV=m
#
# Input Device Drivers
#
# CONFIG_INPUT_KEYBOARD is not set
# CONFIG_INPUT_MOUSE is not set
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_QT1070 is not set
# CONFIG_KEYBOARD_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
CONFIG_KEYBOARD_GPIO=m
CONFIG_KEYBOARD_GPIO_POLLED=m
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_TCA8418 is not set
CONFIG_KEYBOARD_MATRIX=m
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_LM8333 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_SAMSUNG is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_STMPE is not set
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_KEYBOARD_CAP11XX is not set
CONFIG_KEYBOARD_BCM=m
CONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_APPLETOUCH is not set
# CONFIG_MOUSE_BCM5974 is not set
# CONFIG_MOUSE_CYAPA is not set
# CONFIG_MOUSE_ELAN_I2C is not set
# CONFIG_MOUSE_VSXXXAA is not set
CONFIG_MOUSE_GPIO=m
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_MOUSE_SYNAPTICS_USB is not set
CONFIG_INPUT_JOYSTICK=y
# CONFIG_JOYSTICK_ANALOG is not set
# CONFIG_JOYSTICK_A3D is not set
@ -1830,7 +1866,7 @@ CONFIG_TOUCHSCREEN_FT6236=m
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
# CONFIG_TOUCHSCREEN_EDT_FT5X06 is not set
# CONFIG_TOUCHSCREEN_RPI_FT5406 is not set
CONFIG_TOUCHSCREEN_RPI_FT5406=m
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
# CONFIG_TOUCHSCREEN_PIXCIR is not set
@ -1855,7 +1891,7 @@ CONFIG_INPUT_AD714X_SPI=m
# CONFIG_INPUT_MMA8450 is not set
# CONFIG_INPUT_MPU3050 is not set
# CONFIG_INPUT_GP2A is not set
# CONFIG_INPUT_GPIO_BEEPER is not set
CONFIG_INPUT_GPIO_BEEPER=m
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
CONFIG_INPUT_ATI_REMOTE2=m
CONFIG_INPUT_KEYSPAN_REMOTE=m
@ -1874,6 +1910,7 @@ CONFIG_INPUT_ADXL34X_SPI=m
# CONFIG_INPUT_IMS_PCU is not set
CONFIG_INPUT_CMA3000=m
# CONFIG_INPUT_CMA3000_I2C is not set
# CONFIG_INPUT_SOC_BUTTON_ARRAY is not set
# CONFIG_INPUT_DRV260X_HAPTICS is not set
# CONFIG_INPUT_DRV2667_HAPTICS is not set

View File

@ -0,0 +1,67 @@
From 0be0dc3a75279c4621ff45a027ffad5ddc9810c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20Ter=C3=A4s?= <timo.teras@iki.fi>
Date: Mon, 30 Nov 2015 16:24:25 +0200
Subject: [PATCH] gpio: mcp23s08: support setting pullups from device tree data
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Make pullup configurable from device tree data.
Signed-off-by: Timo Teräs <timo.teras@iki.fi>
---
Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt | 1 +
drivers/gpio/gpio-mcp23s08.c | 14 +++++++++++---
2 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt b/Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt
index f3332b9..c7d2128 100644
--- a/Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt
+++ b/Documentation/devicetree/bindings/gpio/gpio-mcp23s08.txt
@@ -59,6 +59,7 @@ Optional device specific properties:
On devices with only one interrupt output this property is useless.
- microchip,irq-active-high: Sets the INTPOL flag in the IOCON register. This
configures the IRQ output polarity as active high.
+- microchip,pullups: Configuration value for GPPU register.
Example I2C (with interrupt):
gpiom1: gpio@20 {
diff --git a/drivers/gpio/gpio-mcp23s08.c b/drivers/gpio/gpio-mcp23s08.c
index 73db7ec..2320230 100644
--- a/drivers/gpio/gpio-mcp23s08.c
+++ b/drivers/gpio/gpio-mcp23s08.c
@@ -786,9 +786,12 @@ static int mcp230xx_probe(struct i2c_client *client,
match = of_match_device(of_match_ptr(mcp23s08_i2c_of_match),
&client->dev);
if (match) {
+ u32 pullups = 0;
pdata = &local_pdata;
pdata->base = -1;
- pdata->chip[0].pullups = 0;
+ of_property_read_u32(client->dev.of_node, "microchip,pullups",
+ &pullups);
+ pdata->chip[0].pullups = pullups;
pdata->irq_controller = of_property_read_bool(
client->dev.of_node,
"interrupt-controller");
@@ -910,9 +913,14 @@ static int mcp23s08_probe(struct spi_device *spi)
pdata = &local_pdata;
pdata->base = -1;
for (addr = 0; addr < ARRAY_SIZE(pdata->chip); addr++) {
- pdata->chip[addr].pullups = 0;
- if (spi_present_mask & (1 << addr))
+ u32 pullups = 0;
+ if (spi_present_mask & (1 << addr)) {
+ of_property_read_u32_index(spi->dev.of_node,
+ "microchip,pullups",
+ addr, &pullups);
chips++;
+ }
+ pdata->chip[addr].pullups = pullups;
}
pdata->irq_controller = of_property_read_bool(
spi->dev.of_node,
--
2.6.3

View File

@ -1,5 +1,3 @@
https://github.com/HiassofT/rpi-linux/commits/cirrus-4.1.y
diff --git a/Documentation/devicetree/bindings/mfd/arizona.txt b/Documentation/devicetree/bindings/mfd/arizona.txt
index 7665aa9..ec7979e 100644
--- a/Documentation/devicetree/bindings/mfd/arizona.txt
@ -67,10 +65,10 @@ index 7665aa9..ec7979e 100644
+ wlf,dmic-ref = <0 0 1 0>;
};
diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile
index f4b2817..756c08d 100644
index 1a60e9c..ab63db7 100644
--- a/arch/arm/boot/dts/overlays/Makefile
+++ b/arch/arm/boot/dts/overlays/Makefile
@@ -41,6 +41,7 @@ dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
@@ -44,6 +44,7 @@ dtb-$(RPI_DT_OVERLAYS) += pwm-overlay.dtb
dtb-$(RPI_DT_OVERLAYS) += pwm-2chan-overlay.dtb
dtb-$(RPI_DT_OVERLAYS) += raspidac3-overlay.dtb
dtb-$(RPI_DT_OVERLAYS) += rpi-backlight-overlay.dtb
@ -80,10 +78,10 @@ index f4b2817..756c08d 100644
dtb-$(RPI_DT_OVERLAYS) += rpi-ft5406-overlay.dtb
diff --git a/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts
new file mode 100644
index 0000000..85b3d15
index 0000000..3cb63a5
--- /dev/null
+++ b/arch/arm/boot/dts/overlays/rpi-cirrus-wm5102-overlay.dts
@@ -0,0 +1,141 @@
@@ -0,0 +1,138 @@
+// Definitions for Cirrus audio card
+/dts-v1/;
+/plugin/;
@ -121,8 +119,8 @@ index 0000000..85b3d15
+ target = <&gpio>;
+ __overlay__ {
+ wlf_pins: wlf_pins {
+ brcm,pins = <17 22 27>;
+ brcm,function = <1 1 0>;
+ brcm,pins = <17 22 27 8>;
+ brcm,function = <1 1 0 1>;
+ };
+ };
+ };
@ -148,10 +146,6 @@ index 0000000..85b3d15
+ enable-active-high;
+ regulator-always-on;
+ };
+
+ wsp_preinit: wsp_preinit {
+ compatible = "wlf,rpi-wm5102-preinit";
+ };
+ };
+ };
+
@ -214,22 +208,23 @@ index 0000000..85b3d15
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ wm8804@3a {
+ wm8804@3b {
+ #sound-dai-cells = <0>;
+ compatible = "wlf,wm8804";
+ reg = <0x3a>;
+ reg = <0x3b>;
+ status = "okay";
+ PVDD-supply = <&ldo0>;
+ DVDD-supply = <&ldo0>;
+ wlf,reset-gpio = <&gpio 8 0>;
+ };
+ };
+ };
+};
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
index fb402e8..74ebdc7 100644
index d06b9c8..37c18ac 100644
--- a/arch/arm/configs/bcm2709_defconfig
+++ b/arch/arm/configs/bcm2709_defconfig
@@ -639,6 +639,9 @@ CONFIG_STMPE_SPI=y
@@ -641,6 +641,9 @@ CONFIG_STMPE_SPI=y
CONFIG_MFD_ARIZONA_I2C=m
CONFIG_MFD_ARIZONA_SPI=m
CONFIG_MFD_WM5102=y
@ -239,7 +234,7 @@ index fb402e8..74ebdc7 100644
CONFIG_MEDIA_SUPPORT=m
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
@@ -844,6 +847,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m
@@ -847,6 +850,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m
CONFIG_SND_BCM2708_SOC_RPI_PROTO=m
CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m
CONFIG_SND_BCM2708_SOC_RASPIDAC3=m
@ -248,10 +243,10 @@ index fb402e8..74ebdc7 100644
CONFIG_SND_SOC_WM8804_I2C=m
CONFIG_SND_SIMPLE_CARD=m
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
index eb81555e..6528468 100644
index e04f122..8c8e512 100644
--- a/arch/arm/configs/bcmrpi_defconfig
+++ b/arch/arm/configs/bcmrpi_defconfig
@@ -632,6 +632,9 @@ CONFIG_STMPE_SPI=y
@@ -634,6 +634,9 @@ CONFIG_STMPE_SPI=y
CONFIG_MFD_ARIZONA_I2C=m
CONFIG_MFD_ARIZONA_SPI=m
CONFIG_MFD_WM5102=y
@ -261,7 +256,7 @@ index eb81555e..6528468 100644
CONFIG_MEDIA_SUPPORT=m
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
@@ -837,6 +840,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m
@@ -840,6 +843,7 @@ CONFIG_SND_BCM2708_SOC_RPI_DAC=m
CONFIG_SND_BCM2708_SOC_RPI_PROTO=m
CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC=m
CONFIG_SND_BCM2708_SOC_RASPIDAC3=m
@ -463,6 +458,33 @@ index 1b9c3be..39b6698 100644
if (!use_dt) {
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
struct amba_device *d = amba_devs[i];
diff --git a/drivers/dma/bcm2708-dmaengine.c b/drivers/dma/bcm2708-dmaengine.c
index 85ce18b..abf8763 100644
--- a/drivers/dma/bcm2708-dmaengine.c
+++ b/drivers/dma/bcm2708-dmaengine.c
@@ -421,7 +421,12 @@ struct bcm2835_desc {
#define BCM2835_DMA_CHAN(n) ((n) << 8) /* Base address */
#define BCM2835_DMA_CHANIO(base, n) ((base) + BCM2835_DMA_CHAN(n))
-#define MAX_LITE_TRANSFER 32768
+/*
+ * Max length on a Lite channel is 65535 bytes.
+ * DMA handles byte-enables on SDRAM reads and writes even on 128-bit accesses,
+ * but byte-enables don't exist on peripheral addresses, so align to 32-bit.
+ */
+#define MAX_LITE_TRANSFER (SZ_64K - 4)
#define MAX_NORMAL_TRANSFER 1073741824
static inline struct bcm2835_dmadev *to_bcm2835_dma_dev(struct dma_device *d)
@@ -710,7 +715,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic(
max_size = MAX_NORMAL_TRANSFER;
period_len = min(period_len, max_size);
- d->frames = (buf_len-1) / period_len + 1;
+ d->frames = DIV_ROUND_UP(buf_len, period_len);
/* Allocate memory for control blocks */
d->control_block_size = d->frames * sizeof(struct bcm2835_dma_cb);
diff --git a/drivers/mfd/arizona-core.c b/drivers/mfd/arizona-core.c
index 6523903..4211644 100644
--- a/drivers/mfd/arizona-core.c
@ -923,10 +945,10 @@ index 1065095..edd011a 100644
unsigned int params_select; /* currently selected param for dai link */
diff --git a/include/sound/soc.h b/include/sound/soc.h
index f6226914..a9389cf 100644
index 8d948aa..e1b47ed 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -954,7 +954,9 @@ struct snd_soc_dai_link {
@@ -956,7 +956,9 @@ struct snd_soc_dai_link {
struct device_node *platform_of_node;
int be_id; /* optional ID for machine driver BE identification */
@ -938,244 +960,57 @@ index f6226914..a9389cf 100644
unsigned int dai_fmt; /* format to set on init */
diff --git a/sound/soc/bcm/Kconfig b/sound/soc/bcm/Kconfig
index 3db2852..7c5699a 100644
index 3db2852..25793a2 100644
--- a/sound/soc/bcm/Kconfig
+++ b/sound/soc/bcm/Kconfig
@@ -75,3 +75,15 @@ config SND_BCM2708_SOC_RASPIDAC3
@@ -75,3 +75,11 @@ config SND_BCM2708_SOC_RASPIDAC3
select SND_SOC_TPA6130A2
help
Say Y or M if you want to add support for RaspiDAC Rev.3x.
+
+config SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT
+ tristate
+
+config SND_BCM2708_SOC_RPI_CODEC_WSP
+ tristate "Support for Cirrus sound pi"
+ depends on SND_BCM2708_SOC_I2S
+ select SND_SOC_WM5102
+ select SND_SOC_WM8804
+ select SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT
+ help
+ Say Y or M if you want to add support for Cirrus sound pi
diff --git a/sound/soc/bcm/Makefile b/sound/soc/bcm/Makefile
index 621358b..65e120d 100644
index 621358b..485af3c 100644
--- a/sound/soc/bcm/Makefile
+++ b/sound/soc/bcm/Makefile
@@ -17,6 +17,8 @@ snd-soc-rpi-dac-objs := rpi-dac.o
@@ -17,6 +17,7 @@ snd-soc-rpi-dac-objs := rpi-dac.o
snd-soc-rpi-proto-objs := rpi-proto.o
snd-soc-iqaudio-dac-objs := iqaudio-dac.o
snd-soc-raspidac3-objs := raspidac3.o
+snd-soc-rpi-wsp-objs := rpi-cirrus-sound-pi.o
+snd-soc-rpi-wsp-preinit-objs := rpi-cirrus-sound-pi-preinit.o
obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DAC) += snd-soc-hifiberry-dac.o
obj-$(CONFIG_SND_BCM2708_SOC_HIFIBERRY_DACPLUS) += snd-soc-hifiberry-dacplus.o
@@ -26,3 +28,5 @@ obj-$(CONFIG_SND_BCM2708_SOC_RPI_DAC) += snd-soc-rpi-dac.o
@@ -26,3 +27,4 @@ obj-$(CONFIG_SND_BCM2708_SOC_RPI_DAC) += snd-soc-rpi-dac.o
obj-$(CONFIG_SND_BCM2708_SOC_RPI_PROTO) += snd-soc-rpi-proto.o
obj-$(CONFIG_SND_BCM2708_SOC_IQAUDIO_DAC) += snd-soc-iqaudio-dac.o
obj-$(CONFIG_SND_BCM2708_SOC_RASPIDAC3) += snd-soc-raspidac3.o
+obj-$(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP) += snd-soc-rpi-wsp.o
+obj-$(CONFIG_SND_BCM2708_SOC_RPI_CODEC_WSP_PREINIT) += snd-soc-rpi-wsp-preinit.o
diff --git a/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c b/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c
new file mode 100644
index 0000000..a2f17e4
--- /dev/null
+++ b/sound/soc/bcm/rpi-cirrus-sound-pi-preinit.c
@@ -0,0 +1,188 @@
+/*
+ * Cirrus Audio Card wm8804 preinit code
+ *
+ * Refactored out of the Cirrus Audio Card code to work around
+ * init dependecy issues.
+ *
+ * Copyright 2015 Cirrus Logic Inc.
+ *
+ * Author: Nikesh Oswal, <Nikesh.Oswal@wolfsonmicro.com>
+ * Author: Matthias Reichl, <hias@horus.com>
+ * Partly based on sound/soc/bcm/iqaudio-dac.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/gpio.h>
+#include <linux/delay.h>
+#include <linux/io.h>
+
+#include <asm/system_info.h>
+
+/*TODO: Shift this to platform data*/
+#define GPIO_WM8804_RST 8
+#define GPIO_WM8804_MODE 2
+#define GPIO_WM8804_SW_MODE 23
+#define GPIO_WM8804_I2C_ADDR_B 18
+#define GPIO_WM8804_I2C_ADDR_B_PLUS 13
+
+static void bcm2708_set_gpio_alt(int pin, int alt)
+{
+ /*
+ * This is the common way to handle the GPIO pins for
+ * the Raspberry Pi.
+ * TODO This is a hack. Use pinmux / pinctrl.
+ */
+#define INP_GPIO(g) *(gpio+((g)/10)) &= ~(7<<(((g)%10)*3))
+#define SET_GPIO_ALT(g,a) *(gpio+(((g)/10))) |= (((a)<=3?(a)+4:(a)==4?3:2)<<(((g)%10)*3))
+ unsigned int *gpio;
+ gpio = ioremap(GPIO_BASE, SZ_16K);
+ INP_GPIO(pin);
+ SET_GPIO_ALT(pin, alt);
+ iounmap(gpio);
+#undef INP_GPIO
+#undef SET_GPIO_ALT
+}
+
+static int wm8804_reset(void)
+ {
+ int ret;
+ unsigned int gpio_wm8804_i2c_addr;
+
+ if ((system_rev & 0xffffff) >= 0x10) {
+ /* Model B+ or later */
+ gpio_wm8804_i2c_addr = GPIO_WM8804_I2C_ADDR_B_PLUS;
+ } else {
+ gpio_wm8804_i2c_addr = GPIO_WM8804_I2C_ADDR_B;
+ }
+
+ if (!gpio_is_valid(GPIO_WM8804_RST)) {
+ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_RST, "wm8804_rst");
+ return -ENOMEM;
+ }
+
+ if (!gpio_is_valid(GPIO_WM8804_MODE)) {
+ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_MODE, "wm8804_mode");
+ return -ENOMEM;
+ }
+
+ if (!gpio_is_valid(GPIO_WM8804_SW_MODE)) {
+ pr_err("Skipping unavailable gpio %d (%s)\n", GPIO_WM8804_SW_MODE, "wm8804_sw_mode");
+ return -ENOMEM;
+ }
+
+ if (!gpio_is_valid(gpio_wm8804_i2c_addr)) {
+ pr_err("Skipping unavailable gpio %d (%s)\n", gpio_wm8804_i2c_addr, "wm8804_i2c_addr");
+ return -ENOMEM;
+ }
+
+ ret = gpio_request(GPIO_WM8804_RST, "wm8804_rst");
+ if (ret < 0) {
+ pr_err("gpio_request wm8804_rst failed\n");
+ return ret;
+ }
+
+ ret = gpio_request(GPIO_WM8804_MODE, "wm8804_mode");
+ if (ret < 0) {
+ pr_err("gpio_request wm8804_mode failed\n");
+ return ret;
+ }
+
+ ret = gpio_request(GPIO_WM8804_SW_MODE, "wm8804_sw_mode");
+ if (ret < 0) {
+ pr_err("gpio_request wm8804_sw_mode failed\n");
+ return ret;
+ }
+
+ ret = gpio_request(gpio_wm8804_i2c_addr, "wm8804_i2c_addr");
+ if (ret < 0) {
+ pr_err("gpio_request wm8804_i2c_addr failed\n");
+ return ret;
+ }
+
+ /*GPIO2 is used for SW/HW Mode Select and after Reset the same pin is used as
+ I2C data line, so initially it is configured as GPIO OUT from BCM perspective*/
+ /*Set SW Mode*/
+ ret = gpio_direction_output(GPIO_WM8804_MODE, 1);
+ if (ret < 0) {
+ pr_err("gpio_direction_output wm8804_mode failed\n");
+ }
+
+ /*Set 2 Wire (I2C) Mode*/
+ ret = gpio_direction_output(GPIO_WM8804_SW_MODE, 0);
+ if (ret < 0) {
+ pr_err("gpio_direction_output wm8804_sw_mode failed\n");
+ }
+
+ /*Set 2 Wire (I2C) Addr to 0x3A, writing 1 will make the Addr as 0x3B*/
+ ret = gpio_direction_output(gpio_wm8804_i2c_addr, 0);
+ if (ret < 0) {
+ pr_err("gpio_direction_output wm8804_i2c_addr failed\n");
+ }
+
+ /*Take WM8804 out of reset*/
+ ret = gpio_direction_output(GPIO_WM8804_RST, 1);
+ if (ret < 0) {
+ pr_err("gpio_direction_output wm8804_rst failed\n");
+ }
+
+ /*Put WM8804 in reset*/
+ gpio_set_value(GPIO_WM8804_RST, 0);
+ mdelay(500);
+ /*Take WM8804 out of reset*/
+ gpio_set_value(GPIO_WM8804_RST, 1);
+ mdelay(500);
+
+ gpio_free(GPIO_WM8804_RST);
+ gpio_free(GPIO_WM8804_MODE);
+ gpio_free(GPIO_WM8804_SW_MODE);
+ gpio_free(gpio_wm8804_i2c_addr);
+
+ /*GPIO2 is used for SW/HW Mode Select and after Reset the same pin is used as
+ I2C data line, so after reset it is configured as I2C data line i.e ALT0 function*/
+ bcm2708_set_gpio_alt(GPIO_WM8804_MODE, 0);
+
+ return ret;
+}
+
+static int snd_rpi_wsp_preinit_probe(struct platform_device *pdev)
+{
+ int ret;
+ struct device *dev = &pdev->dev;
+
+ dev_info(dev, "initializing wm8804 on Cirrus audio card\n");
+ ret = wm8804_reset();
+ if (ret)
+ dev_err(dev, "wm8804_reset returned %d\n", ret);
+
+ return ret;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id snd_rpi_wsp_preinit_of_match[] = {
+ { .compatible = "wlf,rpi-wm5102-preinit", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, snd_rpi_wsp_preinit_of_match);
+#endif /* CONFIG_OF */
+
+static struct platform_driver snd_rpi_wsp_preinit_driver = {
+ .driver = {
+ .name = "snd-rpi-wsp-preinit",
+ .owner = THIS_MODULE,
+ .of_match_table = of_match_ptr(snd_rpi_wsp_preinit_of_match),
+ },
+ .probe = snd_rpi_wsp_preinit_probe,
+};
+
+module_platform_driver(snd_rpi_wsp_preinit_driver);
+
+MODULE_AUTHOR("Nikesh Oswal");
+MODULE_AUTHOR("Liu Xin");
+MODULE_AUTHOR("Matthias Reichl");
+MODULE_DESCRIPTION("Cirrus sound pi wm8804 one-time initialisation code");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/bcm/bcm2708-i2s.c b/sound/soc/bcm/bcm2708-i2s.c
index 5e93cd6..aa8cd0f 100644
--- a/sound/soc/bcm/bcm2708-i2s.c
+++ b/sound/soc/bcm/bcm2708-i2s.c
@@ -881,7 +881,7 @@ static struct snd_pcm_hardware bcm2708_pcm_hardware = {
SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE,
.period_bytes_min = 32,
- .period_bytes_max = 64 * PAGE_SIZE,
+ .period_bytes_max = SZ_64K - 4,
.periods_min = 2,
.periods_max = 255,
.buffer_bytes_max = 128 * PAGE_SIZE,
diff --git a/sound/soc/bcm/rpi-cirrus-sound-pi.c b/sound/soc/bcm/rpi-cirrus-sound-pi.c
new file mode 100644
index 0000000..f7b8839
index 0000000..bc86996
--- /dev/null
+++ b/sound/soc/bcm/rpi-cirrus-sound-pi.c
@@ -0,0 +1,530 @@
@@ -0,0 +1,529 @@
+/*
+ * ASoC machine driver for Cirrus Audio Card (with a WM5102 and WM8804 codecs )
+ * connected to a Raspberry Pi
@ -1571,7 +1406,7 @@ index 0000000..f7b8839
+ .stream_name = "SPDIF Tx/Rx",
+ .cpu_dai_name = "wm5102-aif2",
+ .codec_dai_name = "wm8804-spdif",
+ .codec_name = "wm8804.1-003a",
+ .codec_name = "wm8804.1-003b",
+ .dai_fmt = SND_SOC_DAIFMT_I2S
+ | SND_SOC_DAIFMT_NB_NF
+ | SND_SOC_DAIFMT_CBM_CFM,
@ -1701,13 +1536,12 @@ index 0000000..f7b8839
+
+module_platform_driver(snd_rpi_wsp_driver);
+
+MODULE_SOFTDEP("pre: snd_soc_wm8804_i2c");
+MODULE_AUTHOR("Nikesh Oswal");
+MODULE_AUTHOR("Liu Xin");
+MODULE_DESCRIPTION("ASoC Driver for Raspberry Pi connected to Cirrus sound pi");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index ee91edc..6f19255 100644
index ee91edc..b501471 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -1266,7 +1266,7 @@ static int arizona_hw_params_rate(struct snd_pcm_substream *substream,
@ -1746,6 +1580,60 @@ index ee91edc..6f19255 100644
switch (dai_priv->clk) {
case ARIZONA_CLK_SYSCLK:
switch (priv->arizona->type) {
@@ -1967,19 +1987,15 @@ static int arizona_enable_fll(struct arizona_fll *fll)
arizona_fll_dbg(fll, "Waiting for FLL lock...\n");
val = 0;
- for (i = 0; i < 15; i++) {
- if (i < 5)
- usleep_range(200, 400);
- else
- msleep(20);
-
+ for (i = 0; i < 25; i++) {
regmap_read(arizona->regmap,
ARIZONA_INTERRUPT_RAW_STATUS_5,
&val);
if (val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1)))
break;
+ msleep(10);
}
- if (i == 15)
+ if (i == 25)
arizona_fll_warn(fll, "Timed out waiting for lock\n");
else
arizona_fll_dbg(fll, "FLL locked (%d polls)\n", i);
@@ -1991,6 +2007,8 @@ static void arizona_disable_fll(struct arizona_fll *fll)
{
struct arizona *arizona = fll->arizona;
bool change;
+ int i;
+ unsigned int val;
regmap_update_bits_async(arizona->regmap, fll->base + 1,
ARIZONA_FLL1_FREERUN, ARIZONA_FLL1_FREERUN);
@@ -2001,6 +2019,21 @@ static void arizona_disable_fll(struct arizona_fll *fll)
regmap_update_bits_async(arizona->regmap, fll->base + 1,
ARIZONA_FLL1_FREERUN, 0);
+ arizona_fll_dbg(fll, "Waiting for FLL disable...\n");
+ val = 0;
+ for (i = 0; i < 25; i++) {
+ regmap_read(arizona->regmap,
+ ARIZONA_INTERRUPT_RAW_STATUS_5,
+ &val);
+ if (!(val & (ARIZONA_FLL1_CLOCK_OK_STS << (fll->id - 1))))
+ break;
+ msleep(10);
+ }
+ if (i == 25)
+ arizona_fll_warn(fll, "Timed out waiting for disable\n");
+ else
+ arizona_fll_dbg(fll, "FLL disabled (%d polls)\n", i);
+
if (change)
pm_runtime_put_autosuspend(arizona->dev);
}
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index d476221..fc50c6d 100644
--- a/sound/soc/codecs/wm5102.c
@ -2043,6 +1931,3 @@ index b6c12dc..e767365 100644
ret = snd_soc_dapm_add_path(&card->dapm, source, w, NULL, NULL);
if (ret)
--
2.6.1

View File

@ -1,66 +0,0 @@
From 8a2e9aec63f46deceacd0a92a66835a07fb18a31 Mon Sep 17 00:00:00 2001
From: Matthias Reichl <hias@horus.com>
Date: Sun, 8 Nov 2015 16:58:57 +0100
Subject: [PATCH] bcm2708-dmaengine: fix calculation of cyclic DMA frames
The calculation of the number of required frames was wrong which
could lead to the last frame being longer than the requested period
length and even the maximum supported transfer size.
eg when requesting a 88208 bytes buffer with a period len of 22052
(the defaults when playing a 44.1kHz stereo 16bit file with aplay)
the code would allocate 3 frames, two with 22052 bytes and the
last one with 44104 bytes instead of the expected 4 frames with
22052 bytes each.
Signed-off-by: Matthias Reichl <hias@horus.com>
---
drivers/dma/bcm2708-dmaengine.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/dma/bcm2708-dmaengine.c b/drivers/dma/bcm2708-dmaengine.c
index 85ce18b..91eac60 100644
--- a/drivers/dma/bcm2708-dmaengine.c
+++ b/drivers/dma/bcm2708-dmaengine.c
@@ -710,7 +710,7 @@ static struct dma_async_tx_descriptor *bcm2835_dma_prep_dma_cyclic(
max_size = MAX_NORMAL_TRANSFER;
period_len = min(period_len, max_size);
- d->frames = (buf_len-1) / period_len + 1;
+ d->frames = DIV_ROUND_UP(buf_len, period_len);
/* Allocate memory for control blocks */
d->control_block_size = d->frames * sizeof(struct bcm2835_dma_cb);
--
2.6.3
From 8e469d0e00fa0f337e0e5ccdb504ce0ecf6ea6d6 Mon Sep 17 00:00:00 2001
From: Matthias Reichl <hias@horus.com>
Date: Sun, 8 Nov 2015 17:00:45 +0100
Subject: [PATCH] bcm2708-i2s: match period_bytes_max to DMA controller limit
bcm2708-dmaengine supports a maximum transfer length of 32k bytes on
the lite channels. period_bytes_max should reflect this limit.
Signed-off-by: Matthias Reichl <hias@horus.com>
---
sound/soc/bcm/bcm2708-i2s.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sound/soc/bcm/bcm2708-i2s.c b/sound/soc/bcm/bcm2708-i2s.c
index 5e93cd6..b65d785 100644
--- a/sound/soc/bcm/bcm2708-i2s.c
+++ b/sound/soc/bcm/bcm2708-i2s.c
@@ -881,7 +881,7 @@ static struct snd_pcm_hardware bcm2708_pcm_hardware = {
SNDRV_PCM_FMTBIT_S24_LE |
SNDRV_PCM_FMTBIT_S32_LE,
.period_bytes_min = 32,
- .period_bytes_max = 64 * PAGE_SIZE,
+ .period_bytes_max = SZ_32K,
.periods_min = 2,
.periods_max = 255,
.buffer_bytes_max = 128 * PAGE_SIZE,
--
2.6.3