1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  *
4  * HDF is dual licensed: you can use it either under the terms of
5  * the GPL, or the BSD license, at your option.
6  * See the LICENSE file in the root of this repository for complete details.
7  */
8 
9 #ifndef AUDIO_CORE_H
10 #define AUDIO_CORE_H
11 
12 #include "audio_control.h"
13 #include "audio_codec_if.h"
14 #include "audio_dai_if.h"
15 #include "audio_dsp_if.h"
16 #include "audio_host.h"
17 #include "audio_platform_if.h"
18 
19 #ifdef __cplusplus
20 #if __cplusplus
21 extern "C" {
22 #endif
23 #endif /* __cplusplus */
24 
25 int32_t AudioCodecRegUpdate(struct CodecDevice *codec, struct AudioMixerControl *mixerCtrl);
26 int32_t AudioDaiRegUpdate(const struct DaiDevice *dai, struct AudioMixerControl *mixerCtrl);
27 
28 int32_t AudioCodecMuxRegUpdate(struct CodecDevice *codec, struct AudioEnumKcontrol *enumCtrl, const uint32_t *value);
29 
30 int32_t AudioSocRegisterPlatform(struct HdfDeviceObject *device, struct PlatformData *platformData);
31 int32_t AudioSocRegisterDai(struct HdfDeviceObject *device, struct DaiData *daiData);
32 int32_t AudioRegisterDsp(struct HdfDeviceObject *device, struct DspData *dspData, struct DaiData *DaiData);
33 int32_t AudioRegisterCodec(struct HdfDeviceObject *device, struct CodecData *codecData, struct DaiData *daiData);
34 
35 int32_t AudioBindDaiLink(struct AudioCard *audioCard, const struct AudioConfigData *configData);
36 
37 int32_t AudioUpdateCodecRegBits(struct CodecDevice *codec, uint32_t reg,
38     const uint32_t mask, const uint32_t shift, uint32_t value);
39 
40 int32_t AudioUpdateDaiRegBits(const struct DaiDevice *dai, uint32_t reg,
41     const uint32_t mask, const uint32_t shift, uint32_t value);
42 
43 struct DaiDevice *AudioKcontrolGetCpuDai(const struct AudioKcontrol *kcontrol);
44 struct CodecDevice *AudioKcontrolGetCodec(const struct AudioKcontrol *kcontrol);
45 
46 int32_t AudioAddControls(struct AudioCard *audioCard,
47     const struct AudioKcontrol *controls, int32_t controlMaxNum);
48 struct AudioKcontrol *AudioAddControl(const struct AudioCard *audioCard, const struct AudioKcontrol *ctl);
49 
50 int32_t AudioGetCtrlOpsRReg(struct AudioCtrlElemValue *elemValue,
51     const struct AudioMixerControl *mixerCtrl, uint32_t rcurValue);
52 int32_t AudioGetCtrlOpsReg(struct AudioCtrlElemValue *elemValue,
53     const struct AudioMixerControl *mixerCtrl, uint32_t curValue);
54 int32_t AudioSetCtrlOpsReg(const struct AudioKcontrol *kcontrol, const struct AudioCtrlElemValue *elemValue,
55     const struct AudioMixerControl *mixerCtrl, uint32_t *value);
56 int32_t AudioSetCtrlOpsRReg(const struct AudioCtrlElemValue *elemValue,
57     struct AudioMixerControl *mixerCtrl, uint32_t *rvalue, bool *updateRReg);
58 int32_t AudioDaiReadReg(const struct DaiDevice *dai, uint32_t reg, uint32_t *val);
59 int32_t AudioDaiWriteReg(const struct DaiDevice *dai, uint32_t reg, uint32_t val);
60 
61 int32_t AudioCodecReadReg(const struct CodecDevice *codec, uint32_t reg, uint32_t *val);
62 int32_t AudioCodecWriteReg(const struct CodecDevice *codec, uint32_t reg, uint32_t val);
63 
64 int32_t AudioInfoCtrlOps(const struct AudioKcontrol *kcontrol, struct AudioCtrlElemInfo *elemInfo);
65 int32_t AudioCodecGetCtrlOps(const struct AudioKcontrol *kcontrol, struct AudioCtrlElemValue *elemValue);
66 int32_t AudioCodecSetCtrlOps(const struct AudioKcontrol *kcontrol, const struct AudioCtrlElemValue *elemValue);
67 
68 int32_t AudioInfoEnumCtrlOps(const struct AudioKcontrol *kcontrol, struct AudioCtrlElemInfo *elemInfo);
69 int32_t AudioCodecGetEnumCtrlOps(const struct AudioKcontrol *kcontrol, struct AudioCtrlElemValue *elemValue);
70 int32_t AudioCodecSetEnumCtrlOps(const struct AudioKcontrol *kcontrol, const struct AudioCtrlElemValue *elemValue);
71 
72 int32_t AudioCpuDaiSetCtrlOps(const struct AudioKcontrol *kcontrol, const struct AudioCtrlElemValue *elemValue);
73 int32_t AudioCpuDaiGetCtrlOps(const struct AudioKcontrol *kcontrol, struct AudioCtrlElemValue *elemValue);
74 
75 #ifdef __cplusplus
76 #if __cplusplus
77 }
78 #endif
79 #endif /* __cplusplus */
80 
81 #endif /* AUDIO_CORE_H */
82