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