196 lines
5.0 KiB
C
196 lines
5.0 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
|
|
#ifndef __AW_ACF_BIN_H__
|
|
#define __AW_ACF_BIN_H__
|
|
|
|
#include "aw_device.h"
|
|
|
|
#define AW_PROJECT_NAME_MAX (24)
|
|
#define AW_CUSTOMER_NAME_MAX (16)
|
|
#define AW_CFG_VERSION_MAX (4)
|
|
#define AW_TBL_VERSION_MAX (4)
|
|
#define AW_DDE_DEVICE_TYPE (0)
|
|
#define AW_DDE_SKT_TYPE (1)
|
|
#define AW_DDE_DEFAULT_TYPE (2)
|
|
|
|
#define AW_REG_ADDR_BYTE (1)
|
|
#define AW_REG_DATA_BYTE (1)
|
|
|
|
#define AW_ACF_FILE_ID (0xa15f908)
|
|
#define AW_PROFILE_STR_MAX (32)
|
|
#define AW_POWER_OFF_NAME_SUPPORT_COUNT (5)
|
|
|
|
enum aw_cfg_hdr_version {
|
|
AW_ACF_HDR_VER_0_0_0_1 = 0x00000001,
|
|
AW_ACF_HDR_VER_1_0_0_0 = 0x01000000,
|
|
};
|
|
|
|
enum aw_acf_dde_type_id {
|
|
AW_DEV_NONE_TYPE_ID = 0xFFFFFFFF,
|
|
AW_DDE_DEV_TYPE_ID = 0x00000000,
|
|
AW_DDE_SKT_TYPE_ID = 0x00000001,
|
|
AW_DDE_DEV_DEFAULT_TYPE_ID = 0x00000002,
|
|
AW_DDE_TYPE_MAX,
|
|
};
|
|
|
|
enum aw_raw_data_type_id {
|
|
AW_BIN_TYPE_REG = 0x00000000,
|
|
AW_BIN_TYPE_DSP,
|
|
AW_BIN_TYPE_DSP_CFG,
|
|
AW_BIN_TYPE_DSP_FW,
|
|
AW_BIN_TYPE_HDR_REG,
|
|
AW_BIN_TYPE_HDR_DSP_CFG,
|
|
AW_BIN_TYPE_HDR_DSP_FW,
|
|
AW_BIN_TYPE_MUTLBIN,
|
|
AW_SKT_UI_PROJECT,
|
|
AW_DSP_CFG,
|
|
AW_MONITOR,
|
|
AW_BIN_TYPE_MAX,
|
|
};
|
|
|
|
enum {
|
|
AW_DEV_TYPE_OK = 0,
|
|
AW_DEV_TYPE_NONE = 1,
|
|
};
|
|
|
|
enum aw_profile_status {
|
|
AW_PROFILE_WAIT = 0,
|
|
AW_PROFILE_OK,
|
|
};
|
|
|
|
enum aw_acf_load_status {
|
|
AW_ACF_WAIT = 0,
|
|
AW_ACF_UPDATE,
|
|
};
|
|
|
|
enum aw_bin_dev_profile_id {
|
|
AW_PROFILE_MUSIC = 0x0000,
|
|
AW_PROFILE_VOICE,
|
|
AW_PROFILE_VOIP,
|
|
AW_PROFILE_RINGTONE,
|
|
AW_PROFILE_RINGTONE_HS,
|
|
AW_PROFILE_LOWPOWER,
|
|
AW_PROFILE_BYPASS,
|
|
AW_PROFILE_MMI,
|
|
AW_PROFILE_FM,
|
|
AW_PROFILE_NOTIFICATION,
|
|
AW_PROFILE_RECEIVER,
|
|
AW_PROFILE_OFF,
|
|
AW_PROFILE_MAX,
|
|
};
|
|
|
|
struct aw_acf_hdr {
|
|
int32_t a_id; /* acf file ID 0xa15f908 */
|
|
char project[AW_PROJECT_NAME_MAX]; /* project name */
|
|
char custom[AW_CUSTOMER_NAME_MAX]; /* custom name :huawei xiaomi vivo oppo */
|
|
uint8_t version[AW_CFG_VERSION_MAX]; /* author update version */
|
|
int32_t author_id; /* author id */
|
|
int32_t ddt_size; /* sub section table entry size */
|
|
int32_t dde_num; /* sub section table entry num */
|
|
int32_t ddt_offset; /* sub section table offset in file */
|
|
int32_t hdr_version; /* sub section table version */
|
|
int32_t reserve[3]; /* Reserved Bits */
|
|
};
|
|
|
|
struct aw_acf_dde {
|
|
int32_t type; /* dde type id */
|
|
char dev_name[AW_CUSTOMER_NAME_MAX]; /* customer dev name */
|
|
int16_t dev_index; /* dev id */
|
|
int16_t dev_bus; /* dev bus id */
|
|
int16_t dev_addr; /* dev addr id */
|
|
int16_t dev_profile; /* dev profile id */
|
|
int32_t data_type; /* data type id */
|
|
int32_t data_size; /* dde data size in block */
|
|
int32_t data_offset; /* dde data offset in block */
|
|
int32_t data_crc; /* dde data crc checkout */
|
|
int32_t reserve[5]; /* Reserved Bits */
|
|
};
|
|
|
|
struct aw_acf_dde_v_1_0_0_0 {
|
|
uint32_t type; /* DDE type id */
|
|
char dev_name[AW_CUSTOMER_NAME_MAX]; /* customer dev name */
|
|
uint16_t dev_index; /* dev id */
|
|
uint16_t dev_bus; /* dev bus id */
|
|
uint16_t dev_addr; /* dev addr id */
|
|
uint16_t dev_profile; /* dev profile id*/
|
|
uint32_t data_type; /* data type id */
|
|
uint32_t data_size; /* dde data size in block */
|
|
uint32_t data_offset; /* dde data offset in block */
|
|
uint32_t data_crc; /* dde data crc checkout */
|
|
char dev_profile_str[AW_PROFILE_STR_MAX]; /* dde custom profile name */
|
|
uint32_t chip_id; /* dde custom product chip id */
|
|
uint32_t reserve[4];
|
|
};
|
|
|
|
struct aw_data_with_header {
|
|
uint32_t check_sum;
|
|
uint32_t header_ver;
|
|
uint32_t bin_data_type;
|
|
uint32_t bin_data_ver;
|
|
uint32_t bin_data_size;
|
|
uint32_t ui_ver;
|
|
char product[8];
|
|
uint32_t addr_byte_len;
|
|
uint32_t data_byte_len;
|
|
uint32_t device_addr;
|
|
uint32_t reserve[4];
|
|
};
|
|
|
|
struct aw_data_container {
|
|
uint32_t len;
|
|
uint8_t *data;
|
|
};
|
|
|
|
struct aw_prof_desc {
|
|
uint32_t prof_st;
|
|
char *prof_name;
|
|
char dev_name[AW_CUSTOMER_NAME_MAX];
|
|
struct aw_data_container data_container;
|
|
};
|
|
|
|
struct aw_all_prof_info {
|
|
struct aw_prof_desc prof_desc[AW_PROFILE_MAX];
|
|
};
|
|
|
|
struct aw_prof_info {
|
|
int count;
|
|
int status;
|
|
int prof_type;
|
|
char (*prof_name_list)[AW_PROFILE_STR_MAX];
|
|
struct aw_prof_desc *prof_desc;
|
|
};
|
|
|
|
struct acf_bin_info {
|
|
int load_count;
|
|
int fw_size;
|
|
int16_t dev_index;
|
|
char *fw_data;
|
|
int product_cnt;
|
|
const char **product_tab;
|
|
struct aw_device *aw_dev;
|
|
|
|
struct aw_acf_hdr acf_hdr;
|
|
struct aw_prof_info prof_info;
|
|
};
|
|
|
|
|
|
void aw_acf_profile_free(struct device *dev,
|
|
struct acf_bin_info *acf_info);
|
|
int aw_acf_parse(struct device *dev, struct acf_bin_info *acf_info);
|
|
struct aw_prof_desc *aw_acf_get_prof_desc_form_name(struct device *dev,
|
|
struct acf_bin_info *acf_info, char *profile_name);
|
|
int aw_acf_get_prof_index_form_name(struct device *dev,
|
|
struct acf_bin_info *acf_info, char *profile_name);
|
|
char *aw_acf_get_prof_name_form_index(struct device *dev,
|
|
struct acf_bin_info *acf_info, int index);
|
|
int aw_acf_get_profile_count(struct device *dev,
|
|
struct acf_bin_info *acf_info);
|
|
int aw_acf_check_profile_is_off(struct device *dev,
|
|
struct acf_bin_info *acf_info, char *profile_name);
|
|
char *aw_acf_get_prof_off_name(struct device *dev,
|
|
struct acf_bin_info *acf_info);
|
|
void aw_acf_init(struct aw_device *aw_dev, struct acf_bin_info *acf_info, int index);
|
|
|
|
|
|
#endif
|