summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/sound/w90n745_audio.h
blob: 665143e8ed6c0aea64b23f726bbda6eae91befad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**************************************************************************************************
 *                                                                          
 * Copyright (c) 2004 - 2007 Winbond Electronics Corp. All rights reserved.      
 *                                                                         
 * FILENAME
 *     W90N745_AUDIO.H
 *
 * VERSION
 *     1.1
 *
 * DESCRIPTION
 *     This file contains the main structure of w90n745 audio module
 *
 * HISTORY
 *     02/09/2004		 Ver 1.0 Created by PC30 YCHuang
 *	 11/25/2005		 Ver 1.1 Modified by PC34 QFu
 *
 * REMARK
 *     None
 *     
 *************************************************************************************************/

#ifndef _W90N745_AUDIO_H_
#define _W90N745_AUDIO_H_

#include <asm/arch/cdefs.h>
#include <asm/semaphore.h>

typedef int (*AU_CB_FUN_T)(UINT32, UINT32);

typedef enum au_dev_e
{
	AU_DEV_AC97,
	AU_DEV_IIS
} AU_DEV_E;

typedef struct wb_audio_codec_t{
	AU_DEV_E dev;			/* codec type */
	INT		(*get_capacity)(VOID);
	VOID	(*set_play_buffer)(UINT32, UINT32);
	VOID	(*set_record_buffer)(UINT32, UINT32);

	INT		(*set_play_volume)(UINT32 nLeft, UINT32 nRight);
	INT		(*set_record_volume)(UINT32 nLeft, UINT32 nRight);

	INT		(*reset)(VOID);
	
	INT		(*start_play)(AU_CB_FUN_T fnCallBack, INT nSamplingRate, INT nChannels);
	VOID	(*stop_play)(VOID);

	INT		(*start_record)(AU_CB_FUN_T fnCallBack, INT nSamplingRate, INT nChannels);
	VOID	(*stop_record)(VOID);

	VOID	(*play_interrupt)(VOID);		/* nonzero play stopped */
	VOID	(*record_interrupt)(VOID);
}WB_AUDIO_CODEC_T;
	
typedef struct audio_t
{
	AU_CB_FUN_T 	fnPlayCallBack;
	AU_CB_FUN_T 	fnRecCallBack;
	INT				nPlaySamplingRate;
	INT				nRecSamplingRate;
	short			sPlayVolume;
	short			sRecVolume;
	UINT32			uPlayBufferAddr;
	UINT32			uPlayBufferLength;
	UINT32			uRecordBufferAddr;
	UINT32			uRecordBufferLength;
}AUDIO_T;

typedef struct wb_audio_t{
	int state;
	int open_flags;
	int dsp_dev, dsp_openflag;
	int mixer_dev, mixer_openflag;
	unsigned int play_buf_addr, record_buf_addr;
	unsigned int play_buf_length, record_buf_length;
	int nSamplingRate;
	int nChannels;
	int nPlayVolumeLeft, nPlayVolumeRight, nRecordVolumeLeft, nRecordVolumeRight;

	struct{
		int ptr;
	}play_half_buf[2], record_half_buf[2];
	
	WB_AUDIO_CODEC_T *codec;
	struct semaphore dsp_read_sem, dsp_write_sem, mixer_sem;
	struct fasync_struct *fasync_ptr;
	wait_queue_head_t write_wait_queue, read_wait_queue;
}WB_AUDIO_T;



#define AU_SAMPLE_RATE_48000	48000
#define AU_SAMPLE_RATE_44100	44100
#define AU_SAMPLE_RATE_32000	32000
#define AU_SAMPLE_RATE_24000	24000
#define AU_SAMPLE_RATE_22050	22050
#define AU_SAMPLE_RATE_16000	16000
#define AU_SAMPLE_RATE_11025	11025
#define AU_SAMPLE_RATE_8000	8000

#define AU_CH_MONO		1
#define AU_CH_STEREO	2

/* state code */
#define AU_STATE_NOP			0
#define AU_STATE_PLAYING		1
#define AU_STATE_RECORDING	2

/* capacity */
#define AU_CAP_DUPLEX			1

/* Error Code */
#define ERR_AU_GENERAL_ERROR	-1
#define ERR_AU_NO_MEMORY		-5		/* memory allocate failure */
#define ERR_AU_ILL_BUFF_SIZE	-10		/* illegal callback buffer size */
#define ERR_AC97_CODEC_RESET	-20		/* AC97 codec reset failed */
#define ERR_AC97_PLAY_ACTIVE	-22		/* AC97 playback has been activated */
#define ERR_AC97_REC_ACTIVE	-23		/* AC97 record has been activated */
#define ERR_AC97_NO_DEVICE		-24		/* have no AC97 codec on board */
#define ERR_MA3_PLAY_ACTIVE	-50		/* MA3 playback has been activated */
#define ERR_MA3_NO_DEVICE		-51		/* have no MA3 chip on board */
#define ERR_MA5_PLAY_ACTIVE	-80		/* MA5 playback has been activated */
#define ERR_MA5_NO_DEVICE		-81		/* have no MA5 chip on board */
#define ERR_MA5I_NO_DEVICE		-90		/* have no MA5i chip on board */
#define ERR_DAC_PLAY_ACTIVE	-110	/* DAC playback has been activated */
#define ERR_DAC_NO_DEVICE		-111	/* DAC is not available */
#define ERR_ADC_REC_ACTIVE		-120	/* ADC record has been activated */
#define ERR_ADC_NO_DEVICE		-121	/* ADC is not available */
#define ERR_IIS_PLAY_ACTIVE		-140	/* IIS playback has been activated */
#define ERR_IIS_REC_ACTIVE		-141	/* IIS record has been activated */
#define ERR_IIS_NO_DEVICE		-142	/* has no IIS codec on board */
#define ERR_WM8753_NO_DEVICE	-150	/* has no wm8753 codec on board */
#define ERR_W5691_PLAY_ACTIVE	-160	/* W5691 playback has been activated */
#define ERR_W5691_NO_DEVICE	-161	/* Have no W5691 chip on board */

#define ERR_NO_DEVICE			-201	/* audio device not available */

extern WB_AUDIO_CODEC_T wb_ac97_codec;
extern WB_AUDIO_CODEC_T wb_i2s_codec;

#endif	/* _W90N745_AUDIO_H_ */