mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-15 01:01:56 -04:00
camera: ois: update aw86006 driver to v0.5.0.4
[detail] update aw86006 driver to v0.5.0.4 Change-Id: Id31babd182095932606ddfec1a4ed1e45c6be32b Signed-off-by: liuwang2 <liuwang2@lenovo.com> Reviewed-on: https://gerrit.mot.com/2238334 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: <zhaoxy41@motorola.com> Reviewed-by: XiaoFeng Wang <wangxf32@lenovo.com> Reviewed-by: Shuo Wang <wangsh18@motorola.com> Reviewed-by: Zhichao Chen <chenzc2@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
acc791f60f
commit
bf34dbc973
5 changed files with 918 additions and 682 deletions
File diff suppressed because it is too large
Load diff
|
|
@ -1,6 +1,14 @@
|
|||
#ifndef AW86006_OIS_H
|
||||
#define AW86006_OIS_H
|
||||
|
||||
/* Log Format */
|
||||
#define AW_LOGI(format, ...) \
|
||||
CAM_INFO(CAM_OIS, format, ##__VA_ARGS__)
|
||||
#define AW_LOGD(format, ...) \
|
||||
CAM_DBG(CAM_OIS, format, ##__VA_ARGS__)
|
||||
#define AW_LOGE(format, ...) \
|
||||
CAM_ERR(CAM_OIS, format, ##__VA_ARGS__)
|
||||
|
||||
/* I2c address */
|
||||
#define AW_SHUTDOWN_I2C_ADDR (0xC2 >> 1) /* 0x61 */
|
||||
#define AW_WAKEUP_I2C_ADDR (0xD2 >> 1) /* 0x69 */
|
||||
|
|
@ -30,6 +38,7 @@
|
|||
#define OIS_SUCCESS (0)
|
||||
#define AW_IC_STANDBY (1)
|
||||
#define AW_FLASH_WRITE_CONNECT
|
||||
/* #define AW_SOC_FLASH_READ_FLAG */
|
||||
|
||||
/* Loop */
|
||||
#define AW_STAY_ON_MOVE_LOOP (20)
|
||||
|
|
@ -40,9 +49,16 @@
|
|||
#define AW_FLASH_ERASE_ERROR_LOOP (2)
|
||||
#define AW_JUMP_BOOT_LOOP (6)
|
||||
#define AW_JUMP_MOVE_LOOP (6)
|
||||
#define AW_STOP_CMD_LOOP (10)
|
||||
|
||||
/* Addr or data size */
|
||||
#define AW_SIZE_BYTE_0 (0)
|
||||
#define AW_SIZE_BYTE_1 (1)
|
||||
#define AW_SIZE_BYTE_2 (2)
|
||||
#define AW_SIZE_BYTE_3 (3)
|
||||
#define AW_SIZE_BYTE_4 (4)
|
||||
#define AW_SIZE_BYTE_12 (12)
|
||||
#define AW_SIZE_BYTE_20 (20)
|
||||
#define AW_PROTOCOL_SIZE (14)
|
||||
#define AW_DATA_SHIFT_0_BIT (0)
|
||||
#define AW_DATA_SHIFT_8_BIT (8)
|
||||
#define AW_DATA_SHIFT_16_BIT (16)
|
||||
|
|
@ -80,7 +96,6 @@
|
|||
#define AW_FW_SHIFT_UPDATE_FLAG (AW_FW_SHIFT_MOVE_LENGTH + 8)
|
||||
#define AW_ARRAY_SHIFT_UPDATE_FLAG (AW_FW_SHIFT_UPDATE_FLAG - AW_FLASH_MOVE_LENGTH)
|
||||
|
||||
|
||||
/* SOC */
|
||||
enum soc_status {
|
||||
SOC_OK = 0,
|
||||
|
|
@ -93,65 +108,77 @@ enum soc_status {
|
|||
};
|
||||
|
||||
enum soc_module {
|
||||
SOC_HANK = 0x01,
|
||||
SOC_SRAM = 0x02,
|
||||
SOC_FLASH = 0x03,
|
||||
SOC_END = 0x04,
|
||||
SOC_HANK = 0x01,
|
||||
SOC_SRAM = 0x02,
|
||||
SOC_FLASH = 0x03,
|
||||
SOC_END = 0x04,
|
||||
};
|
||||
|
||||
enum soc_enum {
|
||||
SOC_VERSION = 0x01,
|
||||
SOC_CTL = 0x00,
|
||||
SOC_ACK = 0x01,
|
||||
SOC_ADDR = 0x84,
|
||||
SOC_READ_ADDR = 0x48,
|
||||
SOC_ERASE_STRUCT_LEN = 6,
|
||||
SOC_READ_STRUCT_LEN = 6,
|
||||
SOC_PROTOCAL_HEAD = 9,
|
||||
SOC_CONNECT_WRITE_LEN = 9,
|
||||
SOC_ERASE_WRITE_LEN = 15,
|
||||
SOC_READ_WRITE_LEN = 15,
|
||||
SOC_ERASE_BLOCK_DELAY = 8,
|
||||
SOC_WRITE_BLOCK_HEAD = 13,
|
||||
SOC_WRITE_BLOCK_DELAY = 1000, /* us */
|
||||
SOC_READ_BLOCK_DELAY = 2000, /* us */
|
||||
SOC_CONNECT_DELAY = 2000, /* us */
|
||||
SOC_VERSION = 0x01,
|
||||
SOC_CTL = 0x00,
|
||||
SOC_ACK = 0x01,
|
||||
SOC_ADDR = 0x84,
|
||||
SOC_READ_ADDR = 0x48,
|
||||
SOC_ERASE_STRUCT_LEN = 6,
|
||||
SOC_READ_STRUCT_LEN = 6,
|
||||
SOC_PROTOCAL_HEAD = 9,
|
||||
SOC_CONNECT_WRITE_LEN = 9,
|
||||
SOC_ERASE_WRITE_LEN = 15,
|
||||
SOC_READ_WRITE_LEN = 15,
|
||||
SOC_ERASE_BLOCK_DELAY = 8,
|
||||
SOC_WRITE_BLOCK_HEAD = 13,
|
||||
SOC_WRITE_BLOCK_DELAY = 1000, /* us */
|
||||
SOC_READ_BLOCK_DELAY = 2000, /* us */
|
||||
SOC_CONNECT_DELAY = 2000, /* us */
|
||||
};
|
||||
|
||||
enum soc_flash_event {
|
||||
SOC_FLASH_WRITE = 0x01,
|
||||
SOC_FLASH_WRITE_ACK = 0x02,
|
||||
SOC_FLASH_READ = 0x11,
|
||||
SOC_FLASH_READ_ACK = 0x12,
|
||||
SOC_FLASH_ERASE_BLOCK = 0x21,
|
||||
SOC_FLASH_ERASE_BLOCK_ACK = 0x22,
|
||||
SOC_FLASH_ERASE_CHIP = 0x23,
|
||||
SOC_FLASH_ERASE_CHIP_ACK = 0x24,
|
||||
SOC_FLASH_WRITE = 0x01,
|
||||
SOC_FLASH_WRITE_ACK = 0x02,
|
||||
SOC_FLASH_READ = 0x11,
|
||||
SOC_FLASH_READ_ACK = 0x12,
|
||||
SOC_FLASH_ERASE_BLOCK = 0x21,
|
||||
SOC_FLASH_ERASE_BLOCK_ACK = 0x22,
|
||||
SOC_FLASH_ERASE_CHIP = 0x23,
|
||||
SOC_FLASH_ERASE_CHIP_ACK = 0x24,
|
||||
};
|
||||
|
||||
enum soc_hank_event {
|
||||
SOC_HANK_CONNECT = 0x01,
|
||||
SOC_HANK_CONNECT_ACK = 0x02,
|
||||
SOC_HANK_PROTICOL = 0x11,
|
||||
SOC_HANK_PROTICOL_ACK = 0x12,
|
||||
SOC_HANK_VERSION = 0x21,
|
||||
SOC_HANK_VERSION_ACK = 0x22,
|
||||
SOC_HANK_ID = 0x31,
|
||||
SOC_HANK_ID_ACK = 0x32,
|
||||
SOC_HANK_DATE = 0x33,
|
||||
SOC_HANK_DATA_ACK = 0x34,
|
||||
SOC_HANK_CONNECT = 0x01,
|
||||
SOC_HANK_CONNECT_ACK = 0x02,
|
||||
SOC_HANK_PROTICOL = 0x11,
|
||||
SOC_HANK_PROTICOL_ACK = 0x12,
|
||||
SOC_HANK_VERSION = 0x21,
|
||||
SOC_HANK_VERSION_ACK = 0x22,
|
||||
SOC_HANK_ID = 0x31,
|
||||
SOC_HANK_ID_ACK = 0x32,
|
||||
SOC_HANK_DATE = 0x33,
|
||||
SOC_HANK_DATA_ACK = 0x34,
|
||||
};
|
||||
|
||||
/* ISP */
|
||||
enum isp_enum {
|
||||
ISP_READ_VERSION_DELAY = 500, /* us */
|
||||
ISP_VERS_CONNECT_ACK = 0x01,
|
||||
ISP_VERSION_ACK_LEN = 5,
|
||||
ISP_EVENT_OK = 0x01,
|
||||
ISP_READ_VERSION_DELAY = 500, /* us */
|
||||
ISP_VERS_CONNECT_ACK = 0x01,
|
||||
ISP_VERSION_ACK_LEN = 5,
|
||||
ISP_EVENT_OK = 0x01,
|
||||
};
|
||||
|
||||
enum awrw_flag {
|
||||
AW_SEQ_WRITE = 0,
|
||||
AW_SEQ_READ = 1,
|
||||
AW_SEQ_WRITE = 0,
|
||||
AW_SEQ_READ = 1,
|
||||
};
|
||||
|
||||
enum axis_info {
|
||||
AXIS_X,
|
||||
AXIS_Y,
|
||||
AXIS_Z,
|
||||
};
|
||||
|
||||
struct accelgyro_dift {
|
||||
int16_t gyro_dift[3];
|
||||
int16_t accel_dift[3];
|
||||
};
|
||||
|
||||
/* Struct */
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
|
||||
extern int dw9781c_check_fw_download(struct camera_io_master * io_master_info, const uint8_t *fwData, uint32_t fwSize);
|
||||
extern void dw9781_post_firmware_download(struct camera_io_master * io_master_info, const uint8_t *fwData, uint32_t fwSize);
|
||||
extern int aw_firmware_update(struct cam_ois_ctrl_t *o_ctrl, const struct firmware *fw);
|
||||
extern int aw86006_firmware_update(struct cam_ois_ctrl_t *o_ctrl, const struct firmware *fw);
|
||||
|
||||
int32_t cam_ois_construct_default_power_setting(
|
||||
struct cam_sensor_power_ctrl_t *power_info)
|
||||
|
|
@ -415,9 +415,9 @@ static int cam_ois_fw_prog_download(struct cam_ois_ctrl_t *o_ctrl)
|
|||
CAM_INFO(CAM_OIS, "Firmware download started.");
|
||||
}
|
||||
else if (strstr(o_ctrl->ois_name, "aw86006")) {
|
||||
mutex_lock(&o_ctrl->ois_mutex_aw);
|
||||
rc = aw_firmware_update(o_ctrl, fw);
|
||||
mutex_unlock(&o_ctrl->ois_mutex_aw);
|
||||
mutex_lock(&o_ctrl->aw_ois_mutex);
|
||||
rc = aw86006_firmware_update(o_ctrl, fw);
|
||||
mutex_unlock(&o_ctrl->aw_ois_mutex);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,8 @@
|
|||
#include "cam_debug_util.h"
|
||||
#include "camera_main.h"
|
||||
|
||||
extern int aw_ois_init(struct cam_ois_ctrl_t *o_ctrl); /* awinic add */
|
||||
extern int aw_ois_exit(struct cam_ois_ctrl_t *o_ctrl); /* awinic add */
|
||||
extern int aw86006_ois_init(struct cam_ois_ctrl_t *o_ctrl); /* awinic add */
|
||||
extern int aw86006_ois_exit(struct cam_ois_ctrl_t *o_ctrl); /* awinic add */
|
||||
|
||||
static int cam_ois_clear_data_ready(struct cam_ois_ctrl_t *o_ctrl)
|
||||
{
|
||||
|
|
@ -515,7 +515,7 @@ static int cam_ois_component_bind(struct device *dev,
|
|||
init_completion(&o_ctrl->ois_data_complete);
|
||||
|
||||
if (o_ctrl->ic_name != NULL && strstr(o_ctrl->ic_name, "aw86006"))
|
||||
aw_ois_init(o_ctrl);
|
||||
aw86006_ois_init(o_ctrl);
|
||||
|
||||
if (o_ctrl->is_ois_vsync_irq_supported) {
|
||||
o_ctrl->vsync_irq = platform_get_irq_optional(pdev, 0);
|
||||
|
|
@ -571,7 +571,7 @@ static void cam_ois_component_unbind(struct device *dev,
|
|||
|
||||
CAM_INFO(CAM_OIS, "platform driver remove invoked");
|
||||
if (o_ctrl->ic_name != NULL && strstr(o_ctrl->ic_name, "aw86006"))
|
||||
aw_ois_exit(o_ctrl);
|
||||
aw86006_ois_exit(o_ctrl);
|
||||
|
||||
soc_info = &o_ctrl->soc_info;
|
||||
for (i = 0; i < soc_info->num_clk; i++)
|
||||
|
|
|
|||
|
|
@ -94,6 +94,13 @@ struct cam_ois_intf_params {
|
|||
struct cam_req_mgr_crm_cb *crm_cb;
|
||||
};
|
||||
|
||||
struct awrw_ctrl {
|
||||
uint32_t addr[4];
|
||||
uint16_t reg_num;
|
||||
uint8_t flag;
|
||||
uint8_t *reg_data;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct cam_ois_ctrl_t - OIS ctrl private data
|
||||
* @device_name : ois device_name
|
||||
|
|
@ -168,11 +175,9 @@ struct cam_ois_ctrl_t {
|
|||
uint64_t mono_timestamp;
|
||||
/* awinic_add */
|
||||
const char *ic_name;
|
||||
struct work_struct fw_update_work;
|
||||
uint32_t awrw_flag;
|
||||
uint32_t reg_num;
|
||||
uint8_t *reg_data;
|
||||
struct mutex ois_mutex_aw;
|
||||
struct work_struct aw_fw_update_work;
|
||||
struct mutex aw_ois_mutex;
|
||||
struct awrw_ctrl *awrw_ctrl;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue