152 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| 
 | |
| #ifndef __AW_DEVICE_H__
 | |
| #define __AW_DEVICE_H__
 | |
| #include <linux/version.h>
 | |
| #include <linux/kernel.h>
 | |
| #include <sound/control.h>
 | |
| #include <sound/soc.h>
 | |
| #include "aw_acf_bin.h"
 | |
| 
 | |
| #define AW87XXX_PID_9B_PRODUCT_MAX	(1)
 | |
| #define AW87XXX_PID_39_PRODUCT_MAX	(3)
 | |
| #define AW87XXX_PID_59_3X9_PRODUCT_MAX	(2)
 | |
| #define AW87XXX_PID_59_5X9_PRODUCT_MAX	(4)
 | |
| #define AW87XXX_PID_5A_PRODUCT_MAX	(5)
 | |
| #define AW87XXX_PID_76_PROFUCT_MAX	(3)
 | |
| #define AW_PRODUCT_NAME_LEN		(8)
 | |
| 
 | |
| #define AW_GPIO_HIGHT_LEVEL		(1)
 | |
| #define AW_GPIO_LOW_LEVEL		(0)
 | |
| 
 | |
| #define AW_I2C_RETRIES			(5)
 | |
| #define AW_I2C_RETRY_DELAY		(2)
 | |
| #define AW_I2C_READ_MSG_NUM		(2)
 | |
| 
 | |
| #define AW_READ_CHIPID_RETRIES		(5)
 | |
| #define AW_READ_CHIPID_RETRY_DELAY	(2)
 | |
| #define AW_DEV_REG_CHIPID		(0x00)
 | |
| 
 | |
| #define AW_DEV_REG_INVALID_MASK		(0xff)
 | |
| 
 | |
| #define AW_NO_RESET_GPIO		(-1)
 | |
| 
 | |
| #define AW_PID_9B_BIN_REG_CFG_COUNT	(10)
 | |
| 
 | |
| /********************************************
 | |
|  *
 | |
|  * aw87xxx devices attributes
 | |
|  *
 | |
|  *******************************************/
 | |
| struct aw_device;
 | |
| 
 | |
| struct aw_device_ops {
 | |
| 	int (*pwr_on_func)(struct aw_device *aw_dev, struct aw_data_container *data);
 | |
| 	int (*pwr_off_func)(struct aw_device *aw_dev, struct aw_data_container *data);
 | |
| };
 | |
| 
 | |
| enum aw_dev_chipid {
 | |
| 	AW_DEV_CHIPID_18 = 0x18,
 | |
| 	AW_DEV_CHIPID_39 = 0x39,
 | |
| 	AW_DEV_CHIPID_59 = 0x59,
 | |
| 	AW_DEV_CHIPID_69 = 0x69,
 | |
| 	AW_DEV_CHIPID_5A = 0x5A,
 | |
| 	AW_DEV_CHIPID_9A = 0x9A,
 | |
| 	AW_DEV_CHIPID_9B = 0x9B,
 | |
| 	AW_DEV_CHIPID_76 = 0x76,
 | |
| };
 | |
| 
 | |
| enum aw_dev_hw_status {
 | |
| 	AW_DEV_HWEN_OFF = 0,
 | |
| 	AW_DEV_HWEN_ON,
 | |
| 	AW_DEV_HWEN_INVALID,
 | |
| 	AW_DEV_HWEN_STATUS_MAX,
 | |
| };
 | |
| 
 | |
| enum aw_dev_soft_off_enable {
 | |
| 	AW_DEV_SOFT_OFF_DISENABLE = 0,
 | |
| 	AW_DEV_SOFT_OFF_ENABLE = 1,
 | |
| };
 | |
| 
 | |
| enum aw_dev_soft_rst_enable {
 | |
| 	AW_DEV_SOFT_RST_DISENABLE = 0,
 | |
| 	AW_DEV_SOFT_RST_ENABLE = 1,
 | |
| };
 | |
| 
 | |
| enum aw_reg_receiver_mode {
 | |
| 	AW_NOT_REC_MODE = 0,
 | |
| 	AW_IS_REC_MODE = 1,
 | |
| };
 | |
| 
 | |
| struct aw_mute_desc {
 | |
| 	uint8_t addr;
 | |
| 	uint8_t enable;
 | |
| 	uint8_t disable;
 | |
| 	uint16_t mask;
 | |
| };
 | |
| 
 | |
| struct aw_soft_rst_desc {
 | |
| 	int len;
 | |
| 	unsigned char *access;
 | |
| };
 | |
| 
 | |
| struct aw_esd_check_desc {
 | |
| 	uint8_t first_update_reg_addr;
 | |
| 	uint8_t first_update_reg_val;
 | |
| };
 | |
| 
 | |
| struct aw_rec_mode_desc {
 | |
| 	uint8_t addr;
 | |
| 	uint8_t enable;
 | |
| 	uint8_t disable;
 | |
| 	uint8_t mask;
 | |
| };
 | |
| 
 | |
| struct aw_device {
 | |
| 	uint8_t i2c_addr;
 | |
| 	uint8_t chipid;
 | |
| 	uint8_t soft_rst_enable;
 | |
| 	uint8_t soft_off_enable;
 | |
| 	uint8_t is_rec_mode;
 | |
| 	int hwen_status;
 | |
| 	int i2c_bus;
 | |
| 	int rst_gpio;
 | |
| 	int rst_shared_gpio;
 | |
| 	int reg_max_addr;
 | |
| 	int product_cnt;
 | |
| 	const char **product_tab;
 | |
| 	const unsigned char *reg_access;
 | |
| 
 | |
| 	struct device *dev;
 | |
| 	struct i2c_client *i2c;
 | |
| 	struct aw_mute_desc mute_desc;
 | |
| 	struct aw_soft_rst_desc soft_rst_desc;
 | |
| 	struct aw_esd_check_desc esd_desc;
 | |
| 	struct aw_rec_mode_desc rec_desc;
 | |
| 
 | |
| 	struct aw_device_ops ops;
 | |
| };
 | |
| 
 | |
| 
 | |
| int aw_dev_i2c_write_byte(struct aw_device *aw_dev,
 | |
| 			uint8_t reg_addr, uint8_t reg_data);
 | |
| int aw_dev_i2c_read_byte(struct aw_device *aw_dev,
 | |
| 			uint8_t reg_addr, uint8_t *reg_data);
 | |
| int aw_dev_i2c_read_msg(struct aw_device *aw_dev,
 | |
| 	uint8_t reg_addr, uint8_t *data_buf, uint32_t data_len);
 | |
| int aw_dev_i2c_write_bits(struct aw_device *aw_dev,
 | |
| 	uint8_t reg_addr, uint8_t mask, uint8_t reg_data);
 | |
| void aw_dev_soft_reset(struct aw_device *aw_dev);
 | |
| void aw_dev_hw_pwr_ctrl(struct aw_device *aw_dev, bool enable);
 | |
| int aw_dev_default_profile_check(struct aw_device *aw_dev,
 | |
| 		int profile, struct aw_data_container *profile_data);
 | |
| int aw_dev_default_pwr_on(struct aw_device *aw_dev,
 | |
| 			struct aw_data_container *profile_data);
 | |
| int aw_dev_default_pwr_off(struct aw_device *aw_dev,
 | |
| 			struct aw_data_container *profile_data);
 | |
| int aw_dev_esd_reg_status_check(struct aw_device *aw_dev);
 | |
| int aw_dev_check_reg_is_rec_mode(struct aw_device *aw_dev);
 | |
| int aw_dev_init(struct aw_device *aw_dev);
 | |
| 
 | |
| #endif
 |