mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From de5f4660856350ac43f642bb7c5adf063fc68287 Mon Sep 17 00:00:00 2001
 | |
| From: Kurt Mahan <kmahan@freescale.com>
 | |
| Date: Mon, 10 Dec 2007 13:15:33 -0700
 | |
| Subject: [PATCH] Fix to allow playback at other than 44.1.
 | |
| 
 | |
| LTIBName: m5445x-audio-rates
 | |
| Signed-off-by: Kurt Mahan <kmahan@freescale.com>
 | |
| ---
 | |
|  drivers/spi/ssi_audio.c |   34 ++++++++++++++++++++++++----------
 | |
|  1 files changed, 24 insertions(+), 10 deletions(-)
 | |
| 
 | |
| --- a/drivers/spi/ssi_audio.c
 | |
| +++ b/drivers/spi/ssi_audio.c
 | |
| @@ -34,7 +34,6 @@
 | |
|  #define SOUND_DEVICE_NAME "sound"
 | |
|  #define DRIVER_NAME "ssi_audio"
 | |
|  
 | |
| -
 | |
|  /* #define AUDIO_DEBUG */
 | |
|  
 | |
|  #ifdef CONFIG_MMU
 | |
| @@ -315,24 +314,36 @@ static inline void disable_ssi(void)
 | |
|  }
 | |
|  
 | |
|  /* Audio CODEC initialization */
 | |
| -/* TODO: also the SSI frequency/dividers must be adjusted */
 | |
|  static void adjust_codec_speed(void) {
 | |
|  #ifdef AUDIO_DEBUG
 | |
|  	printk(DRIVER_NAME ":adjust_codec_speed: %d\n", audio_device->speed);
 | |
|  #endif
 | |
| -
 | |
| -	if (audio_device->speed == 8000) {
 | |
| +	disable_ssi();
 | |
| +	switch (audio_device->speed) {
 | |
| +	case 8000:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(255);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_8KHZ);
 | |
| -	} else if (audio_device->speed == 16000) {
 | |
| +		break;
 | |
| +	case 16000:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(129);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_16KHZ);
 | |
| -	} else if (audio_device->speed == 22000) {
 | |
| +		break;
 | |
| +	case 22000:
 | |
| +	case 22050:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(94);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_22KHZ);
 | |
| -	} else if (audio_device->speed == 44000 || audio_device->speed == 44100) {
 | |
| +		break;
 | |
| +	case 44000:
 | |
| +	case 44100:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(47);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_44KHZ);
 | |
| -	} else if (audio_device->speed == 48000) {
 | |
| +		break;
 | |
| +	case 48000:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(42);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_48KHZ);
 | |
| -	} else {
 | |
| -		/* default 44KHz */
 | |
| +		break;
 | |
| +	default:
 | |
| +		MCF_CCM_CDR = MCF_CCM_CDR_SSIDIV(47);
 | |
|  		codec_write(CODEC_SAMPLE_RATE_REG,CODEC_SAMPLE_44KHZ);
 | |
|  	}
 | |
|  }
 | |
| @@ -712,6 +723,9 @@ static int ssi_audio_ioctl(struct inode 
 | |
|  	case SNDCTL_DSP_SAMPLESIZE:
 | |
|  		if (access_ok(VERIFY_READ, (void *) arg, sizeof(val))) {
 | |
|  			get_user(val, (unsigned long *) arg);
 | |
| +#ifdef AUDIO_DEBUG
 | |
| +			printk(DRIVER_NAME ":ssi_audio_ioctl: SNDCTL_DSP_SAMPLESIZE: %d\n", val);
 | |
| +#endif
 | |
|  			ssi_audio_txdrain();
 | |
|  			ssi_audio_setsamplesize(val);
 | |
|  		} else {
 |