From 602bafecdbbbcb171dccae5ce07178e2c5a920d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Mon, 20 Jun 2016 14:50:04 +0200 Subject: brcm2708: update to latest version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As usual these patches were extracted from the raspberry pi repo: https://github.com/raspberrypi/linux/commits/rpi-4.4.y Signed-off-by: Álvaro Fernández Rojas --- ...cm2835-restrict-channels-rate-to-8-960000.patch | 80 ---------------------- 1 file changed, 80 deletions(-) delete mode 100644 target/linux/brcm2708/patches-4.4/0129-bcm2835-restrict-channels-rate-to-8-960000.patch (limited to 'target/linux/brcm2708/patches-4.4/0129-bcm2835-restrict-channels-rate-to-8-960000.patch') diff --git a/target/linux/brcm2708/patches-4.4/0129-bcm2835-restrict-channels-rate-to-8-960000.patch b/target/linux/brcm2708/patches-4.4/0129-bcm2835-restrict-channels-rate-to-8-960000.patch deleted file mode 100644 index 29bd6ecd99..0000000000 --- a/target/linux/brcm2708/patches-4.4/0129-bcm2835-restrict-channels-rate-to-8-960000.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 7e634c8f8fe70286e0b8b404494d3143aa7bc3fc Mon Sep 17 00:00:00 2001 -From: wm4 -Date: Wed, 13 Jan 2016 19:42:18 +0100 -Subject: [PATCH 129/170] bcm2835: restrict channels*rate to 8*960000 - -This is required at least for SPDIF. If the bitrate goes above, -videocore will either resample the audio or corrupt it due to -underruns. Supposedly the hardware isn't designed to output -higher rates, but it can still resample it down to supported -rates. - -Some code is based on ac97_pcm.c. ---- - sound/arm/bcm2835-pcm.c | 41 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 41 insertions(+) - ---- a/sound/arm/bcm2835-pcm.c -+++ b/sound/arm/bcm2835-pcm.c -@@ -19,6 +19,9 @@ - - #include "bcm2835.h" - -+/* The hardware can not do much more num_channels*samplerate then this value */ -+#define MAX_COMBINED_RATE 768000 -+ - /* hardware definition */ - static struct snd_pcm_hardware snd_bcm2835_playback_hw = { - .info = (SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_BLOCK_TRANSFER | -@@ -107,6 +110,31 @@ static irqreturn_t bcm2835_playback_fifo - return IRQ_HANDLED; - } - -+ -+static int rate_hw_constraint_rate(struct snd_pcm_hw_params *params, -+ struct snd_pcm_hw_rule *rule) -+{ -+ struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); -+ struct snd_interval rates = { -+ .min = 8000, -+ .max = min(192000u, MAX_COMBINED_RATE / max(channels->min, 1u)), -+ }; -+ struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); -+ return snd_interval_refine(rate, &rates); -+} -+ -+static int rate_hw_constraint_channels(struct snd_pcm_hw_params *params, -+ struct snd_pcm_hw_rule *rule) -+{ -+ struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE); -+ struct snd_interval channels_interval = { -+ .min = 1, -+ .max = min(8u, MAX_COMBINED_RATE / max(rate->min, 1u)), -+ }; -+ struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS); -+ return snd_interval_refine(channels, &channels_interval); -+} -+ - /* open callback */ - static int snd_bcm2835_playback_open_generic( - struct snd_pcm_substream *substream, int spdif) -@@ -188,6 +216,19 @@ static int snd_bcm2835_playback_open_gen - snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, - 16); - -+ /* When playing PCM, pretend that we support the full range of channels -+ * and sample rates. The GPU can't output it, but is able to resample -+ * the data to a rate the hardware can handle it. This won't work with -+ * compressed data; the resampler would just destroy it. */ -+ if (spdif) { -+ err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, -+ rate_hw_constraint_rate, NULL, -+ SNDRV_PCM_HW_PARAM_CHANNELS, -1); -+ err = snd_pcm_hw_rule_add(runtime, 0, SNDRV_PCM_HW_PARAM_CHANNELS, -+ rate_hw_constraint_channels, NULL, -+ SNDRV_PCM_HW_PARAM_RATE, -1); -+ } -+ - chip->alsa_stream[idx] = alsa_stream; - - chip->opened |= (1 << idx); -- cgit v1.2.3