mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	Update our copies of the brcm2708 patches to the latest rpi-3.10-y rebased against linux-3.10.y stable (3.10.32). This should hopefully make it easier for us in the future to leverage the raspberry/rpi-* branches. Signed-off-by: Florian Fainelli <florian@openwrt.org> SVN-Revision: 39770
		
			
				
	
	
		
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From d44c918e6f017acb488bf41c4ab91159ac423084 Mon Sep 17 00:00:00 2001
 | 
						|
From: Florian Meier <florian.meier@koalo.de>
 | 
						|
Date: Fri, 6 Dec 2013 18:55:53 +0100
 | 
						|
Subject: [PATCH 122/174] ASoC: BCM2708: Add 24 bit support
 | 
						|
 | 
						|
This adds 24 bit support to the I2S driver of the BCM2708.
 | 
						|
Besides enabling the 24 bit flags, it includes two bug fixes:
 | 
						|
 | 
						|
MMAP is not supported. Claiming this leads to strange issues
 | 
						|
when the format of driver and file do not match.
 | 
						|
 | 
						|
The datasheet states that the width extension bit should be set
 | 
						|
for widths greater than 24, but greater or equal would be correct.
 | 
						|
This follows from the definition of the width field.
 | 
						|
 | 
						|
Signed-off-by: Florian Meier <florian.meier@koalo.de>
 | 
						|
---
 | 
						|
 sound/soc/bcm/bcm2708-i2s.c | 13 +++++++++----
 | 
						|
 1 file changed, 9 insertions(+), 4 deletions(-)
 | 
						|
 | 
						|
--- a/sound/soc/bcm/bcm2708-i2s.c
 | 
						|
+++ b/sound/soc/bcm/bcm2708-i2s.c
 | 
						|
@@ -346,6 +346,10 @@ static int bcm2708_i2s_hw_params(struct
 | 
						|
 		data_length = 16;
 | 
						|
 		bclk_ratio = 40;
 | 
						|
 		break;
 | 
						|
+	case SNDRV_PCM_FORMAT_S24_LE:
 | 
						|
+		data_length = 24;
 | 
						|
+		bclk_ratio = 40;
 | 
						|
+		break;
 | 
						|
 	case SNDRV_PCM_FORMAT_S32_LE:
 | 
						|
 		data_length = 32;
 | 
						|
 		bclk_ratio = 80;
 | 
						|
@@ -424,7 +428,7 @@ static int bcm2708_i2s_hw_params(struct
 | 
						|
 	/* Setup the frame format */
 | 
						|
 	format = BCM2708_I2S_CHEN;
 | 
						|
 
 | 
						|
-	if (data_length > 24)
 | 
						|
+	if (data_length >= 24)
 | 
						|
 		format |= BCM2708_I2S_CHWEX;
 | 
						|
 
 | 
						|
 	format |= BCM2708_I2S_CHWID((data_length-8)&0xf);
 | 
						|
@@ -714,6 +718,7 @@ static struct snd_soc_dai_driver bcm2708
 | 
						|
 		.channels_max = 2,
 | 
						|
 		.rates =	SNDRV_PCM_RATE_8000_192000,
 | 
						|
 		.formats =	SNDRV_PCM_FMTBIT_S16_LE
 | 
						|
+				| SNDRV_PCM_FMTBIT_S24_LE
 | 
						|
 				| SNDRV_PCM_FMTBIT_S32_LE
 | 
						|
 		},
 | 
						|
 	.capture = {
 | 
						|
@@ -721,6 +726,7 @@ static struct snd_soc_dai_driver bcm2708
 | 
						|
 		.channels_max = 2,
 | 
						|
 		.rates =	SNDRV_PCM_RATE_8000_192000,
 | 
						|
 		.formats =	SNDRV_PCM_FMTBIT_S16_LE
 | 
						|
+				| SNDRV_PCM_FMTBIT_S24_LE
 | 
						|
 				| SNDRV_PCM_FMTBIT_S32_LE
 | 
						|
 		},
 | 
						|
 	.ops = &bcm2708_i2s_dai_ops,
 | 
						|
@@ -810,11 +816,10 @@ static void bcm2708_i2s_setup_gpio(void)
 | 
						|
 }
 | 
						|
 
 | 
						|
 static const struct snd_pcm_hardware bcm2708_pcm_hardware = {
 | 
						|
-	.info			= SNDRV_PCM_INFO_MMAP |
 | 
						|
-				  SNDRV_PCM_INFO_MMAP_VALID |
 | 
						|
-				  SNDRV_PCM_INFO_INTERLEAVED |
 | 
						|
+	.info			= SNDRV_PCM_INFO_INTERLEAVED |
 | 
						|
 				  SNDRV_PCM_INFO_JOINT_DUPLEX,
 | 
						|
 	.formats		= SNDRV_PCM_FMTBIT_S16_LE |
 | 
						|
+				  SNDRV_PCM_FMTBIT_S24_LE |
 | 
						|
 				  SNDRV_PCM_FMTBIT_S32_LE,
 | 
						|
 	.period_bytes_min	= 32,
 | 
						|
 	.period_bytes_max	= 64 * PAGE_SIZE,
 |