diff options
author | Timo Teräs <timo.teras@iki.fi> | 2015-12-18 06:38:33 +0000 |
---|---|---|
committer | Timo Teräs <timo.teras@iki.fi> | 2015-12-18 06:59:06 +0000 |
commit | 57a77853ac8b73c8d596d76b0cfc817778c73699 (patch) | |
tree | 9d4e78c2d539b7fdb79f221d5af7eabb2e652e8a | |
parent | 218c9e63e3db210702c05f5122417f9dddcbe5dd (diff) | |
download | aports-57a77853ac8b73c8d596d76b0cfc817778c73699.tar.bz2 aports-57a77853ac8b73c8d596d76b0cfc817778c73699.tar.xz |
main/linux-rpi: upgrade to 4.1.15, update patches and config
-rw-r--r-- | main/linux-rpi/APKBUILD | 41 | ||||
-rw-r--r-- | main/linux-rpi/config-rpi.armhf | 49 | ||||
-rw-r--r-- | main/linux-rpi/config-rpi2.armhf | 49 | ||||
-rw-r--r-- | main/linux-rpi/gpio-mcp23s08-pullups.patch | 67 | ||||
-rw-r--r-- | main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch (renamed from main/linux-rpi/rpi-cirrus-4.1.x-20151025.patch) | 355 | ||||
-rw-r--r-- | main/linux-rpi/rpi-dma-i2s-fix.patch | 66 |
6 files changed, 292 insertions, 335 deletions
diff --git a/main/linux-rpi/APKBUILD b/main/linux-rpi/APKBUILD index bb12d59160..4e93130022 100644 --- a/main/linux-rpi/APKBUILD +++ b/main/linux-rpi/APKBUILD @@ -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" diff --git a/main/linux-rpi/config-rpi.armhf b/main/linux-rpi/config-rpi.armhf index b1bdf46d09..c7cdf2d9b9 100644 --- a/main/linux-rpi/config-rpi.armhf +++ b/main/linux-rpi/config-rpi.armhf @@ -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 diff --git a/main/linux-rpi/config-rpi2.armhf b/main/linux-rpi/config-rpi2.armhf index 46cee9af4a..18e540a216 100644 --- a/main/linux-rpi/config-rpi2.armhf +++ b/main/linux-rpi/config-rpi2.armhf @@ -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 diff --git a/main/linux-rpi/gpio-mcp23s08-pullups.patch b/main/linux-rpi/gpio-mcp23s08-pullups.patch new file mode 100644 index 0000000000..e3039861a8 --- /dev/null +++ b/main/linux-rpi/gpio-mcp23s08-pullups.patch @@ -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 + + diff --git a/main/linux-rpi/rpi-cirrus-4.1.x-20151025.patch b/main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch index f29b381efc..06ab4c3ede 100644 --- a/main/linux-rpi/rpi-cirrus-4.1.x-20151025.patch +++ b/main/linux-rpi/rpi-cirrus-4.1.y-20151218.patch @@ -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 - diff --git a/main/linux-rpi/rpi-dma-i2s-fix.patch b/main/linux-rpi/rpi-dma-i2s-fix.patch deleted file mode 100644 index 82fa6dcf7c..0000000000 --- a/main/linux-rpi/rpi-dma-i2s-fix.patch +++ /dev/null @@ -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 - |