sysfs_debug.pattern_en = cmd;
break;
default:
- pr_warn("%s: invalid paramter (%d)\n", __func__, cmd);
+ pr_warn("%s: invalid paramter (%lu)\n", __func__, cmd);
break;
}
{
int ret = 0;
u32 hashkey;
- struct v4l2_subdev *subdev_module;
- struct fimc_is_module_enum *module;
- struct fimc_is_device_sensor_peri *sensor_peri = NULL;
- struct v4l2_subdev *subdev_cis = NULL;
- struct fimc_is_cis *cis = NULL;
FIMC_BUG(!device);
FIMC_BUG(!frame);
- subdev_module = device->subdev_module;
- if (!subdev_module) {
- err("subdev_module is NULL");
- return -EINVAL;
- }
-
- module = v4l2_get_subdevdata(subdev_module);
- if (!module) {
- err("module is NULL");
- return -EINVAL;
- }
- sensor_peri = (struct fimc_is_device_sensor_peri *)module->private_data;
-
- subdev_cis = sensor_peri->subdev_cis;
- if (!subdev_cis) {
- err("[SEN:%d] no subdev_cis", module->sensor_id);
- return -ENXIO;
- }
- cis = (struct fimc_is_cis *)v4l2_get_subdevdata(subdev_cis);
- FIMC_BUG(!cis);
-
hashkey = frame->fcount % FIMC_IS_TIMESTAMP_HASH_KEY;
if (frame->shot) {
frame->shot->dm.request.frameCount = frame->fcount;
* So, embedded data should be extraced before frame end.
*/
frame->shot->udm.frame_id = device->frame_id[hashkey];
-
- /* get gyro self test value from cis */
- if (cis->gyro_self_test_step == 2) {
- frame->shot_ext->user.gyro_info.x = cis->gyro_test_val.x;
- frame->shot_ext->user.gyro_info.y = cis->gyro_test_val.y;
- frame->shot_ext->user.gyro_info.z = cis->gyro_test_val.z;
- frame->shot_ext->user.gyro_info.state = cis->gyro_test_val.state;
- }
#ifdef DBG_JITTER
fimc_is_jitter(frame->shot->dm.sensor.timeStamp);
#endif
}
#endif
-#ifdef ENABLE_FAST_AF_TRIGGER
- /* for reduce AF control delay,
- * it need to copy "afMode & afTrigger" in queued frame
- * at only AF mode == CONTINUOUS_PICTURE or CONTINUOUS_VIDEO
- * AF trigger == START
- * PreCaptureTrigger != START
- */
- if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state)) {
- struct fimc_is_frame *prev;
-
- if (((frame->shot->ctl.aa.afMode == AA_AFMODE_CONTINUOUS_VIDEO ||
- frame->shot->ctl.aa.afMode == AA_AFMODE_CONTINUOUS_PICTURE) &&
- frame->shot->ctl.aa.afTrigger == AA_AF_TRIGGER_START) &&
- frame->shot->ctl.aa.aePrecaptureTrigger != AA_AE_PRECAPTURE_TRIGGER_START) {
-
- list_for_each_entry_reverse(prev, &framemgr->queued_list[FS_REQUEST], list) {
- prev->shot->ctl.aa.afMode = frame->shot->ctl.aa.afMode;
- prev->shot->ctl.aa.afTrigger = frame->shot->ctl.aa.afTrigger;
- }
-
- list_for_each_entry_reverse(prev, &framemgr->queued_list[FS_PROCESS], list) {
- prev->shot->ctl.aa.afMode = frame->shot->ctl.aa.afMode;
- prev->shot->ctl.aa.afTrigger = frame->shot->ctl.aa.afTrigger;
- }
- }
- }
-#endif
-
#ifdef SENSOR_REQUEST_DELAY
if (test_bit(FIMC_IS_GROUP_OTF_INPUT, &group->state) &&
(frame->shot->uctl.opMode == CAMERA_OP_MODE_HAL3_GED)) {
break;
}
- if (device->sensor &&
- (device->sensor->subdev_eeprom || device->sensor->use_otp_cal)) {
+ if (device->sensor->subdev_eeprom || device->sensor->use_otp_cal) {
/* Sensor EEPROM CAL data status update */
for (i = 0; i < CAMERA_CRC_INDEX_MAX; i++)
frame->shot_ext->user.crc_result[i] = device->sensor->cal_status[i];
sensor_peri = (struct fimc_is_device_sensor_peri *)module->private_data;
device = v4l2_get_subdev_hostdata(module->subdev);
core = (struct fimc_is_core *)dev_get_drvdata(fimc_is_dev);
-
- FIMC_BUG(!core);
-
specific = core->vender.private_data;
switch (scenario) {
}
if (device->ois) {
i2c_channel = module->ext.ois_con.peri_setting.i2c.channel;
-
- if (i2c_config_state == I2C_PIN_STATE_ON)
- atomic_inc(&core->i2c_rsccount[i2c_channel]);
- else if (i2c_config_state == I2C_PIN_STATE_OFF)
- atomic_dec(&core->i2c_rsccount[i2c_channel]);
+ if (core != NULL) {
+ if (i2c_config_state == I2C_PIN_STATE_ON)
+ atomic_inc(&core->i2c_rsccount[i2c_channel]);
+ else if (i2c_config_state == I2C_PIN_STATE_OFF)
+ atomic_dec(&core->i2c_rsccount[i2c_channel]);
+ }
if (atomic_read(&core->i2c_rsccount[i2c_channel]) == value) {
info("%s[%d] ois i2c config(%d), position(%d), scenario(%d), i2c_channel(%d)\n",
goto p_err;
}
- if (!V4L2_TYPE_IS_MULTIPLANAR(buf->type)) {
- mverr("the type of passed buffer is not multi-planar",
- vctx, video);
- ret = -EINVAL;
- goto p_err;
- }
-
- if (!buf->m.planes) {
- mverr("planes array not provided", vctx, video);
- ret = -EINVAL;
- goto p_err;
- }
-
- if (buf->length > FIMC_IS_MAX_PLANES) {
- mverr("incorrect planes array length", vctx, video);
- ret = -EINVAL;
- goto p_err;
- }
-
/* Destination */
memcpy(&pipe->buf[PIPE_SLOT_DST][index], buf, sizeof(struct v4l2_buffer));
memcpy(pipe->planes[PIPE_SLOT_DST][index], buf->m.planes, sizeof(struct v4l2_plane) * buf->length);
print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 32, 4,
hw_ip->regs, reg_size, false);
#else
- if (flag_print_log)
- print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 32, 4,
- hw_ip->regs, reg_size, false);
+ if (flag_print_log) {
+ if (hw_ip->id != DEV_HW_3AA1 || hw_ip->id != DEV_HW_VRA)
+ print_hex_dump(KERN_INFO, "", DUMP_PREFIX_OFFSET, 32, 4,
+ hw_ip->regs, reg_size, false);
+ }
#endif
if (IS_ERR_OR_NULL(hw_ip->sfr_b_dump))
return;
}
if (done_type == IS_SHOT_TIMEOUT)
- _fimc_is_hardware_sfr_dump(hw_ip, false);
+ _fimc_is_hardware_sfr_dump(hw_ip, true);
}
head = head->child;
}
/* static reserved memory for libraries */
#define CDH_SIZE SZ_128K /* CDH : Camera Debug Helper */
-#ifdef CONFIG_KASAN
#define LIB_OFFSET (VMALLOC_START + 0xF6000000 - 0x8000000)
-#else
-#define LIB_OFFSET (VMALLOC_START + 0x1000000000UL + 0xF6000000 - 0x8000000)
-#endif
-
#define __LIB_START (LIB_OFFSET + 0x04000000 - CDH_SIZE)
#define LIB_START (__LIB_START + CDH_SIZE)
CAMERA_CRC_INDEX_MAX,
};
-enum sensor_gyro_info_state {
- SENSOR_GYRO_INFO_STATE_BASE = 0,
- SENSOR_GYRO_INFO_STATE_SUCCESS,
- SENSOR_GYRO_INFO_STATE_FAIL,
- SENSOR_GYRO_INFO_STATE_MAX,
-};
-
struct facial_score {
int32_t left_eye;
int32_t right_eye;
char setfile_version[128];
};
-struct sensor_gyro_info {
- int32_t x;
- int32_t y;
- int32_t z;
- enum sensor_gyro_info_state state;
-};
-
struct camera2_shot_ext_user {
int crc_result[CAMERA_CRC_INDEX_MAX];
int focus_actual_pos;
int focus_target_pos;
struct ddk_setfile_ver ddk_version;
-
- struct sensor_gyro_info gyro_info;
};
/** \brief
/* HACK */
#define DISABLE_CHECK_PERFRAME_FMT_SIZE
-#define BDS_DVFS
+/* #define BDS_DVFS */
#define ENABLE_HW_FAST_READ_OUT
#define FULL_OTF_TAIL_GROUP_ID GROUP_ID_MCS0
index = PARAM_MCS_OUTPUT3;
target_addr = ldr_frame->sc3TargetAddress;
break;
+ case FIMC_IS_VIDEO_M4P_NUM:
+ index = PARAM_MCS_OUTPUT4;
+ target_addr = ldr_frame->sc4TargetAddress;
+ break;
+ case FIMC_IS_VIDEO_M5P_NUM:
+ index = PARAM_MCS_OUTPUT5;
+ target_addr = ldr_frame->sc5TargetAddress;
+ break;
default:
mserr("vid(%d) is not matched", device, subdev, node->vid);
ret = -EINVAL;
actuator_info->pcal = (pcal_msb << 8) | pcal_lsb;
actuator_info->ncal = (ncal_msb << 8) | ncal_lsb;
- /* read pcal, ncal */
- actuator_info = (struct dw9839_actuator_info *)actuator->priv_info;
- ret = fimc_is_sensor_addr8_read8(client, REG_PCAL_MSB, &pcal_msb);
- if (ret < 0)
- goto p_err;
- ret = fimc_is_sensor_addr8_read8(client, REG_PCAL_LSB, &pcal_lsb);
- if (ret < 0)
- goto p_err;
- ret = fimc_is_sensor_addr8_read8(client, REG_NCAL_MSB, &ncal_msb);
- if (ret < 0)
- goto p_err;
- ret = fimc_is_sensor_addr8_read8(client, REG_NCAL_LSB, &ncal_lsb);
- if (ret < 0)
- goto p_err;
-
- actuator_info->pcal = (pcal_msb << 8) | pcal_lsb;
- actuator_info->ncal = (ncal_msb << 8) | ncal_lsb;
-
info("%s done\n", __func__);
p_err:
return ret;
return ret;
}
-#if 0
+
int sensor_dw9839_actuator_get_actual_position(struct v4l2_subdev *subdev, u32 *info)
{
int ret = 0;
pr_info("[%s] time %lu us", __func__, (end.tv_sec - st.tv_sec) * 1000000 + (end.tv_usec - st.tv_usec));
#endif
- /* dw9839 actuator do not use af cal */
- actuator->actuator_data.actuator_init = false;
p_err:
I2C_MUTEX_UNLOCK(actuator->i2c_lock);
return ret;
}
-#endif
-
-int sensor_dw9839_actuator_get_actual_position(struct v4l2_subdev *subdev, u32 *info)
-{
- int ret = 0;
- struct fimc_is_actuator *actuator;
- struct i2c_client *client;
- struct dw9839_actuator_info *actuator_info;
- u8 pos_msb = 0, pos_lsb = 0;
- u32 adc_pos;
- u64 temp;
-
-#ifdef DEBUG_ACTUATOR_TIME
- struct timeval st, end;
-
- do_gettimeofday(&st);
-#endif
-
- FIMC_BUG(!subdev);
- FIMC_BUG(!info);
-
- actuator = (struct fimc_is_actuator *)v4l2_get_subdevdata(subdev);
- FIMC_BUG(!actuator);
-
- client = actuator->client;
- if (unlikely(!client)) {
- err("client is NULL");
- ret = -EINVAL;
- goto p_err;
- }
-
- FIMC_BUG(!actuator->priv_info);
- actuator_info = (struct dw9839_actuator_info *)actuator->priv_info;
-
- ret = fimc_is_sensor_addr8_write8(client, REG_ADC_R_EN, 1);
- if (ret < 0)
- goto p_err;
- ret = fimc_is_sensor_addr8_read8(client, REG_ADC_R_MSB, &pos_msb);
- if (ret < 0)
- goto p_err;
- ret = fimc_is_sensor_addr8_read8(client, REG_ADC_R_LSB, &pos_lsb);
- if (ret < 0)
- goto p_err;
-
- /* pos_msb uses [1:0] bit */
- adc_pos = ((pos_msb & 0x3) << 8) | pos_lsb;
-
- /* convert adc_pos to 10bit position
- * ncal <= adc_pos <= pcal ------> 0 <= 10bit_pos <= 1023
- */
- temp = (u64)(adc_pos - actuator_info->ncal) << ACTUATOR_POS_SIZE_10BIT;
- *info = (u32)(temp / (u64)(actuator_info->pcal - actuator_info->ncal));
-
- if (*info > 1023)
- *info = 1023;
-
- dbg_actuator("%s: cal(p:%d, n:%d), adc_pos(msb:%d, lsb:%d, sum:%d) -> target_pos(%d) actual pos(%d)\n",
- __func__, actuator_info->pcal, actuator_info->ncal, pos_msb & 0x3, pos_lsb, adc_pos,
- actuator->position, *info);
-
-#ifdef DEBUG_ACTUATOR_TIME
- do_gettimeofday(&end);
- pr_info("[%s] time %lu us", __func__, (end.tv_sec - st.tv_sec) * 1000000 + (end.tv_usec - st.tv_usec));
-#endif
-
-p_err:
- return ret;
-}
static int sensor_dw9839_actuator_g_ctrl(struct v4l2_subdev *subdev, struct v4l2_control *ctrl)
{
return ret;
}
-static int sensor_12a10_cis_set_dual_slave_setting(struct fimc_is_cis *cis)
-{
- int ret = 0;
- struct i2c_client *client;
-
- cis_shared_data *cis_data;
- FIMC_BUG(!cis);
-
- client = cis->client;
- if (unlikely(!client)) {
- err("client is NULL");
- ret = -EINVAL;
- goto p_err;
- }
-
- dbg_sensor(1, "[MOD:D:%d] %s\n", cis->id, __func__);
-
- cis_data = cis->cis_data;
-
- /* Vsync Input Source Select */
- fimc_is_sensor_write8(client, 0x3002, 0x21);
- fimc_is_sensor_write8(client, 0x3643, 0x22);
- fimc_is_sensor_write8(client, 0x3822, 0xa1);
- fimc_is_sensor_write8(client, 0x3823, 0x78);
- fimc_is_sensor_write8(client, 0x3824, 0x00);// frame start sync
- fimc_is_sensor_write8(client, 0x3825, 0x20);
- fimc_is_sensor_write8(client, 0x3826, 0x00);
- fimc_is_sensor_write8(client, 0x3827, 0x08);
- fimc_is_sensor_write8(client, 0x3c80, 0x08);
-
-p_err:
- return ret;
-}
-
-int sensor_12a10_cis_set_dual_setting(struct v4l2_subdev *subdev)
-{
- int ret = 0;
- struct fimc_is_cis *cis;
- struct i2c_client *client;
-
- FIMC_BUG(!subdev);
-
- cis = (struct fimc_is_cis *)v4l2_get_subdevdata(subdev);
-
- FIMC_BUG(!cis);
-
- client = cis->client;
- if (unlikely(!client)) {
- err("client is NULL");
- ret = -EINVAL;
- goto p_err;
- }
-
- switch (cis->dual_sync_mode) {
- case DUAL_SYNC_MASTER:
- break;
- case DUAL_SYNC_SLAVE:
- ret = sensor_12a10_cis_set_dual_slave_setting(cis);
- if (ret)
- err("12a10 dual slave setting fail");
- break;
- default:
- err("invalid cis->dual_sync_mode(%d)\n", cis->dual_sync_mode);
- ret = -EINVAL;
- }
-
-p_err:
- return ret;
-}
-
static struct fimc_is_cis_ops cis_ops = {
.cis_init = sensor_12a10_cis_init,
.cis_log_status = sensor_12a10_cis_log_status,
ret = fimc_is_sensor_write8(client, 0x3208, 0x10);
ret = fimc_is_sensor_write8(client, 0x320b, 0x00);
ret = fimc_is_sensor_write8(client, 0x3208, 0xa0);
-
+
if (ret < 0)
goto p_err;
.cis_wait_streamon = sensor_cis_wait_streamon,
.cis_data_calculation = sensor_2l1_cis_data_calc,
.cis_set_long_term_exposure = sensor_2l1_cis_long_term_exposure,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_2l1_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_wait_streamon = sensor_cis_wait_streamon,
.cis_data_calculation = sensor_2l2_cis_data_calc,
.cis_set_long_term_exposure = sensor_2l2_cis_long_term_exposure,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_2l2_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_set_long_term_exposure = sensor_2l3_cis_long_term_exposure,
.cis_set_frs_control = sensor_2l3_cis_set_frs_control,
.cis_set_super_slow_motion_roi = sensor_2l3_cis_set_super_slow_motion_roi,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
.cis_check_rev = sensor_2l3_cis_check_rev,
.cis_set_super_slow_motion_threshold = sensor_2l3_cis_set_super_slow_motion_threshold,
.cis_get_super_slow_motion_threshold = sensor_2l3_cis_get_super_slow_motion_threshold,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_retention_prepare = sensor_2l7_cis_retention_prepare,
.cis_retention_crc_check = sensor_2l7_cis_retention_crc_check,
#endif
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_2l7_probe(struct i2c_client *client,
#endif
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int __init cis_2p2_probe(struct i2c_client *client,
sensor_2p2_max_setfile_num = sizeof(sensor_2p2_setfiles_A) / sizeof(sensor_2p2_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
int cis_2p6_probe(struct i2c_client *client,
sensor_2p6_pllinfos = sensor_2p6_pllinfos_A;
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
return ret;
}
-void sensor_2p7sq_cis_select_setfile(struct v4l2_subdev *subdev)
-{
- u8 rev = 0;
- struct fimc_is_cis *cis = NULL;
-
- WARN_ON(!subdev);
-
- cis = (struct fimc_is_cis *)v4l2_get_subdevdata(subdev);
- WARN_ON(!cis);
- WARN_ON(!cis->cis_data);
-
- rev = cis->cis_data->cis_rev;
-
- switch (rev) {
- case 0xA0: /* 2P7SQ */
- pr_info("%s setfile_A(2P7SQ)\n", __func__);
- sensor_2p7sq_global = sensor_2p7sq_setfile_A_Global;
- sensor_2p7sq_global_size = ARRAY_SIZE(sensor_2p7sq_setfile_A_Global);
- sensor_2p7sq_setfiles = sensor_2p7sq_setfiles_A;
- sensor_2p7sq_setfile_sizes = sensor_2p7sq_setfile_A_sizes;
- sensor_2p7sq_max_setfile_num = ARRAY_SIZE(sensor_2p7sq_setfiles_A);
- sensor_2p7sq_pllinfos = sensor_2p7sq_pllinfos_A;
- break;
- default:
- err("Unsupported 2p7sq sensor revision(%#x) use setfile_A for default\n", rev);
- sensor_2p7sq_global = sensor_2p7sq_setfile_A_Global;
- sensor_2p7sq_global_size = ARRAY_SIZE(sensor_2p7sq_setfile_A_Global);
- sensor_2p7sq_setfiles = sensor_2p7sq_setfiles_A;
- sensor_2p7sq_setfile_sizes = sensor_2p7sq_setfile_A_sizes;
- sensor_2p7sq_max_setfile_num = ARRAY_SIZE(sensor_2p7sq_setfiles_A);
- sensor_2p7sq_pllinfos = sensor_2p7sq_pllinfos_A;
- break;
- }
-}
-
/* CIS OPS */
int sensor_2p7sq_cis_init(struct v4l2_subdev *subdev)
{
ret = 0;
}
- sensor_2p7sq_cis_select_setfile(subdev);
-
cis->cis_data->cur_width = SENSOR_2P7SQ_MAX_WIDTH;
cis->cis_data->cur_height = SENSOR_2P7SQ_MAX_HEIGHT;
cis->cis_data->low_expo_start = 33000;
setfile = "default";
}
+ if (strcmp(setfile, "default") == 0 ||
+ strcmp(setfile, "setA") == 0) {
+ probe_info("%s setfile_A\n", __func__);
+ sensor_2p7sq_global = sensor_2p7sq_setfile_A_Global;
+ sensor_2p7sq_global_size = ARRAY_SIZE(sensor_2p7sq_setfile_A_Global);
+ sensor_2p7sq_setfiles = sensor_2p7sq_setfiles_A;
+ sensor_2p7sq_setfile_sizes = sensor_2p7sq_setfile_A_sizes;
+ sensor_2p7sq_pllinfos = sensor_2p7sq_pllinfos_A;
+ sensor_2p7sq_max_setfile_num = ARRAY_SIZE(sensor_2p7sq_setfiles_A);
+ } else if (strcmp(setfile, "setB") == 0) {
+ probe_info("%s setfile_B\n", __func__);
+ sensor_2p7sq_global = sensor_2p7sq_setfile_B_Global;
+ sensor_2p7sq_global_size = ARRAY_SIZE(sensor_2p7sq_setfile_B_Global);
+ sensor_2p7sq_setfiles = sensor_2p7sq_setfiles_B;
+ sensor_2p7sq_setfile_sizes = sensor_2p7sq_setfile_B_sizes;
+ sensor_2p7sq_pllinfos = sensor_2p7sq_pllinfos_B;
+ sensor_2p7sq_max_setfile_num = ARRAY_SIZE(sensor_2p7sq_setfiles_B);
+ } else {
+ err("%s setfile index out of bound, take default (setfile_A)", __func__);
+ sensor_2p7sq_global = sensor_2p7sq_setfile_A_Global;
+ sensor_2p7sq_global_size = ARRAY_SIZE(sensor_2p7sq_setfile_A_Global);
+ sensor_2p7sq_setfiles = sensor_2p7sq_setfiles_A;
+ sensor_2p7sq_setfile_sizes = sensor_2p7sq_setfile_A_sizes;
+ sensor_2p7sq_pllinfos = sensor_2p7sq_pllinfos_A;
+ sensor_2p7sq_max_setfile_num = ARRAY_SIZE(sensor_2p7sq_setfiles_A);
+ }
+
cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_2p7sx_probe(struct i2c_client *client,
sensor_2p7sx_max_setfile_num = ARRAY_SIZE(sensor_2p7sx_setfiles_A);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_2p8_probe(struct i2c_client *client,
sensor_2p8_max_setfile_num = sizeof(sensor_2p8_setfiles_A) / sizeof(sensor_2p8_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
return ret;
}
-void sensor_2t7sx_cis_select_setfile(struct v4l2_subdev *subdev)
-{
- u8 rev = 0;
- struct fimc_is_cis *cis = NULL;
-
- WARN_ON(!subdev);
-
- cis = (struct fimc_is_cis *)v4l2_get_subdevdata(subdev);
- WARN_ON(!cis);
- WARN_ON(!cis->cis_data);
-
- rev = cis->cis_data->cis_rev;
-
- switch (rev) {
- case 0xA0: /* 2T7SX */
- pr_info("%s setfile_A(2T7SX)\n", __func__);
- sensor_2t7sx_global = sensor_2t7sx_setfile_A_Global;
- sensor_2t7sx_global_size = ARRAY_SIZE(sensor_2t7sx_setfile_A_Global);
- sensor_2t7sx_setfiles = sensor_2t7sx_setfiles_A;
- sensor_2t7sx_setfile_sizes = sensor_2t7sx_setfile_A_sizes;
- sensor_2t7sx_max_setfile_num = ARRAY_SIZE(sensor_2t7sx_setfiles_A);
- sensor_2t7sx_pllinfos = sensor_2t7sx_pllinfos_A;
- break;
- default:
- err("Unsupported 2p7sq sensor revision(%#x) use setfile_A for default\n", rev);
- sensor_2t7sx_global = sensor_2t7sx_setfile_A_Global;
- sensor_2t7sx_global_size = ARRAY_SIZE(sensor_2t7sx_setfile_A_Global);
- sensor_2t7sx_setfiles = sensor_2t7sx_setfiles_A;
- sensor_2t7sx_setfile_sizes = sensor_2t7sx_setfile_A_sizes;
- sensor_2t7sx_max_setfile_num = ARRAY_SIZE(sensor_2t7sx_setfiles_A);
- sensor_2t7sx_pllinfos = sensor_2t7sx_pllinfos_A;
- break;
- }
-}
-
/* CIS OPS */
int sensor_2t7sx_cis_init(struct v4l2_subdev *subdev)
{
ret = 0;
}
- sensor_2t7sx_cis_select_setfile(subdev);
-
cis->cis_data->cur_width = SENSOR_2T7SX_MAX_WIDTH;
cis->cis_data->cur_height = SENSOR_2T7SX_MAX_HEIGHT;
cis->cis_data->low_expo_start = 33000;
setfile = "default";
}
+ if (strcmp(setfile, "default") == 0 ||
+ strcmp(setfile, "setA") == 0) {
+ probe_info("%s setfile_A\n", __func__);
+ sensor_2t7sx_global = sensor_2t7sx_setfile_A_Global;
+ sensor_2t7sx_global_size = ARRAY_SIZE(sensor_2t7sx_setfile_A_Global);
+ sensor_2t7sx_setfiles = sensor_2t7sx_setfiles_A;
+ sensor_2t7sx_setfile_sizes = sensor_2t7sx_setfile_A_sizes;
+ sensor_2t7sx_pllinfos = sensor_2t7sx_pllinfos_A;
+ sensor_2t7sx_max_setfile_num = ARRAY_SIZE(sensor_2t7sx_setfiles_A);
+ } else if (strcmp(setfile, "setB") == 0) {
+ probe_info("%s setfile_B\n", __func__);
+ sensor_2t7sx_global = sensor_2t7sx_setfile_B_Global;
+ sensor_2t7sx_global_size = ARRAY_SIZE(sensor_2t7sx_setfile_B_Global);
+ sensor_2t7sx_setfiles = sensor_2t7sx_setfiles_B;
+ sensor_2t7sx_setfile_sizes = sensor_2t7sx_setfile_B_sizes;
+ sensor_2t7sx_pllinfos = sensor_2t7sx_pllinfos_B;
+ sensor_2t7sx_max_setfile_num = ARRAY_SIZE(sensor_2t7sx_setfiles_B);
+ } else {
+ err("%s setfile index out of bound, take default (setfile_A)", __func__);
+ sensor_2t7sx_global = sensor_2t7sx_setfile_A_Global;
+ sensor_2t7sx_global_size = ARRAY_SIZE(sensor_2t7sx_setfile_A_Global);
+ sensor_2t7sx_setfiles = sensor_2t7sx_setfiles_A;
+ sensor_2t7sx_setfile_sizes = sensor_2t7sx_setfile_A_sizes;
+ sensor_2t7sx_pllinfos = sensor_2t7sx_pllinfos_A;
+ sensor_2t7sx_max_setfile_num = ARRAY_SIZE(sensor_2t7sx_setfiles_A);
+ }
+
cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
const struct sensor_pll_info_compact sensor_2x5sp_pllinfo_A_2880x2160_30fps = {
EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
1200000000, /* mipi_datarate */
- 957670000, /* pclk = VT pix CLK (this value is different by cis) */
+ 478830000, /* pclk = VT pix CLK (this value is different by cis) */
0x13C8, /* frame_length_lines (0x0340) */
0x189A, /* line_length_pck (0x0342) */
};
return ret;
}
-#if 0
-int sensor_2x5sp_cis_otp_check_awb_ratio(char *unit, char *golden, char *limit)
-{
- int ret = 0;
-
- float r_g_min = (float)(limit[0]) / 1000;
- float r_g_max = (float)(limit[1]) / 1000;
- float b_g_min = (float)(limit[2]) / 1000;
- float b_g_max = (float)(limit[3]) / 1000;
-
- float rg = (float) ((unit[1]) | (unit[0] << 8)) / 16384;
- float bg = (float) ((unit[3]) | (unit[2] << 8)) / 16384;
-
- float golden_rg = (float) ((golden[1]) | (golden[0] << 8)) / 16384;
- float golden_bg = (float) ((golden[3]) | (golden[2] << 8)) / 16384;
-
- if (rg < (golden_rg - r_g_min) || rg > (golden_rg + r_g_max)) {
- err("%s(): Final RG calibration factors out of range! rg=0x%x golden_rg=0x%x",
- __func__, (unit[1] | unit[0] << 8), (golden[1] | golden[0] << 8));
- ret = 1;
- }
-
- if (bg < (golden_bg - b_g_min) || bg > (golden_bg + b_g_max)) {
- err("%s(): Final BG calibration factors out of range! bg=0x%x, golden_bg=0x%x",
- __func__, (unit[3] | unit[2] << 8), (golden[3] | golden[2] << 8));
- ret = 1;
- }
-
- return ret;
-}
-#endif
-
int sensor_2x5sp_cis_otp_check_awb_ratio(char *unit, char *golden, char *limit)
{
int ret = 0;
subdev_cis = kzalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
if (!subdev_cis) {
- err("subdev_cis NULL");
+ probe_err("subdev_cis NULL");
ret = -ENOMEM;
goto p_err;
}
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3h1_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
if (of_property_read_string(dnode, "setfile", &setfile)) {
err("setfile index read fail(%d), take default setfile!!", ret);
setfile = "default";
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3l2_probe(struct i2c_client *client,
sensor_3l2_max_setfile_num = sizeof(sensor_3l2_setfiles_A) / sizeof(sensor_3l2_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3m2_probe(struct i2c_client *client,
sensor_3m2_max_setfile_num = sizeof(sensor_3m2_setfiles_A) / sizeof(sensor_3m2_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
#ifdef CAMERA_REAR2_SENSOR_SHIFT_CROP
.cis_update_pdaf_tail_size = sensor_3m3_cis_update_pdaf_tail_size,
#endif
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
.cis_check_rev = sensor_3m3_cis_check_rev,
};
setfile = "default";
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3p3_probe(struct i2c_client *client,
sensor_3p3_max_setfile_num = sizeof(sensor_3p3_setfiles_A) / sizeof(sensor_3p3_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3p8_probe(struct i2c_client *client,
sensor_3p8_pllinfos = sensor_3p8_pllinfos_A;
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_3p8sp_probe(struct i2c_client *client,
sensor_3p8sp_pllinfos = sensor_3p8sp_pllinfos_A;
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_4e6_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_compensate_gain_for_extremely_br = sensor_4h5_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_4h5_probe(struct i2c_client *client,
sensor_4h5_max_setfile_num = sizeof(sensor_4h5_setfiles_A) / sizeof(sensor_4h5_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_4h5yc_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_4h5yc_probe(struct i2c_client *client,
sensor_4h5yc_max_setfile_num = sizeof(sensor_4h5yc_setfiles_A) / sizeof(sensor_4h5yc_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_5e2_probe(struct i2c_client *client,
sensor_5e2_max_setfile_num = sizeof(sensor_5e2_setfiles_A) / sizeof(sensor_5e2_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int __init cis_5e3_probe(struct i2c_client *client,
sensor_5e3_max_setfile_num = sizeof(sensor_5e3_setfiles_A) / sizeof(sensor_5e3_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
0x3C35, 0x5C, 0x1,
};
-/* 26Mhz, 5E9_2592x1944_30fps_MCLK26_0917.txt */
+/* S5K5E9_2592x1944_30fps_871Mbps_MCLK26_1109.txt */
const u32 sensor_5e9_setfile_C_2592x1944_30fps[] = {
0x0136, 0x1A, 0x1,
0x0137, 0x00, 0x1,
0x30B8, 0x2E, 0x1,
0x30BA, 0x36, 0x1,
/* dual slave setting */
+ /* TODO: dual slave setting */
#if 0
0x3C02, 0x01, 0x1,
0x3C05, 0x1D, 0x1,
const struct sensor_pll_info_compact sensor_gm1sp_pllinfo_A_4000x3000_30fps = {
EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
1152670000, /* mipi_datarate */
- 483170000, /* pclk = VT pix CLK (this value is different by cis) */
+ 120790000, /* pclk = VT pix CLK (this value is different by cis) */
0x0C86, /* frame_length_lines (0x0340) */
0x13A0, /* line_length_pck (0x0342) */
};
0x6F12, 0xA32E, 0x2,
};
-const u32 sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_1st[] = {
- 0x6028, 0x4000, 0x2,
- 0x6214, 0x7971, 0x2,
- 0x6218, 0x7150, 0x2,
- 0x0344, 0x0008, 0x2,
- 0x0346, 0x0008, 0x2,
- 0x0348, 0x0FA7, 0x2,
- 0x034A, 0x0BBF, 0x2,
- 0x034C, 0x0FA0, 0x2,
- 0x034E, 0x0BB8, 0x2,
- 0x0350, 0x0000, 0x2,
- 0x0352, 0x0000, 0x2,
- 0x0340, 0x0C86, 0x2,
- 0x0342, 0x13A0, 0x2,
- 0x0900, 0x0111, 0x2,
- 0x0380, 0x0001, 0x2,
- 0x0382, 0x0001, 0x2,
- 0x0384, 0x0001, 0x2,
- 0x0386, 0x0001, 0x2,
- 0x0404, 0x1000, 0x2,
- 0x0402, 0x1010, 0x2,
- 0x0136, 0x1A00, 0x2,
- 0x0304, 0x0006, 0x2,
- 0x030C, 0x0000, 0x2,
- 0x0306, 0x00DF, 0x2,
- 0x0302, 0x0001, 0x2,
- 0x0300, 0x0008, 0x2,
- 0x030E, 0x0003, 0x2,
- 0x0312, 0x0001, 0x2,
- 0x0310, 0x0085, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x1492, 0x2,
- 0x6F12, 0x0078, 0x2,
- 0x602A, 0x0E4E, 0x2,
- 0x6F12, 0x007A, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x0118, 0x0004, 0x2,
- 0x021E, 0x0000, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x2126, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1168, 0x2,
- 0x6F12, 0x0020, 0x2,
- 0x602A, 0x2DB6, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1668, 0x2,
- 0x6F12, 0xF0F0, 0x2,
- 0x602A, 0x166A, 0x2,
- 0x6F12, 0xF0F0, 0x2,
- 0x602A, 0x118A, 0x2,
- 0x6F12, 0x0802, 0x2,
- 0x602A, 0x151E, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x217E, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1520, 0x2,
- 0x6F12, 0x0008, 0x2,
- 0x602A, 0x2522, 0x2,
- 0x6F12, 0x0804, 0x2,
- 0x602A, 0x2524, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x2568, 0x2,
- 0x6F12, 0x5500, 0x2,
- 0x602A, 0x2588, 0x2,
- 0x6F12, 0x1111, 0x2,
- 0x602A, 0x258C, 0x2,
- 0x6F12, 0x1111, 0x2,
- 0x602A, 0x25A6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x252C, 0x2,
- 0x6F12, 0x0601, 0x2,
- 0x602A, 0x252E, 0x2,
- 0x6F12, 0x0605, 0x2,
- 0x602A, 0x25A8, 0x2,
- 0x6F12, 0x1100, 0x2,
- 0x602A, 0x25AC, 0x2,
- 0x6F12, 0x0011, 0x2,
- 0x602A, 0x25B0, 0x2,
- 0x6F12, 0x1100, 0x2,
- 0x602A, 0x25B4, 0x2,
- 0x6F12, 0x0011, 0x2,
- 0x602A, 0x15A4, 0x2,
- 0x6F12, 0x0141, 0x2,
- 0x602A, 0x15A6, 0x2,
- 0x6F12, 0x0545, 0x2,
- 0x602A, 0x15A8, 0x2,
- 0x6F12, 0x0649, 0x2,
- 0x602A, 0x15AA, 0x2,
- 0x6F12, 0x024D, 0x2,
- 0x602A, 0x15AC, 0x2,
- 0x6F12, 0x0151, 0x2,
- 0x602A, 0x15AE, 0x2,
- 0x6F12, 0x0555, 0x2,
- 0x602A, 0x15B0, 0x2,
- 0x6F12, 0x0659, 0x2,
- 0x602A, 0x15B2, 0x2,
- 0x6F12, 0x025D, 0x2,
- 0x602A, 0x15B4, 0x2,
- 0x6F12, 0x0161, 0x2,
- 0x602A, 0x15B6, 0x2,
- 0x6F12, 0x0565, 0x2,
- 0x602A, 0x15B8, 0x2,
- 0x6F12, 0x0669, 0x2,
- 0x602A, 0x15BA, 0x2,
- 0x6F12, 0x026D, 0x2,
- 0x602A, 0x15BC, 0x2,
- 0x6F12, 0x0171, 0x2,
- 0x602A, 0x15BE, 0x2,
- 0x6F12, 0x0575, 0x2,
- 0x602A, 0x15C0, 0x2,
- 0x6F12, 0x0679, 0x2,
- 0x602A, 0x15C2, 0x2,
- 0x6F12, 0x027D, 0x2,
- 0x602A, 0x15C4, 0x2,
- 0x6F12, 0x0141, 0x2,
- 0x602A, 0x15C6, 0x2,
- 0x6F12, 0x0545, 0x2,
- 0x602A, 0x15C8, 0x2,
- 0x6F12, 0x0649, 0x2,
- 0x602A, 0x15CA, 0x2,
- 0x6F12, 0x024D, 0x2,
- 0x602A, 0x15CC, 0x2,
- 0x6F12, 0x0151, 0x2,
- 0x602A, 0x15CE, 0x2,
- 0x6F12, 0x0555, 0x2,
- 0x602A, 0x15D0, 0x2,
- 0x6F12, 0x0659, 0x2,
- 0x602A, 0x15D2, 0x2,
- 0x6F12, 0x025D, 0x2,
- 0x602A, 0x15D4, 0x2,
- 0x6F12, 0x0161, 0x2,
- 0x602A, 0x15D6, 0x2,
- 0x6F12, 0x0565, 0x2,
- 0x602A, 0x15D8, 0x2,
- 0x6F12, 0x0669, 0x2,
- 0x602A, 0x15DA, 0x2,
- 0x6F12, 0x026D, 0x2,
- 0x602A, 0x15DC, 0x2,
- 0x6F12, 0x0171, 0x2,
- 0x602A, 0x15DE, 0x2,
- 0x6F12, 0x0575, 0x2,
- 0x602A, 0x15E0, 0x2,
- 0x6F12, 0x0679, 0x2,
- 0x602A, 0x15E2, 0x2,
- 0x6F12, 0x027D, 0x2,
- 0x602A, 0x1A50, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1A54, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x0D00, 0x0101, 0x2,
- 0x0D02, 0x0001, 0x2,
- 0x0114, 0x0300, 0x2,
- 0x0202, 0x0010, 0x2,
- 0x0226, 0x0010, 0x2,
- 0x0204, 0x0020, 0x2,
- 0x0B06, 0x0101, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x107A, 0x2,
- 0x6F12, 0x1D00, 0x2,
- 0x602A, 0x1074, 0x2,
- 0x6F12, 0x1D00, 0x2,
- 0x602A, 0x0E7C, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1120, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x1122, 0x2,
- 0x6F12, 0x0028, 0x2,
- 0x602A, 0x1128, 0x2,
- 0x6F12, 0x0604, 0x2,
- 0x602A, 0x1AC0, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x1AC2, 0x2,
- 0x6F12, 0x0002, 0x2,
- 0x602A, 0x1494, 0x2,
- 0x6F12, 0x3D68, 0x2,
- 0x602A, 0x1498, 0x2,
- 0x6F12, 0xF10D, 0x2,
- 0x602A, 0x1488, 0x2,
- 0x6F12, 0x0F04, 0x2,
- 0x602A, 0x148A, 0x2,
- 0x6F12, 0x170B, 0x2,
- 0x602A, 0x150E, 0x2,
- 0x6F12, 0x00C2, 0x2,
- 0x602A, 0x1510, 0x2,
- 0x6F12, 0xC0AF, 0x2,
- 0x602A, 0x1512, 0x2,
- 0x6F12, 0x00A0, 0x2,
- 0x602A, 0x1486, 0x2,
- 0x6F12, 0x1430, 0x2,
- 0x602A, 0x1490, 0x2,
- 0x6F12, 0x4D09, 0x2,
- 0x602A, 0x149E, 0x2,
- 0x6F12, 0x01C4, 0x2,
- 0x602A, 0x11CC, 0x2,
- 0x6F12, 0x0008, 0x2,
- 0x602A, 0x11CE, 0x2,
- 0x6F12, 0x000B, 0x2,
- 0x602A, 0x11D0, 0x2,
- 0x6F12, 0x0003, 0x2,
- 0x602A, 0x11DA, 0x2,
- 0x6F12, 0x0012, 0x2,
- 0x602A, 0x11E6, 0x2,
- 0x6F12, 0x002A, 0x2,
- 0x602A, 0x125E, 0x2,
- 0x6F12, 0x0048, 0x2,
- 0x602A, 0x11F4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x11F8, 0x2,
- 0x6F12, 0x0016, 0x2,
- 0x6028, 0x4000, 0x2,
- 0xF444, 0x05BF, 0x2,
- 0xF44A, 0x0008, 0x2,
- 0xF44E, 0x0012, 0x2,
- 0xF46E, 0x40C0, 0x2,
- 0xF470, 0x7809, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x1CAA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CAC, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CAE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB0, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB8, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBC, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC0, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC8, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6000, 0x2,
- 0x6F12, 0x000F, 0x2,
- 0x602A, 0x6002, 0x2,
- 0x6F12, 0xFFFF, 0x2,
- 0x602A, 0x6004, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6006, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6008, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600E, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6010, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6012, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6014, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6016, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6018, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601E, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6020, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6022, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6024, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6026, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6028, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x602A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x602C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x1144, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1146, 0x2,
- 0x6F12, 0x1B00, 0x2,
- 0x602A, 0x1080, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1084, 0x2,
- 0x6F12, 0x00C0, 0x2,
- 0x602A, 0x108A, 0x2,
- 0x6F12, 0x00C0, 0x2,
- 0x602A, 0x1090, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1092, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1094, 0x2,
- 0x6F12, 0xA32E, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x010C, 0x0100, 0x2,
- 0x011A, 0x0401, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x0EB0, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x0ECA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0E2D, 0x2,
- 0x6F12, 0x0130, 0x2,
- 0x602A, 0x0EDC, 0x2,
- 0x6F12, 0x0002, 0x2,
- 0x602A, 0x0EDE, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0E80, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0EDA, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x0E88, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0E8A, 0x2,
- 0x6F12, 0x0060, 0x2,
- 0x602A, 0x0ED8, 0x2,
- 0x6F12, 0x0A00, 0x2,
- 0x602A, 0x102C, 0x2,
- 0x6F12, 0x0075, 0x2,
- 0x602A, 0x1030, 0x2,
- 0x6F12, 0x0041, 0x2,
- 0x602A, 0x0F8C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F8E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F90, 0x2,
- 0x6F12, 0x0051, 0x2,
- 0x602A, 0x0F92, 0x2,
- 0x6F12, 0x0800, 0x2,
- 0x602A, 0x0F94, 0x2,
- 0x6F12, 0x0052, 0x2,
- 0x602A, 0x0F96, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x0F98, 0x2,
- 0x6F12, 0x004F, 0x2,
- 0x602A, 0x0F9A, 0x2,
- 0x6F12, 0x0600, 0x2,
- 0x602A, 0x0F9C, 0x2,
- 0x6F12, 0x004E, 0x2,
- 0x602A, 0x0F9E, 0x2,
- 0x6F12, 0x0C00, 0x2,
- 0x602A, 0x0FA0, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FA2, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0EEC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0EEE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0EF0, 0x2,
- 0x6F12, 0x0014, 0x2,
- 0x602A, 0x0EF2, 0x2,
- 0x6F12, 0x1B00, 0x2,
- 0x602A, 0x0EF4, 0x2,
- 0x6F12, 0x0013, 0x2,
- 0x602A, 0x0EF6, 0x2,
- 0x6F12, 0x0600, 0x2,
- 0x602A, 0x0EF8, 0x2,
- 0x6F12, 0x004C, 0x2,
- 0x602A, 0x0EFA, 0x2,
- 0x6F12, 0x3300, 0x2,
- 0x602A, 0x0EFC, 0x2,
- 0x6F12, 0x0065, 0x2,
- 0x602A, 0x0EFE, 0x2,
- 0x6F12, 0x0800, 0x2,
- 0x602A, 0x0F00, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F02, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0F04, 0x2,
- 0x6F12, 0x007A, 0x2,
- 0x602A, 0x0F06, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F08, 0x2,
- 0x6F12, 0x007B, 0x2,
- 0x602A, 0x0F0A, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F0C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F0E, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F10, 0x2,
- 0x6F12, 0x0071, 0x2,
- 0x602A, 0x0F12, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F14, 0x2,
- 0x6F12, 0x0072, 0x2,
- 0x602A, 0x0F16, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F18, 0x2,
- 0x6F12, 0x0073, 0x2,
- 0x602A, 0x0F1A, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F1C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F1E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F20, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F22, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0FDC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FDE, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0FE0, 0x2,
- 0x6F12, 0x0071, 0x2,
- 0x602A, 0x0FE2, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FE4, 0x2,
- 0x6F12, 0x0072, 0x2,
- 0x602A, 0x0FE6, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FE8, 0x2,
- 0x6F12, 0x0073, 0x2,
- 0x602A, 0x0FEA, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FEC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FEE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0FF0, 0x2,
- 0x6F12, 0x004E, 0x2,
- 0x602A, 0x0FF2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x102E, 0x2,
- 0x6F12, 0x0025, 0x2,
- 0x602A, 0x602E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6038, 0x2,
- 0x6F12, 0x0103, 0x2,
- 0x602A, 0x603A, 0x2,
- 0x6F12, 0x005F, 0x2,
- 0x602A, 0x603C, 0x2,
- 0x6F12, 0x0060, 0x2,
- 0x602A, 0x603E, 0x2,
- 0x6F12, 0x0061, 0x2,
-};
-
-const u32 sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_2nd[] = {
- 0x6028, 0x4000, 0x2,
- 0x6214, 0x7971, 0x2,
- 0x6218, 0x7150, 0x2,
- 0x0344, 0x0008, 0x2,
- 0x0346, 0x0008, 0x2,
- 0x0348, 0x0FA7, 0x2,
- 0x034A, 0x0BBF, 0x2,
- 0x034C, 0x0FA0, 0x2,
- 0x034E, 0x0BB8, 0x2,
- 0x0350, 0x0000, 0x2,
- 0x0352, 0x0000, 0x2,
- 0x0340, 0x0C86, 0x2,
- 0x0342, 0x13A0, 0x2,
- 0x0900, 0x0111, 0x2,
- 0x0380, 0x0001, 0x2,
- 0x0382, 0x0001, 0x2,
- 0x0384, 0x0001, 0x2,
- 0x0386, 0x0001, 0x2,
- 0x0404, 0x1000, 0x2,
- 0x0402, 0x1010, 0x2,
- 0x0136, 0x1A00, 0x2,
- 0x0304, 0x0006, 0x2,
- 0x030C, 0x0000, 0x2,
- 0x0306, 0x00DF, 0x2,
- 0x0302, 0x0001, 0x2,
- 0x0300, 0x0008, 0x2,
- 0x030E, 0x0003, 0x2,
- 0x0312, 0x0001, 0x2,
- 0x0310, 0x0085, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x1492, 0x2,
- 0x6F12, 0x0078, 0x2,
- 0x602A, 0x0E4E, 0x2,
- 0x6F12, 0x007A, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x0118, 0x0004, 0x2,
- 0x021E, 0x0000, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x2126, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1168, 0x2,
- 0x6F12, 0x0020, 0x2,
- 0x602A, 0x2DB6, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1668, 0x2,
- 0x6F12, 0xF0F0, 0x2,
- 0x602A, 0x166A, 0x2,
- 0x6F12, 0xF0F0, 0x2,
- 0x602A, 0x118A, 0x2,
- 0x6F12, 0x0802, 0x2,
- 0x602A, 0x151E, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x217E, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1520, 0x2,
- 0x6F12, 0x0008, 0x2,
- 0x602A, 0x2522, 0x2,
- 0x6F12, 0x0804, 0x2,
- 0x602A, 0x2524, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x2568, 0x2,
- 0x6F12, 0x5500, 0x2,
- 0x602A, 0x2588, 0x2,
- 0x6F12, 0x1111, 0x2,
- 0x602A, 0x258C, 0x2,
- 0x6F12, 0x1111, 0x2,
- 0x602A, 0x25A6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x252C, 0x2,
- 0x6F12, 0x0601, 0x2,
- 0x602A, 0x252E, 0x2,
- 0x6F12, 0x0605, 0x2,
- 0x602A, 0x25A8, 0x2,
- 0x6F12, 0x1100, 0x2,
- 0x602A, 0x25AC, 0x2,
- 0x6F12, 0x0011, 0x2,
- 0x602A, 0x25B0, 0x2,
- 0x6F12, 0x1100, 0x2,
- 0x602A, 0x25B4, 0x2,
- 0x6F12, 0x0011, 0x2,
- 0x602A, 0x15A4, 0x2,
- 0x6F12, 0x0141, 0x2,
- 0x602A, 0x15A6, 0x2,
- 0x6F12, 0x0545, 0x2,
- 0x602A, 0x15A8, 0x2,
- 0x6F12, 0x0649, 0x2,
- 0x602A, 0x15AA, 0x2,
- 0x6F12, 0x024D, 0x2,
- 0x602A, 0x15AC, 0x2,
- 0x6F12, 0x0151, 0x2,
- 0x602A, 0x15AE, 0x2,
- 0x6F12, 0x0555, 0x2,
- 0x602A, 0x15B0, 0x2,
- 0x6F12, 0x0659, 0x2,
- 0x602A, 0x15B2, 0x2,
- 0x6F12, 0x025D, 0x2,
- 0x602A, 0x15B4, 0x2,
- 0x6F12, 0x0161, 0x2,
- 0x602A, 0x15B6, 0x2,
- 0x6F12, 0x0565, 0x2,
- 0x602A, 0x15B8, 0x2,
- 0x6F12, 0x0669, 0x2,
- 0x602A, 0x15BA, 0x2,
- 0x6F12, 0x026D, 0x2,
- 0x602A, 0x15BC, 0x2,
- 0x6F12, 0x0171, 0x2,
- 0x602A, 0x15BE, 0x2,
- 0x6F12, 0x0575, 0x2,
- 0x602A, 0x15C0, 0x2,
- 0x6F12, 0x0679, 0x2,
- 0x602A, 0x15C2, 0x2,
- 0x6F12, 0x027D, 0x2,
- 0x602A, 0x15C4, 0x2,
- 0x6F12, 0x0141, 0x2,
- 0x602A, 0x15C6, 0x2,
- 0x6F12, 0x0545, 0x2,
- 0x602A, 0x15C8, 0x2,
- 0x6F12, 0x0649, 0x2,
- 0x602A, 0x15CA, 0x2,
- 0x6F12, 0x024D, 0x2,
- 0x602A, 0x15CC, 0x2,
- 0x6F12, 0x0151, 0x2,
- 0x602A, 0x15CE, 0x2,
- 0x6F12, 0x0555, 0x2,
- 0x602A, 0x15D0, 0x2,
- 0x6F12, 0x0659, 0x2,
- 0x602A, 0x15D2, 0x2,
- 0x6F12, 0x025D, 0x2,
- 0x602A, 0x15D4, 0x2,
- 0x6F12, 0x0161, 0x2,
- 0x602A, 0x15D6, 0x2,
- 0x6F12, 0x0565, 0x2,
- 0x602A, 0x15D8, 0x2,
- 0x6F12, 0x0669, 0x2,
- 0x602A, 0x15DA, 0x2,
- 0x6F12, 0x026D, 0x2,
- 0x602A, 0x15DC, 0x2,
- 0x6F12, 0x0171, 0x2,
- 0x602A, 0x15DE, 0x2,
- 0x6F12, 0x0575, 0x2,
- 0x602A, 0x15E0, 0x2,
- 0x6F12, 0x0679, 0x2,
- 0x602A, 0x15E2, 0x2,
- 0x6F12, 0x027D, 0x2,
- 0x602A, 0x1A50, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1A54, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x0D00, 0x0101, 0x2,
- 0x0D02, 0x0001, 0x2,
- 0x0114, 0x0300, 0x2,
- 0x0202, 0x0010, 0x2,
- 0x0226, 0x0010, 0x2,
- 0x0204, 0x0020, 0x2,
- 0x0B06, 0x0101, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x107A, 0x2,
- 0x6F12, 0x1D00, 0x2,
- 0x602A, 0x1074, 0x2,
- 0x6F12, 0x1D00, 0x2,
- 0x602A, 0x0E7C, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1120, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x1122, 0x2,
- 0x6F12, 0x0028, 0x2,
- 0x602A, 0x1128, 0x2,
- 0x6F12, 0x0604, 0x2,
- 0x602A, 0x1AC0, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x1AC2, 0x2,
- 0x6F12, 0x0002, 0x2,
- 0x602A, 0x1494, 0x2,
- 0x6F12, 0x3D68, 0x2,
- 0x602A, 0x1498, 0x2,
- 0x6F12, 0xF10D, 0x2,
- 0x602A, 0x1488, 0x2,
- 0x6F12, 0x0F04, 0x2,
- 0x602A, 0x148A, 0x2,
- 0x6F12, 0x170B, 0x2,
- 0x602A, 0x150E, 0x2,
- 0x6F12, 0x00C2, 0x2,
- 0x602A, 0x1510, 0x2,
- 0x6F12, 0xC0AF, 0x2,
- 0x602A, 0x1512, 0x2,
- 0x6F12, 0x00A0, 0x2,
- 0x602A, 0x1486, 0x2,
- 0x6F12, 0x1430, 0x2,
- 0x602A, 0x1490, 0x2,
- 0x6F12, 0x4D09, 0x2,
- 0x602A, 0x149E, 0x2,
- 0x6F12, 0x01C4, 0x2,
- 0x602A, 0x11CC, 0x2,
- 0x6F12, 0x0008, 0x2,
- 0x602A, 0x11CE, 0x2,
- 0x6F12, 0x000B, 0x2,
- 0x602A, 0x11D0, 0x2,
- 0x6F12, 0x0003, 0x2,
- 0x602A, 0x11DA, 0x2,
- 0x6F12, 0x0012, 0x2,
- 0x602A, 0x11E6, 0x2,
- 0x6F12, 0x002A, 0x2,
- 0x602A, 0x125E, 0x2,
- 0x6F12, 0x0048, 0x2,
- 0x602A, 0x11F4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x11F8, 0x2,
- 0x6F12, 0x0016, 0x2,
- 0x6028, 0x4000, 0x2,
- 0xF444, 0x05BF, 0x2,
- 0xF44A, 0x0008, 0x2,
- 0xF44E, 0x0012, 0x2,
- 0xF46E, 0x40C0, 0x2,
- 0xF470, 0x7809, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x1CAA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CAC, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CAE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB0, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CB8, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBC, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CBE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC0, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC4, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC6, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1CC8, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6000, 0x2,
- 0x6F12, 0x000F, 0x2,
- 0x602A, 0x6002, 0x2,
- 0x6F12, 0xFFFF, 0x2,
- 0x602A, 0x6004, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6006, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6008, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x600E, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6010, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6012, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6014, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6016, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6018, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x601E, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6020, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6022, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6024, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6026, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x6028, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x602A, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x602C, 0x2,
- 0x6F12, 0x1000, 0x2,
- 0x602A, 0x1144, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1146, 0x2,
- 0x6F12, 0x1B00, 0x2,
- 0x602A, 0x1080, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x1084, 0x2,
- 0x6F12, 0x00C0, 0x2,
- 0x602A, 0x108A, 0x2,
- 0x6F12, 0x00C0, 0x2,
- 0x602A, 0x1090, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x1092, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x1094, 0x2,
- 0x6F12, 0xA32E, 0x2,
- 0x6028, 0x4000, 0x2,
- 0x010C, 0x0100, 0x2,
- 0x011A, 0x0401, 0x2,
- 0x6028, 0x2000, 0x2,
- 0x602A, 0x0EB0, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x0ECA, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0E2D, 0x2,
- 0x6F12, 0x0130, 0x2,
- 0x602A, 0x0EDC, 0x2,
- 0x6F12, 0x0002, 0x2,
- 0x602A, 0x0EDE, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0E80, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0EDA, 0x2,
- 0x6F12, 0x0001, 0x2,
- 0x602A, 0x0E88, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0E8A, 0x2,
- 0x6F12, 0x0060, 0x2,
- 0x602A, 0x0ED8, 0x2,
- 0x6F12, 0x0A00, 0x2,
- 0x602A, 0x102C, 0x2,
- 0x6F12, 0x0075, 0x2,
- 0x602A, 0x1030, 0x2,
- 0x6F12, 0x0041, 0x2,
- 0x602A, 0x0F8C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F8E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F90, 0x2,
- 0x6F12, 0x0051, 0x2,
- 0x602A, 0x0F92, 0x2,
- 0x6F12, 0x0800, 0x2,
- 0x602A, 0x0F94, 0x2,
- 0x6F12, 0x0052, 0x2,
- 0x602A, 0x0F96, 0x2,
- 0x6F12, 0x0400, 0x2,
- 0x602A, 0x0F98, 0x2,
- 0x6F12, 0x004F, 0x2,
- 0x602A, 0x0F9A, 0x2,
- 0x6F12, 0x0600, 0x2,
- 0x602A, 0x0F9C, 0x2,
- 0x6F12, 0x004E, 0x2,
- 0x602A, 0x0F9E, 0x2,
- 0x6F12, 0x0C00, 0x2,
- 0x602A, 0x0FA0, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FA2, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0EEC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0EEE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0EF0, 0x2,
- 0x6F12, 0x0014, 0x2,
- 0x602A, 0x0EF2, 0x2,
- 0x6F12, 0x1B00, 0x2,
- 0x602A, 0x0EF4, 0x2,
- 0x6F12, 0x0013, 0x2,
- 0x602A, 0x0EF6, 0x2,
- 0x6F12, 0x0600, 0x2,
- 0x602A, 0x0EF8, 0x2,
- 0x6F12, 0x004C, 0x2,
- 0x602A, 0x0EFA, 0x2,
- 0x6F12, 0x3300, 0x2,
- 0x602A, 0x0EFC, 0x2,
- 0x6F12, 0x0065, 0x2,
- 0x602A, 0x0EFE, 0x2,
- 0x6F12, 0x0800, 0x2,
- 0x602A, 0x0F00, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F02, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0F04, 0x2,
- 0x6F12, 0x007A, 0x2,
- 0x602A, 0x0F06, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F08, 0x2,
- 0x6F12, 0x007B, 0x2,
- 0x602A, 0x0F0A, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F0C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F0E, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0F10, 0x2,
- 0x6F12, 0x0071, 0x2,
- 0x602A, 0x0F12, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F14, 0x2,
- 0x6F12, 0x0072, 0x2,
- 0x602A, 0x0F16, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F18, 0x2,
- 0x6F12, 0x0073, 0x2,
- 0x602A, 0x0F1A, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F1C, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0F1E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0F20, 0x2,
- 0x6F12, 0x0070, 0x2,
- 0x602A, 0x0F22, 0x2,
- 0x6F12, 0x0700, 0x2,
- 0x602A, 0x0FDC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FDE, 0x2,
- 0x6F12, 0x0200, 0x2,
- 0x602A, 0x0FE0, 0x2,
- 0x6F12, 0x0071, 0x2,
- 0x602A, 0x0FE2, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FE4, 0x2,
- 0x6F12, 0x0072, 0x2,
- 0x602A, 0x0FE6, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FE8, 0x2,
- 0x6F12, 0x0073, 0x2,
- 0x602A, 0x0FEA, 0x2,
- 0x6F12, 0x0100, 0x2,
- 0x602A, 0x0FEC, 0x2,
- 0x6F12, 0x0076, 0x2,
- 0x602A, 0x0FEE, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x0FF0, 0x2,
- 0x6F12, 0x004E, 0x2,
- 0x602A, 0x0FF2, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x102E, 0x2,
- 0x6F12, 0x0025, 0x2,
- 0x602A, 0x602E, 0x2,
- 0x6F12, 0x0000, 0x2,
- 0x602A, 0x6038, 0x2,
- 0x6F12, 0x0103, 0x2,
- 0x602A, 0x603A, 0x2,
- 0x6F12, 0x005F, 0x2,
- 0x602A, 0x603C, 0x2,
- 0x6F12, 0x0060, 0x2,
- 0x602A, 0x603E, 0x2,
- 0x6F12, 0x0061, 0x2,
-};
-
/* for reduce mipi speed at thermal throttling state */
const u32 sensor_gm1sp_setfile_B_4000x3000_15fps[] = {
0x6028, 0x4000, 0x2,
0x0990, /* line_length_pck (0x0342) */
};
-const struct sensor_pll_info_compact sensor_gm1sp_pllinfo_B_4000x3000_30fps_gyro_test_1st = {
- EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
- 1152670000, /* mipi_datarate */
- 483170000, /* pclk = VT pix CLK (this value is different by cis) */
- 0x0C86, /* frame_length_lines (0x0340) */
- 0x13A0, /* line_length_pck (0x0342) */
-};
-
-const struct sensor_pll_info_compact sensor_gm1sp_pllinfo_B_4000x3000_30fps_gyro_test_2nd = {
- EXT_CLK_Mhz * 1000 * 1000, /* ext_clk */
- 1152670000, /* mipi_datarate */
- 483170000, /* pclk = VT pix CLK (this value is different by cis) */
- 0x0C86, /* frame_length_lines (0x0340) */
- 0x13A0, /* line_length_pck (0x0342) */
-};
-
static const u32 *sensor_gm1sp_setfiles_B[] = {
sensor_gm1sp_setfile_B_4000x3000_30fps,
sensor_gm1sp_setfile_B_2000x1124_60fps,
sensor_gm1sp_setfile_B_2000x1124_120fps,
sensor_gm1sp_setfile_B_1280x720_240fps,
- sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_1st,
- sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_2nd,
};
static const u32 sensor_gm1sp_setfile_B_sizes[] = {
ARRAY_SIZE(sensor_gm1sp_setfile_B_2000x1124_60fps),
ARRAY_SIZE(sensor_gm1sp_setfile_B_2000x1124_120fps),
ARRAY_SIZE(sensor_gm1sp_setfile_B_1280x720_240fps),
- ARRAY_SIZE(sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_1st),
- ARRAY_SIZE(sensor_gm1sp_setfile_B_4000x3000_30fps_Gyro_test_2nd),
};
static const struct sensor_pll_info_compact *sensor_gm1sp_pllinfos_B[] = {
&sensor_gm1sp_pllinfo_B_2000x1124_60fps,
&sensor_gm1sp_pllinfo_B_2000x1124_120fps,
&sensor_gm1sp_pllinfo_B_1280x720_240fps,
- &sensor_gm1sp_pllinfo_B_4000x3000_30fps_gyro_test_1st,
- &sensor_gm1sp_pllinfo_B_4000x3000_30fps_gyro_test_2nd,
};
#endif
cis->cis_data->low_expo_start = 33000;
cis->need_mode_change = false;
- cis->gyro_test_val.x = 0;
- cis->gyro_test_val.y = 0;
- cis->gyro_test_val.z = 0;
- cis->gyro_test_val.state = SENSOR_GYRO_INFO_STATE_BASE;
- cis->gyro_self_test_step = 0;
-
sensor_gm1sp_cis_data_calculation(sensor_gm1sp_pllinfos[setfile_index], cis->cis_data);
setinfo.return_value = 0;
I2C_MUTEX_LOCK(cis->i2c_lock);
ret = sensor_cis_set_registers(subdev, sensor_gm1sp_global, sensor_gm1sp_global_size);
+
if (ret < 0) {
err("sensor_gm1sp_set_registers fail!!");
goto p_err;
return -EINVAL;
}
- if (cis->gyro_self_test_step == 1) {
- mode = GYRO_SELF_TEST_STEP1_SET_NUM;
- info("%d setfile will be set for gyro self test step1\n", mode);
- } else if (cis->gyro_self_test_step == 2) {
- mode = GYRO_SELF_TEST_STEP2_SET_NUM;
- info("%d setfile will be set for gyro self test step2\n", mode);
- }
-
sensor_gm1sp_cis_data_calculation(sensor_gm1sp_pllinfos[mode], cis->cis_data);
I2C_MUTEX_LOCK(cis->i2c_lock);
struct fimc_is_cis *cis;
struct i2c_client *client;
cis_shared_data *cis_data;
- u32 err_check = 0;
- u8 read_val;
#ifdef DEBUG_SENSOR_TIME
struct timeval st, end;
dbg_sensor(1, "______ line_length_pck(%x)\n", pll);
}
#endif
+
/* Sensor stream on */
fimc_is_sensor_write16(client, 0x6028, 0x4000);
fimc_is_sensor_write8(client, 0x0100, 0x01);
- /* In second test step, get x,y,z gyro val by i2c transfer */
- if (cis->gyro_self_test_step == 2) {
- fimc_is_sensor_write16(client, 0x602c, 0x2000);
- fimc_is_sensor_write16(client, 0x602e, 0x604e);
- ret = fimc_is_sensor_read8(client, 0x6f12, &(read_val));
- if (ret) {
- err_check++;
- err("fail to get gyro test x value\n");
- } else {
- cis->gyro_test_val.x = (u32)read_val;
- }
-
- fimc_is_sensor_write16(client, 0x602e, 0x604f);
- ret = fimc_is_sensor_read8(client, 0x6f12, &(read_val));
- if (ret) {
- err_check++;
- err("fail to get gyro test y value\n");
- } else {
- cis->gyro_test_val.y = (u32)read_val;
- }
-
- fimc_is_sensor_write16(client, 0x602e, 0x6050);
- ret = fimc_is_sensor_read8(client, 0x6f12, &(read_val));
- if (ret) {
- err_check++;
- err("fail to get gyro test z value\n");
- } else {
- cis->gyro_test_val.z = (u32)read_val;
- }
-
- if (!err_check) {
- cis->gyro_test_val.state = SENSOR_GYRO_INFO_STATE_SUCCESS;
- info("success to get gyro test x(%d), y(%d), z(%d) value\n",
- cis->gyro_test_val.x, cis->gyro_test_val.y, cis->gyro_test_val.z);
- } else {
- cis->gyro_test_val.state = SENSOR_GYRO_INFO_STATE_FAIL;
- err("Fail to get gyro test value\n");
- }
- }
-
/* WDR */
if (fimc_is_vender_wdr_mode_on(cis_data))
fimc_is_sensor_write8(client, 0x021E, 0x01);
dbg_sensor(1, "[%s] time %lu us\n", __func__, (end.tv_sec - st.tv_sec) * 1000000 + (end.tv_usec - st.tv_usec));
#endif
+ I2C_MUTEX_UNLOCK(cis->i2c_lock);
+
return ret;
}
subdev_cis = kzalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
if (!subdev_cis) {
- err("subdev_cis NULL");
+ probe_err("subdev_cis NULL");
ret = -ENOMEM;
goto p_err;
}
#define USE_GROUP_PARAM_HOLD (0)
-#define GYRO_SELF_TEST_STEP1_SET_NUM (4)
-#define GYRO_SELF_TEST_STEP2_SET_NUM (5)
-
#endif
.cis_get_max_digital_gain = sensor_imx219_cis_get_max_digital_gain,
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx219_probe(struct i2c_client *client,
sensor_imx219_max_setfile_num = sizeof(sensor_imx219_setfiles_A) / sizeof(sensor_imx219_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_get_max_digital_gain = sensor_imx241_cis_get_max_digital_gain,
.cis_compensate_gain_for_extremely_br = sensor_imx241_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx241_probe(struct i2c_client *client,
sensor_imx241_max_setfile_num = sizeof(sensor_imx241_setfiles_A) / sizeof(sensor_imx241_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_get_max_digital_gain = sensor_imx258_cis_get_max_digital_gain,
.cis_compensate_gain_for_extremely_br = sensor_imx258_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx258_probe(struct i2c_client *client,
sensor_imx258_max_setfile_num = sizeof(sensor_imx258_setfiles_A) / sizeof(sensor_imx258_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
.cis_data_calculation = sensor_imx260_cis_data_calc,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx260_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
.cis_data_calculation = sensor_imx320_cis_data_calc,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx320_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_data_calculation = sensor_imx333_cis_data_calc,
.cis_set_long_term_exposure = sensor_imx333_cis_long_term_exposure,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_imx333_probe(struct i2c_client *client,
snprintf(subdev_cis->name, V4L2_SUBDEV_NAME_SIZE, "cis-subdev.%d", cis->id);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
ret = of_property_read_string(dnode, "setfile", &setfile);
if (ret) {
err("setfile index read fail(%d), take default setfile!!", ret);
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
.cis_wait_streamon = sensor_cis_wait_streamon,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
int cis_rpb_probe(struct i2c_client *client,
return -EINVAL;
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
.cis_get_max_digital_gain = sensor_sr259_cis_get_max_digital_gain,
.cis_compensate_gain_for_extremely_br = sensor_cis_compensate_gain_for_extremely_br,
.cis_wait_streamoff = sensor_cis_wait_streamoff,
- .cis_set_initial_exposure = sensor_cis_set_initial_exposure,
};
static int cis_sr259_probe(struct i2c_client *client,
sensor_sr259_max_setfile_num = sizeof(sensor_sr259_setfiles_A) / sizeof(sensor_sr259_setfiles_A[0]);
}
- cis->use_initial_ae = of_property_read_bool(dnode, "use_initial_ae");
- probe_info("%s use initial_ae(%d)\n", __func__, cis->use_initial_ae);
-
v4l2_i2c_subdev_init(subdev_cis, client, &subdev_ops);
v4l2_set_subdevdata(subdev_cis, cis);
v4l2_set_subdev_hostdata(subdev_cis, device);
/* 3. set dynamic duration */
ctrl.id = V4L2_CID_SENSOR_ADJUST_FRAME_DURATION;
ctrl.value = 0;
- ret = fimc_is_sensor_peri_adj_ctrl(device, expo.long_val, &ctrl);
+ ret = fimc_is_sensor_peri_adj_ctrl(device, MAX(expo.long_val,expo.short_val), &ctrl);
if (ret < 0)
err("err!!! ret(%d)", ret);
struct work_struct throttling_work;
bool throttling_mode;
-
- /* step1: get gyro stat data by VC3 */
- /* step2: get gyro stat data by VC3 and x,y,z value by meta */
- struct sensor_gyro_info gyro_test_val;
- u32 gyro_self_test_step;
};
struct fimc_is_actuator_data {
/* TODO */
gpio_reset = of_get_named_gpio(dnode, "gpio_reset", 0);
- if (gpio_is_valid(gpio_reset)) {
- gpio_request_one(gpio_reset, GPIOF_OUT_INIT_LOW, "CAM_GPIO_OUTPUT_LOW");
- gpio_free(gpio_reset);
- } else {
+ if (!gpio_is_valid(gpio_reset)) {
dev_err(dev, "failed to get PIN_RESET\n");
return -EINVAL;
+ } else {
+ gpio_request_one(gpio_reset, GPIOF_OUT_INIT_LOW, "CAM_GPIO_OUTPUT_LOW");
+ gpio_free(gpio_reset);
}
gpio_avdd_en = of_get_named_gpio(dnode, "gpio_avdd_en", 0);
subdev_module = kzalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
if (!subdev_module) {
- err("subdev_module is NULL");
+ probe_err("subdev_module is NULL");
ret = -ENOMEM;
goto p_err;
}
/* Sensor peri */
module->private_data = kzalloc(sizeof(struct fimc_is_device_sensor_peri), GFP_KERNEL);
if (!module->private_data) {
- err("fimc_is_device_sensor_peri is NULL");
+ probe_err("fimc_is_device_sensor_peri is NULL");
ret = -ENOMEM;
goto p_err;
}
return 0;
}
-static int (*sensor_module_5e9_power_setpin[MAX_5E9_SETPIN_CNT])(struct device *dev,
+static int (* sensor_module_5e9_power_setpin[MAX_5E9_SETPIN_CNT])(struct device *dev,
struct exynos_platform_fimc_is_module *pdata) = {
sensor_module_5e9_power_setpin_0,
sensor_module_5e9_power_setpin_1
goto p_err;
}
break;
- case V4L2_CID_GYRO_SELF_TEST:
- if (ctrl->value > 2) {
- err("Gyro self test step(%d) is over 2\n", ctrl->value);
- ret = -EINVAL;
- goto p_err;
- }
- sensor_peri->cis.gyro_self_test_step = ctrl->value;
- info("Gyro self test step(%d) is enabled\n", sensor_peri->cis.gyro_self_test_step);
- break;
default:
err("err!!! Unknown CID(%#x)", ctrl->id);
ret = -EINVAL;
}
if (cis->cis_data->sens_config_index_cur != device->cfg->mode
- || sensor_peri->mode_change_first == true || cis->gyro_self_test_step != 0) {
+ || sensor_peri->mode_change_first == true) {
dbg_sensor(1, "[%s] mode changed(%d->%d)\n", __func__,
cis->cis_data->sens_config_index_cur, device->cfg->mode);
/* TODO */
gpio_reset = of_get_named_gpio(dnode, "gpio_reset", 0);
- if (gpio_is_valid(gpio_reset)) {
- gpio_request_one(gpio_reset, GPIOF_OUT_INIT_LOW, "CAM_GPIO_OUTPUT_LOW");
- gpio_free(gpio_reset);
- } else {
+ if (!gpio_is_valid(gpio_reset)) {
dev_err(dev, "failed to get PIN_RESET\n");
return -EINVAL;
+ } else {
+ gpio_request_one(gpio_reset, GPIOF_OUT_INIT_LOW, "CAM_GPIO_OUTPUT_LOW");
+ gpio_free(gpio_reset);
}
gpio_avdd_en = of_get_named_gpio(dnode, "gpio_avdd_en", 0);
subdev_module = kzalloc(sizeof(struct v4l2_subdev), GFP_KERNEL);
if (!subdev_module) {
- err("subdev_module is NULL");
+ probe_err("subdev_module is NULL");
ret = -ENOMEM;
goto p_err;
}
/* Sensor peri */
module->private_data = kzalloc(sizeof(struct fimc_is_device_sensor_peri), GFP_KERNEL);
if (!module->private_data) {
- err("fimc_is_device_sensor_peri is NULL");
+ probe_err("fimc_is_device_sensor_peri is NULL");
ret = -ENOMEM;
goto p_err;
}
unsigned long flag;
pafstat = (struct fimc_is_pafstat *)v4l2_get_subdevdata(subdev);
- if (!pafstat) {
+ if (!pafstat)
err("%s, failed to get PAFSTAT", __func__);
- return;
- }
switch (type) {
case CSIS_NOTIFY_DMA_END_VC_MIPISTAT:
{
int ret = 0;
struct fimc_is_pafstat *pafstat;
+ struct v4l2_subdev_pad_config *cfg = NULL;
+ struct v4l2_subdev_format *fmt = NULL;
pafstat = v4l2_get_subdevdata(subdev);
if (!pafstat) {
pafstat_hw_com_s_output_mask(pafstat->regs_com, 1);
pafstat_hw_sw_reset(pafstat->regs);
} else {
- struct fimc_is_module_enum *module;
- struct v4l2_subdev_pad_config *cfg = NULL;
- struct v4l2_subdev_format fmt;
-
- module = (struct fimc_is_module_enum *)v4l2_get_subdev_hostdata(subdev);
- if (!module) {
- err("[PAFSTAT:%d] A host data of PAFSTAT is null", pafstat->id);
- return -ENODEV;
- }
-
- if (!module->cfg) {
- err("module->cfg is NULL");
- return -EINVAL;
- }
-
- fmt.format.width = module->cfg->width;
- fmt.format.height = module->cfg->height;
-
- pafstat_s_format(subdev, cfg, &fmt);
+ pafstat_s_format(subdev, cfg, fmt);
pafstat_s_stream(subdev, 1);
pafstat_hw_com_s_output_mask(pafstat->regs_com, 0);
}
if (len < stat0_len) {
stat0_len = len;
- warn("the size of STAT0 buffer is too small: %zd < %zd",
+ warn("the size of STAT0 buffer is too small: %d < %d",
len, stat0_len);
}