Squashed backup commit (no shallow-clone history issues) of xiaomi-mt6833-dev/kernel_xiaomi_mt6833 (lineage-23.2 branch, upstream commit 9eece662e) plus all fixes applied to get everpal_defconfig building clean against a modern (GCC 15.2.0) toolchain -- see the previous commit message on the lineage-23.2 branch (also in this repo history is not available here since this is a squashed snapshot; full incremental history lives in the local DL380 checkout and the upstream GitHub remote). Upstream: https://github.com/xiaomi-mt6833-dev/kernel_xiaomi_mt6833 (lineage-23.2)
181 lines
4.0 KiB
C
181 lines
4.0 KiB
C
#ifndef __AW87XXX_H__
|
|
#define __AW87XXX_H__
|
|
|
|
#include "aw87xxx_monitor.h"
|
|
|
|
#define AWINIC_CFG_UPDATE_DELAY
|
|
#define AWINIC_CFG_UPDATE_DELAY_TIME (5000)
|
|
|
|
#define AW_I2C_RETRIES (5)
|
|
#define AW_I2C_RETRY_DELAY (2)
|
|
|
|
#define AW_READ_CHIPID_RETRIES (5)
|
|
#define AW_READ_CHIPID_RETRY_DELAY (2)
|
|
|
|
#define AW87XXX_CFG_NAME_MAX (64)
|
|
|
|
#define AW87XXX_LOAD_CFG_RETRIES (3)
|
|
|
|
#define AW87XXX_ADDR_BYTE_LEN (1)
|
|
#define AW87XXX_DATA_BYTE_LEN (1)
|
|
#define AW87XXX_BIN_TYPE_REG (0)
|
|
|
|
#define AW87XXX_REG_CHIPID (0x00)
|
|
|
|
#define AW87XXX_REG_REG_SYSCTRL (0x01)
|
|
|
|
#define AW87XXX_REG_REG_SYSCTRL_DISABLE (0x01)
|
|
|
|
#define AW87XXX_REG_NONE_ACCESS (0)
|
|
#define AW87XXX_REG_RD_ACCESS (1 << 0)
|
|
#define AW87XXX_REG_WR_ACCESS (1 << 1)
|
|
|
|
#define AW87XXX_CFG_NUM_INIT (0)
|
|
#define AW87XXX_ADD_CHAN_NAME_SHIFT (2)
|
|
#define AW87XXX_MODE_CFG_NUM_MAX (3)
|
|
|
|
#define KTHREAD_SYNC_INTERVAL (100)
|
|
#define WAIT_DSP_OPEN_TIME (3000)
|
|
|
|
#define SOFTRESET_ADDR (0x00)
|
|
#define SOFTRESET_VALUE (0xaa)
|
|
|
|
enum aw87xxx_scene_mode {
|
|
AW87XXX_OFF_MODE = 0,
|
|
AW87XXX_MUSIC_MODE = 1,
|
|
AW87XXX_VOICE_MODE = 2,
|
|
AW87XXX_FM_MODE = 3,
|
|
AW87XXX_RCV_MODE = 4,
|
|
AW87XXX_MODE_MAX = 5,
|
|
};
|
|
|
|
enum aw87xxx_chip_type {
|
|
AW87XXX_339 = 0,
|
|
AW87XXX_359 = 1,
|
|
AW87XXX_369 = 2,
|
|
AW87XXX_519 = 3,
|
|
AW87XXX_559 = 4,
|
|
AW87XXX_CHIP_TYPE_MAX = 5,
|
|
};
|
|
|
|
enum aw87xxx_fm_version {
|
|
AW87XXX_OLD_FIRMWARE = 0,
|
|
AW87XXX_FH_FIRMWARE = 1,
|
|
};
|
|
|
|
enum aw87xxx_chipid {
|
|
AW87XXX_CHIPID_39 = 0x39,
|
|
AW87XXX_CHIPID_59 = 0x59,
|
|
AW87XXX_CHIPID_69 = 0x69,
|
|
AW87XXX_CHIPID_5A = 0x5A,
|
|
};
|
|
|
|
enum aw87xxx_cfg_update_flag {
|
|
AW87XXX_CFG_NG = 0,
|
|
AW87XXX_CFG_WAIT,
|
|
AW87XXX_CFG_OK,
|
|
};
|
|
|
|
struct ui_frame_header {
|
|
uint32_t check_sum;
|
|
uint32_t bin_fh_ver;
|
|
uint32_t bin_data_type;
|
|
uint32_t bin_data_ver;
|
|
uint32_t bin_data_len;
|
|
uint32_t ui_ver;
|
|
uint32_t chip_name[2];
|
|
uint32_t addr_bit_wide;
|
|
uint32_t data_bit_wide;
|
|
uint32_t i2c_addr;
|
|
uint32_t reserved[4];
|
|
};
|
|
|
|
struct aw87xxx_container {
|
|
int len;
|
|
unsigned char data[];
|
|
};
|
|
|
|
struct aw87xxx_scene_param {
|
|
uint8_t scene_mode;
|
|
uint8_t update_num;
|
|
uint8_t cfg_update_flag;
|
|
struct ui_frame_header *frame_header;
|
|
struct aw87xxx_container *scene_cnt;
|
|
struct aw_bin *bin_file;
|
|
};
|
|
|
|
struct aw87xxx_scene_list {
|
|
struct aw87xxx_scene_param aw_off;
|
|
struct aw87xxx_scene_param aw_music;
|
|
struct aw87xxx_scene_param aw_voice;
|
|
struct aw87xxx_scene_param aw_fm;
|
|
struct aw87xxx_scene_param aw_rcv;
|
|
};
|
|
|
|
struct aw87xxx_reg_param {
|
|
int reg_max;
|
|
const unsigned char *reg_access;
|
|
};
|
|
|
|
/********************************************
|
|
*
|
|
* aw87xxx struct
|
|
*
|
|
*******************************************/
|
|
|
|
struct aw87xxx {
|
|
bool open_dsp_en;
|
|
|
|
uint8_t i2c_seq;
|
|
uint8_t i2c_addr;
|
|
uint8_t chipid;
|
|
uint8_t product;
|
|
uint8_t hwen_flag;
|
|
uint8_t current_mode;
|
|
char cfg_name[AW87XXX_MODE_MAX][AW87XXX_CFG_NAME_MAX];
|
|
char vmax_cfg_name[AW87XXX_CFG_NAME_MAX];
|
|
char chip_name[10];
|
|
char bus_num[2];
|
|
|
|
int reset_gpio;
|
|
|
|
int32_t pa_channel;
|
|
|
|
char *name_suffix;
|
|
char channel[2];
|
|
char *end;
|
|
|
|
spinlock_t bin_parse_lock;
|
|
struct mutex lock;
|
|
struct mutex cfg_lock;
|
|
struct delayed_work ram_work;
|
|
struct i2c_client *i2c_client;
|
|
struct device *dev;
|
|
struct list_head list;
|
|
struct aw87xxx_scene_list aw87xxx_scene_ls;
|
|
struct aw87xxx_reg_param reg_param;
|
|
struct aw87xxx_monitor monitor;
|
|
};
|
|
|
|
/********************************************
|
|
*
|
|
* print information control
|
|
*
|
|
*******************************************/
|
|
#define aw_dev_err(dev, format, ...) \
|
|
pr_err("[%s]" format, dev_name(dev), ##__VA_ARGS__)
|
|
|
|
#define aw_dev_info(dev, format, ...) \
|
|
pr_info("[%s]" format, dev_name(dev), ##__VA_ARGS__)
|
|
|
|
#define aw_dev_dbg(dev, format, ...) \
|
|
pr_debug("[%s]" format, dev_name(dev), ##__VA_ARGS__)
|
|
|
|
/******************************************************************
|
|
* aw87xxx functions
|
|
*******************************************************************/
|
|
unsigned char aw87xxx_show_current_mode(int32_t channel);
|
|
int aw87xxx_audio_scene_load(uint8_t mode, int32_t channel);
|
|
|
|
#endif
|