xref: /qemu/hw/audio/lm4549.h (revision 79d3e56c)
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 
3979d3e56cSMartin Kletzander void lm4549_init(lm4549_state *s, lm4549_callback data_req, void *opaque,
4079d3e56cSMartin 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