• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_ACCESSORY_BASE_H
10 #define AUDIO_ACCESSORY_BASE_H
11 #include "audio_control.h"
12 #include "audio_core.h"
13 #include "audio_host.h"
14 #include "audio_parse.h"
15 #include "audio_platform_base.h"
16 #include "audio_sapm.h"
17 
18 #ifdef __cplusplus
19 #if __cplusplus
20 extern "C" {
21 #endif
22 #endif /* __cplusplus */
23 
24 enum I2sFrequency {
25     I2S_SAMPLE_FREQUENCY_8000  = 8000,    /* 8kHz sample_rate */
26     I2S_SAMPLE_FREQUENCY_11025 = 11025,   /* 11.025kHz sample_rate */
27     I2S_SAMPLE_FREQUENCY_12000 = 12000,   /* 12kHz sample_rate */
28     I2S_SAMPLE_FREQUENCY_16000 = 16000,   /* 16kHz sample_rate */
29     I2S_SAMPLE_FREQUENCY_22050 = 22050,   /* 22.050kHz sample_rate */
30     I2S_SAMPLE_FREQUENCY_24000 = 24000,   /* 24kHz sample_rate */
31     I2S_SAMPLE_FREQUENCY_32000 = 32000,   /* 32kHz sample_rate */
32     I2S_SAMPLE_FREQUENCY_44100 = 44100,   /* 44.1kHz sample_rate */
33     I2S_SAMPLE_FREQUENCY_48000 = 48000,   /* 48kHz sample_rate */
34     I2S_SAMPLE_FREQUENCY_64000 = 64000,   /* 64kHz sample_rate */
35     I2S_SAMPLE_FREQUENCY_88200 = 88200,   /* 88.2kHz sample_rate */
36     I2S_SAMPLE_FREQUENCY_96000 = 96000    /* 96kHz sample_rate */
37 };
38 
39 enum I2sFrequencyRegVal {
40     I2S_SAMPLE_FREQUENCY_REG_VAL_8000  = 0x0,   /* 8kHz sample_rate */
41     I2S_SAMPLE_FREQUENCY_REG_VAL_11025 = 0x1,   /* 11.025kHz sample_rate */
42     I2S_SAMPLE_FREQUENCY_REG_VAL_12000 = 0x2,   /* 12kHz sample_rate */
43     I2S_SAMPLE_FREQUENCY_REG_VAL_16000 = 0x3,   /* 16kHz sample_rate */
44     I2S_SAMPLE_FREQUENCY_REG_VAL_22050 = 0x4,   /* 22.050kHz sample_rate */
45     I2S_SAMPLE_FREQUENCY_REG_VAL_24000 = 0x5,   /* 24kHz sample_rate */
46     I2S_SAMPLE_FREQUENCY_REG_VAL_32000 = 0x6,   /* 32kHz sample_rate */
47     I2S_SAMPLE_FREQUENCY_REG_VAL_44100 = 0x7,   /* 44.1kHz sample_rate */
48     I2S_SAMPLE_FREQUENCY_REG_VAL_48000 = 0x8,   /* 48kHz sample_rate */
49     I2S_SAMPLE_FREQUENCY_REG_VAL_64000 = 0x9,   /* 64kHz sample_rate */
50     I2S_SAMPLE_FREQUENCY_REG_VAL_88200 = 0xA,   /* 88.2kHz sample_rate */
51     I2S_SAMPLE_FREQUENCY_REG_VAL_96000 = 0xB    /* 96kHz sample_rate */
52 };
53 
54 struct AccessoryTransferData {
55     uint16_t i2cDevAddr;
56     uint16_t i2cBusNumber;
57     uint32_t accessoryCfgCtrlCount;
58     struct AudioRegCfgGroupNode **accessoryRegCfgGroupNode;
59     struct AudioKcontrol *accessoryControls;
60 };
61 
62 struct DaiParamsVal {
63     uint32_t frequencyVal;
64     uint32_t formatVal;
65     uint32_t channelVal;
66 };
67 
68 int32_t AccessoryI2cReadWrite(struct AudioAddrConfig *regAttr, uint16_t rwFlag);
69 int32_t AccessoryRegBitsRead(struct AudioMixerControl *regAttr, uint32_t *regValue);
70 int32_t AccessoryRegBitsUpdate(struct AudioMixerControl regAttr);
71 
72 int32_t AcessoryDeviceFrequencyParse(uint32_t rate, uint16_t *freq);
73 int32_t AccessoryDaiParamsUpdate(struct DaiParamsVal daiParamsVal);
74 int32_t AccessoryDeviceCfgGet(struct AccessoryData *data, struct AccessoryTransferData *transferData);
75 int32_t AccessoryDeviceCtrlRegInit(void);
76 int32_t AccessoryDeviceRegRead(const struct AccessoryDevice *codec, uint32_t reg, uint32_t *value);
77 int32_t AccessoryDeviceRegWrite(const struct AccessoryDevice *codec, uint32_t reg, uint32_t value);
78 int32_t AccessoryGetConfigInfo(const struct HdfDeviceObject *device, struct AccessoryData *accessoryData);
79 
80 #ifdef __cplusplus
81 #if __cplusplus
82 }
83 #endif
84 #endif /* __cplusplus */
85 
86 #endif
87