mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 12:07:31 +00:00 
			
		
		
		
	 d028d02d0c
			
		
	
	
		d028d02d0c
		
	
	
	
	
		
			
			This driver emulates the ARM AACI interface (PL041) connected to a LM4549 codec. It enables audio playback for the Versatile/PB platform. Limitations: - Supports only a playback on one channel (Versatile/Vexpress) - Supports only one TX FIFO in compact-mode or non-compact mode. - Supports playback of 12, 16, 18 and 20 bits samples. - Record is not supported. - The PL041 is hardwired to a LM4549 codec. Versatile/PB test build: linux-2.6.38.5 buildroot-2010.11 alsa-lib-1.0.22 alsa-utils-1.0.22 mpg123-0.66 Qemu host: Ubuntu 10.04 in Vmware/OS X Playback tested successfully with speaker-test/aplay/mpg123. Signed-off-by: Mathieu Sonet <contact@elasticsheep.com> [Peter Maydell: fixed typo in code clearing SL1RXBUSY/SL2RXBUSY bits, as spotted by Andrzej Zaborowski] Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Andrzej Zaborowski <andrew.zaborowski@intel.com>
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * LM4549 Audio Codec Interface
 | |
|  *
 | |
|  * Copyright (c) 2011
 | |
|  * Written by Mathieu Sonet - www.elasticsheep.com
 | |
|  *
 | |
|  * This code is licenced under the GPL.
 | |
|  *
 | |
|  * *****************************************************************
 | |
|  */
 | |
| 
 | |
| #ifndef HW_LM4549_H
 | |
| #define HW_LM4549_H
 | |
| 
 | |
| #include "audio/audio.h"
 | |
| 
 | |
| typedef void (*lm4549_callback)(void *opaque);
 | |
| 
 | |
| #define LM4549_BUFFER_SIZE (512 * 2) /* 512 16-bit stereo samples */
 | |
| 
 | |
| 
 | |
| typedef struct {
 | |
|     QEMUSoundCard card;
 | |
|     SWVoiceOut *voice;
 | |
|     uint32_t voice_is_active;
 | |
| 
 | |
|     uint16_t regfile[128];
 | |
|     lm4549_callback data_req_cb;
 | |
|     void *opaque;
 | |
| 
 | |
|     uint16_t buffer[LM4549_BUFFER_SIZE];
 | |
|     uint32_t buffer_level;
 | |
| } lm4549_state;
 | |
| 
 | |
| extern const VMStateDescription vmstate_lm4549_state;
 | |
| 
 | |
| 
 | |
| void lm4549_init(lm4549_state *s, lm4549_callback data_req, void *opaque);
 | |
| uint32_t lm4549_read(lm4549_state *s, target_phys_addr_t offset);
 | |
| void lm4549_write(lm4549_state *s, target_phys_addr_t offset, uint32_t value);
 | |
| uint32_t lm4549_write_samples(lm4549_state *s, uint32_t left, uint32_t right);
 | |
| 
 | |
| #endif /* #ifndef HW_LM4549_H */
 |