Пример #1
0
int sr130pc10_sensor_ext_config(void __user *argp)
{
	struct sensor_ext_cfg_data cfg_data;
	int err = 0;

	printk(KERN_DEBUG "[teddy][%s][E]\n", __func__);

	if (copy_from_user(
		(void *)&cfg_data, (const void *)argp, sizeof(cfg_data)))
		printk(KERN_DEBUG "fail copy_from_user!\n");

	switch (cfg_data.cmd) {
	case EXT_CFG_SET_BRIGHTNESS:
		err = sr130pc10_set_exposure_value(0, cfg_data.value_1);
		break;

	case EXT_CFG_SET_ISO:
		/*err = s5k5ccg_set_ISO(0, cfg_data.value_1);*/
		break;

	case EXT_CFG_SET_MOVIE_MODE:
		sr130pc10_set_movie_mode(cfg_data.value_1);
		break;

	case EXT_CFG_GET_EXIF:
		sr130pc10_get_exif(&cfg_data.value_1, &cfg_data.value_2);
		break;
	case EXT_CAM_SET_FLIP:
		sr130pc10_set_flipmode(cfg_data.value_1);
		break;
	default:
		break;
	}

	if (copy_to_user(
		(void *)argp, (const void *)&cfg_data, sizeof(cfg_data)))
		printk(KERN_DEBUG "fail copy_to_user!\n");

	return err;
}
static long sr130pc10_set_sensor_mode(int mode)
{
	int cnt, vsync_value;
	printk(KERN_DEBUG "[CAM-SENSOR] =Sensor Mode\n ");

	switch (mode) {
	case SENSOR_PREVIEW_MODE:
	case SENSOR_VIDEO_MODE:
		printk(KERN_DEBUG "[SR130PC10]-> Preview\n");
		if (sr130pc10_ctrl->op_mode == 0) {
			sr130pc10_sensor_write_list(sr130pc10_reg_init,
					sizeof(sr130pc10_reg_init) /
					sizeof(sr130pc10_reg_init[0]),
					"sr130pc10_reg_init");
			sr130pc10_ctrl->op_mode = 1;
			if (sr130pc10_ctrl->dtp_mode == 1)
				sr130pc10_check_dataline(1);
		}

		factory_test = 0;
		for (cnt = 0; cnt < 200; cnt++) {
			vsync_value = __gpio_get_value(14);
			if (vsync_value) {
				/*printk(KERN_DEBUG " on preview,
			start cnt:%d vsync_value:%d\n", cnt, vsync_value); */
				break;
			} else {
				/*printk(KERN_DEBUG
				    " on preview,  "
					"wait cnt:%d vsync_value:%d\n",
				     cnt, vsync_value);*/
				/*msleep(1);	changed for coding rule*/
				udelay(1000);
			}
		}
		printk(KERN_DEBUG
		  " on preview,  "
		  "wait cnt:%d vsync_value:%d\n",
		  cnt, vsync_value);

		sr130pc10_sensor_write_list(sr130pc10_preview_reg,
			sizeof(sr130pc10_preview_reg) /
			sizeof(sr130pc10_preview_reg[0]),
			"sr130pc10_preview_reg");	/* preview start */
		if (sr130pc10_ctrl->cam_mode == SENSOR_MOVIE)
			sr130pc10_set_movie_mode(SENSOR_MOVIE);
		sr130pc10_set_exposure_value(0, sr130pc10_ctrl->settings.exposure);

		break;

	case SENSOR_SNAPSHOT_MODE:
	case SENSOR_RAW_SNAPSHOT_MODE:
		printk(KERN_DEBUG "[PGH}-> Capture\n");
		if (Flipmode) {
			sr130pc10_sensor_write_list(
				sr130pc10_capture_reg_X_Flip,
				sizeof(sr130pc10_capture_reg_X_Flip) /
				sizeof(sr130pc10_capture_reg_X_Flip[0]),
				"sr130pc10_capture_reg_X_Flip");
			/* preview start */
		} else {
		sr130pc10_sensor_write_list(sr130pc10_capture_reg,
			sizeof(sr130pc10_capture_reg) /
			sizeof(sr130pc10_capture_reg[0]),
			"sr130pc10_capture_reg");	/* preview start */
		}
		   /*SecFeature : for Android CCD preview mirror
			/ snapshot non-mirror
		   if(factory_test == 0) {
			   if(rotation_status == 90 || rotation_status
				== 270) {
				   sr130pc10_sensor_write(0x03, 0x00);
				   sr130pc10_sensor_write(0x11, 0x93);
			   } else {
				   sr130pc10_sensor_write(0x03, 0x00);
				   sr130pc10_sensor_write(0x11, 0x90);
			   }
		   }
		 */
		break;
	default:
		return 0;
	}

	return 0;
}