Example #1
0
int pn544_htc_get_bootmode(void) {
	char sbootmode[30] = "default";
#if NFC_GET_BOOTMODE
	strcpy(sbootmode,htc_get_bootmode());
#endif  
	if (strcmp(sbootmode, "offmode_charging") == 0) {
		I("%s: Check bootmode done NFC_BOOT_MODE_OFF_MODE_CHARGING\n",__func__);
		return NFC_BOOT_MODE_OFF_MODE_CHARGING;
	} else if (strcmp(sbootmode, "ftm") == 0) {
		I("%s: Check bootmode done NFC_BOOT_MODE_FTM\n",__func__);
		return NFC_BOOT_MODE_FTM;
	} else if (strcmp(sbootmode, "download") == 0) {
		I("%s: Check bootmode done NFC_BOOT_MODE_DOWNLOAD\n",__func__);
		return NFC_BOOT_MODE_DOWNLOAD;
	} else {
		I("%s: Check bootmode done NFC_BOOT_MODE_NORMAL mode = %s\n",__func__,sbootmode);
		return NFC_BOOT_MODE_NORMAL;
	}
}
int32_t ov2722_sub_sensor_config32(struct msm_sensor_ctrl_t *s_ctrl,
	void __user *argp)
{
	struct sensorb_cfg_data32 *cdata = (struct sensorb_cfg_data32 *)argp;
	long rc = 0;

	switch (cdata->cfgtype) {
	case CFG_WRITE_I2C_ARRAY:
	{
		struct msm_camera_i2c_reg_setting32 conf_array32;
		struct msm_camera_i2c_reg_setting conf_array;
		struct msm_camera_i2c_reg_array *reg_setting = NULL;
		struct msm_camera_i2c_reg_array *reg_setting_temp = NULL;
		int start_stream = 0;
		mutex_lock(s_ctrl->msm_sensor_mutex);

		if (s_ctrl->sensor_state != MSM_SENSOR_POWER_UP) {
			pr_err("[CAM]-sub, %s:%d failed: invalid state %d\n", __func__,
				__LINE__, s_ctrl->sensor_state);
				rc = -EFAULT;
			break;
		}

		if (copy_from_user(&conf_array32,
			(void *)compat_ptr(cdata->cfg.setting),
			sizeof(struct msm_camera_i2c_reg_setting32))) {
			pr_err("[CAM]-sub, %s:%d failed\n", __func__, __LINE__);
			rc = -EFAULT;
			break;
		}

		conf_array.addr_type = conf_array32.addr_type;
		conf_array.data_type = conf_array32.data_type;
		conf_array.delay = conf_array32.delay;
		conf_array.size = conf_array32.size;
		conf_array.reg_setting = compat_ptr(conf_array32.reg_setting);

		if (!conf_array.size) {
			pr_err("[CAM]-sub, %s:%d failed\n", __func__, __LINE__);
			rc = -EFAULT;
			break;
		}

		reg_setting = kzalloc(conf_array.size *
			(sizeof(struct msm_camera_i2c_reg_array)), GFP_KERNEL);
		if (!reg_setting) {
			pr_err("[CAM]-sub, %s:%d failed\n", __func__, __LINE__);
			rc = -ENOMEM;
			break;
		}
		if (copy_from_user(reg_setting,
			(void *)(conf_array.reg_setting),
			conf_array.size *
			sizeof(struct msm_camera_i2c_reg_array))) {
			pr_err("[CAM]-sub, %s:%d failed\n", __func__, __LINE__);
			kfree(reg_setting);
			rc = -EFAULT;
			break;
		}

		conf_array.reg_setting = reg_setting;
		reg_setting_temp = reg_setting;

		if (reg_setting_temp->reg_addr == 0x0100 && reg_setting_temp->reg_data == 0x01)
		{
			g_subcam_SOF = 0;
			start_stream = 1;
			pr_info("[CAM]-sub, %s:start_stream = 1\n", __func__);
		}
		if (reg_setting_temp->reg_addr == 0x0100 && reg_setting_temp->reg_data == 0x00)
		{
			g_subcam_no_ack = 0;
		}

		rc = s_ctrl->sensor_i2c_client->i2c_func_tbl->
			i2c_write_table(s_ctrl->sensor_i2c_client,
			&conf_array);
		kfree(reg_setting);

		if (start_stream == 1)
		{
			if (!strcmp(htc_get_bootmode(), "factory2"))
				pr_info("[CAM]-sub, %s: MFG skip ov2722_check_SOF\n", __func__);
			else
				rc = ov2722_check_SOF(s_ctrl);
		}
		mutex_unlock(s_ctrl->msm_sensor_mutex);
		break;
	}
	default:
		rc = msm_sensor_config32(s_ctrl, argp);
		break;
	}
	return rc;
}