aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/ymu831/mccdspdrv.h
blob: c8611882bb975482acfdcaa86c92e6e226345b06 (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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/****************************************************************************
 *
 *		Copyright(c) 2012 Yamaha Corporation. All rights reserved.
 *
 *		Module		: mccdspdrv.h
 *
 *		Description	: CDSP Driver
 *
 *		Version		: 1.0.0	2012.12.13
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.	In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 *	claim that you wrote the original software. If you use this software
 *	in a product, an acknowledgment in the product documentation would be
 *	appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 *	misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 *
 ****************************************************************************/
#ifndef	_MCCDSPDRV_H_
#define	_MCCDSPDRV_H_

/* definition */

#define CDSP_FUNC_OFF					(0)
#define CDSP_FUNC_ON					(1)

/* callback */
#define CDSP_EVT_FS_CHG					(100)
#define CDSP_EVT_FS_CHG_REF				(101)

/* Command (Host -> OS) */
#define CDSP_CMD_HOST2OS_CMN_NONE			(0x00)
#define CDSP_CMD_HOST2OS_CMN_RESET			(0x01)
#define CDSP_CMD_HOST2OS_CMN_CLEAR			(0x02)
#define CDSP_CMD_HOST2OS_CMN_STANDBY			(0x03)
#define CDSP_CMD_HOST2OS_CMN_GET_PRG_VER		(0x04)
#define CDSP_CMD_HOST2OS_SYS_GET_OS_VER			(0x20)
#define CDSP_CMD_HOST2OS_SYS_SET_PRG_INFO		(0x21)
#define CDSP_CMD_HOST2OS_SYS_SET_FORMAT			(0x22)
#define CDSP_CMD_HOST2OS_SYS_SET_CONNECTION		(0x23)
#define CDSP_CMD_HOST2OS_SYS_VERIFY_STOP_COMP		(0x24)
#define CDSP_CMD_HOST2OS_SYS_INPUT_DATA_END		(0x25)
#define CDSP_CMD_HOST2OS_SYS_CLEAR_INPUT_DATA_END	(0x26)
#define CDSP_CMD_HOST2OS_SYS_SET_TIMER			(0x27)
#define CDSP_CMD_HOST2OS_SYS_TIMER_RESET		(0x28)
#define CDSP_CMD_HOST2OS_SYS_TERMINATE			(0x29)
#define CDSP_CMD_HOST2OS_SYS_SET_DUAL_MONO		(0x2A)
#define CDSP_CMD_HOST2OS_SYS_GET_INPUT_POS		(0x2B)
#define CDSP_CMD_HOST2OS_SYS_RESET_INPUT_POS		(0x2C)
#define CDSP_CMD_HOST2OS_SYS_HALT			(0x2D)
#define CDSP_CMD_HOST2OS_SYS_SET_CLOCK_SOURCE		(0x2E)
#define CDSP_CMD_DRV_SYS_SET_CONNECTION_EX		(0x3E)
#define CDSP_CMD_DRV_SYS_SET_BIT_WIDTH			(0x3F)
#define CDSP_CMD_HOST2OS_PRG_MIN			(0x40)
#define CDSP_CMD_HOST2OS_PRG_MAX			(0x6F)

/* Command (OS -> Host) */
#define CDSP_CMD_OS2HOST_CMN_NONE			(0x00)
#define CDSP_CMD_OS2HOST_CMN_MIN			(0x01)
#define CDSP_CMD_OS2HOST_CMN_MAX			(0x3F)
#define CDSP_CMD_OS2HOST_PRG_MIN			(0x40)
#define CDSP_CMD_OS2HOST_PRG_MAX			(0x6F)
#define CDSP_CMD_OS2HOST_DISABLE_MIN			(0x70)
#define CDSP_CMD_OS2HOST_DISABLE_MAX			(0x7F)
#define CDSP_CMD_OS2HOST_READY_MIN			(0x80)
#define CDSP_CMD_OS2HOST_READY_MAX			(0xFF)
#define CDSP_CMD_OS2HOST_CMN_NOTIFY_OUT_FORMAT		(0x01)

/* Command parameter */
#define CDSP_CMD_PARAM_ARGUMENT_00			(0)
#define CDSP_CMD_PARAM_ARGUMENT_01			(1)
#define CDSP_CMD_PARAM_ARGUMENT_02			(2)
#define CDSP_CMD_PARAM_ARGUMENT_03			(3)
#define CDSP_CMD_PARAM_ARGUMENT_04			(4)
#define CDSP_CMD_PARAM_ARGUMENT_05			(5)
#define CDSP_CMD_PARAM_ARGUMENT_06			(6)
#define CDSP_CMD_PARAM_ARGUMENT_07			(7)
#define CDSP_CMD_PARAM_ARGUMENT_08			(8)
#define CDSP_CMD_PARAM_ARGUMENT_09			(9)
#define CDSP_CMD_PARAM_ARGUMENT_10			(10)
#define CDSP_CMD_PARAM_ARGUMENT_11			(11)
#define CDSP_CMD_PARAM_ARGUMENT_NUM			(12)
#define CDSP_CMD_PARAM_RESULT_00			(12)
#define CDSP_CMD_PARAM_RESULT_01			(13)	
#define CDSP_CMD_PARAM_RESULT_02			(14)
#define CDSP_CMD_PARAM_RESULT_03			(15)
#define CDSP_CMD_PARAM_RESULT_NUM			(4)
#define CDSP_CMD_PARAM_NUM				\
	(CDSP_CMD_PARAM_ARGUMENT_NUM + CDSP_CMD_PARAM_RESULT_NUM)

/* Command Completion */
#define CDSP_CMD_HOST2OS_COMPLETION			(0x80)
#define CDSP_CMD_OS2HOST_COMPLETION			(0x80)

/* Connect FIFO */
#define CDSP_IN_SOURCE_DFIFO				(0)
#define CDSP_IN_SOURCE_EFIFO				(1)
#define CDSP_IN_SOURCE_OTHER_OUTBUF			(2)
#define CDSP_IN_SOURCE_NONE				(3)
#define CDSP_IN_SOURCE_DFIFO_EFIFO			(4)
#define CDSP_OUT_DEST_OFIFO				(0)
#define CDSP_OUT_DEST_RFIFO				(1)
#define CDSP_OUT_DEST_OTHER_INBUF			(2)
#define CDSP_OUT_DEST_NONE				(3)
#define CDSP_OUT_DEST_OFIFO_RFIFO			(4)

#define CDSP_INPOS					(1)
#define CDSP_OUTPOS					(2)
#define CDSP_DFIFO_REMAIN				(3)
#define CDSP_RFIFO_REMAIN				(4)
#define CDSP_HW_ERROR_CODE				(11)
#define CDSP_FUNC_A_ERROR_CODE				(12)
#define CDSP_FUNC_B_ERROR_CODE				(13)
#define CDSP_FUNC_A_VERSION				(14)
#define CDSP_FUNC_B_VERSION				(15)

#define CDSP_FIFO_SEL_PORT				(0)
#define CDSP_FIFO_SEL_HOST				(1)

/* Enum */

enum MC_PLAYER_ID {
	eMC_PLAYER_CODER_A,
	eMC_PLAYER_CODER_B
};

enum MC_INOUT_ID {
	eMC_INPUT,
	eMC_OUTPUT
};

enum MC_PLAYREC_ID {
	eMC_PLAY,
	eMC_REC
};

/* Struct */

struct MCDRV_CDSP_INIT {
	UINT8				bJtag;
};

struct MC_CODER_FIRMWARE {
	const UINT8			*pbFirmware;
	UINT32				dSize;
	UINT8				bResFlag;
};

struct MC_CODER_PARAMS {
	UINT8				bCommandId;
	UINT8				abParam[16];
};

struct MC_CODER_VERSION {
	UINT32				dID;
	UINT16				wProgVerH;
	UINT16				wProgVerM;
	UINT16				wProgVerL;
	UINT16				wOsVerH;
	UINT16				wOsVerM;
	UINT16				wOsVerL;
};

#if defined(__cplusplus)
extern "C" {
#endif

SINT32 McCdsp_Init(struct MCDRV_CDSP_INIT *psPrm);
SINT32 McCdsp_Term(void);
void McCdsp_IrqProc(void);
SINT32 McCdsp_SetCBFunc(enum MC_PLAYER_ID ePlayerId,
				SINT32 (*pcbfunc)(SINT32, UINT32, UINT32));
SINT32 McCdsp_GetDSP(UINT32 dTarget, void *pvData, UINT32 dSize);
SINT32 McCdsp_SetDSPCheck(struct MCDRV_AEC_INFO *pbPrm);
SINT32 McCdsp_SetDSP(struct MCDRV_AEC_INFO *pbPrm);
SINT32 McCdsp_SetFs(enum MC_PLAYER_ID ePlayerId, UINT8 bFs);
SINT32 McCdsp_SetDFifoSel(UINT8 bSel);
SINT32 McCdsp_SetRFifoSel(UINT8 bSel);
SINT32 McCdsp_Start(enum MC_PLAYER_ID ePlayerId);
SINT32 McCdsp_Stop(enum MC_PLAYER_ID ePlayerId);
SINT32 McCdsp_GetParam(enum MC_PLAYER_ID ePlayerId,
					struct MC_CODER_PARAMS *psParam);
SINT32 McCdsp_SetParam(enum MC_PLAYER_ID ePlayerId,
					struct MC_CODER_PARAMS *psParam);

SINT32 McCdsp_ReadData(UINT8 *pbBuffer, UINT32 dSize);
SINT32 McCdsp_WriteData(const UINT8 *pbBuffer, UINT32 dSize);
#if defined(__cplusplus)
}
#endif

#endif /* _MCCDSPDRV_H_ */