147b43a1fSPaolo Bonzini /* 247b43a1fSPaolo Bonzini * LM4549 Audio Codec Interface 347b43a1fSPaolo Bonzini * 447b43a1fSPaolo Bonzini * Copyright (c) 2011 547b43a1fSPaolo Bonzini * Written by Mathieu Sonet - www.elasticsheep.com 647b43a1fSPaolo Bonzini * 747b43a1fSPaolo Bonzini * This code is licensed under the GPL. 847b43a1fSPaolo Bonzini * 947b43a1fSPaolo Bonzini * ***************************************************************** 1047b43a1fSPaolo Bonzini */ 1147b43a1fSPaolo Bonzini 1247b43a1fSPaolo Bonzini #ifndef HW_LM4549_H 1347b43a1fSPaolo Bonzini #define HW_LM4549_H 1447b43a1fSPaolo Bonzini 1547b43a1fSPaolo Bonzini #include "audio/audio.h" 16d4842052SMarkus Armbruster #include "exec/hwaddr.h" 1747b43a1fSPaolo Bonzini 1847b43a1fSPaolo Bonzini typedef void (*lm4549_callback)(void *opaque); 1947b43a1fSPaolo Bonzini 2047b43a1fSPaolo Bonzini #define LM4549_BUFFER_SIZE (512 * 2) /* 512 16-bit stereo samples */ 2147b43a1fSPaolo Bonzini 2247b43a1fSPaolo Bonzini 2347b43a1fSPaolo Bonzini typedef struct { 2447b43a1fSPaolo Bonzini QEMUSoundCard card; 2547b43a1fSPaolo Bonzini SWVoiceOut *voice; 2647b43a1fSPaolo Bonzini uint32_t voice_is_active; 2747b43a1fSPaolo Bonzini 2847b43a1fSPaolo Bonzini uint16_t regfile[128]; 2947b43a1fSPaolo Bonzini lm4549_callback data_req_cb; 3047b43a1fSPaolo Bonzini void *opaque; 3147b43a1fSPaolo Bonzini 3247b43a1fSPaolo Bonzini uint16_t buffer[LM4549_BUFFER_SIZE]; 3347b43a1fSPaolo Bonzini uint32_t buffer_level; 3447b43a1fSPaolo Bonzini } lm4549_state; 3547b43a1fSPaolo Bonzini 3647b43a1fSPaolo Bonzini extern const VMStateDescription vmstate_lm4549_state; 3747b43a1fSPaolo Bonzini 3847b43a1fSPaolo Bonzini 39*79d3e56cSMartin Kletzander void lm4549_init(lm4549_state *s, lm4549_callback data_req, void *opaque, 40*79d3e56cSMartin Kletzander Error **errp); 4147b43a1fSPaolo Bonzini uint32_t lm4549_read(lm4549_state *s, hwaddr offset); 4247b43a1fSPaolo Bonzini void lm4549_write(lm4549_state *s, hwaddr offset, uint32_t value); 4347b43a1fSPaolo Bonzini uint32_t lm4549_write_samples(lm4549_state *s, uint32_t left, uint32_t right); 4447b43a1fSPaolo Bonzini 45175de524SMarkus Armbruster #endif /* HW_LM4549_H */ 46