1: int32_t AG903_SSPMgrSetSpdifMode(
AG903_SSPMgrHandle* handle,
AG903_SSPMgrSpdifParam* param)
2: {
3:
AG903_SSPPrmCtrl ctrl = {0};
4: int32_t retval =
AG903_ENONE;
5: _Bool idle;
6: uint8_t ch;
7:
8: retval = SSPMgr_CheckHandle(handle, &ch);
9:
if(
AG903_ENONE != retval) {
10:
return -
AG903_EINVAL;
11: }
12:
if(NULL == param) {
13:
return -
AG903_EINVAL;
14: }
15:
if((16!=param->datalen)&&(20!=param->datalen)&&(24!=param->datalen)) {
16:
return -
AG903_EINVAL;
17: }
18: idle = SSPMgr_CheckIdle(ch);
19:
if(
true != idle) {
20:
return -
AG903_EBUSY;
21: }
22: ctrl.format = AG903_SSP_FORMAT_SPDIF;
23:
if(
false == param->validity) {
24: ctrl.validity = 1;
25: }
26: ctrl.sdl = param->datalen-1;
27:
28:
AG903_SSPPrmSetControl(ch, &ctrl);
29:
30: SspChStat[ch].format = AG903_SSP_FORMAT_SPDIF;
31: SspChStat[ch].wordlen = param->datalen;
32: SspChStat[ch].slave =
false;
33: SspChStat[ch].tx_thod =
AG903_SSP_TXFIFO_THRESHOLD;
34: SspChStat[ch].rx_thod =
AG903_SSP_RXFIFO_THRESHOLD;
35:
36:
return retval;
37: }