static int sr130pc10_s_stream(struct v4l2_subdev *sd, int enable) { struct sr130pc10_state *state = to_state(sd); /* struct i2c_client *client = v4l2_get_subdevdata(sd); */ int err = 0; cam_info("stream mode = %d\n", enable); switch (enable) { case STREAM_MODE_CAM_OFF: if (state->sensor_mode == SENSOR_CAMERA) { if (state->check_dataline) err = sr130pc10_check_dataline(sd, 0); else err = sr130pc10_control_stream(sd, STREAM_STOP); } break; case STREAM_MODE_CAM_ON: /* The position of this code need to be adjusted later */ if (state->sensor_mode == SENSOR_CAMERA) { if (state->req_fmt.priv == V4L2_PIX_FMT_MODE_CAPTURE) err = sr130pc10_set_capture_start(sd); else err = sr130pc10_set_preview_start(sd); } break; case STREAM_MODE_MOVIE_ON: cam_dbg("do nothing(movie on)!!\n"); break; case STREAM_MODE_MOVIE_OFF: cam_dbg("do nothing(movie off)!!\n"); break; default: cam_err("ERR: Invalid stream mode\n"); break; } if (unlikely(err < 0)) { cam_err("ERR: faild\n"); return err; } return 0; }
void sensor_native_control_front(void __user *arg) { int err = 0; struct ioctl_native_cmd ctrl_info; struct msm_camera_v4l2_ioctl_t *ioctl_ptr = arg; if (copy_from_user(&ctrl_info, (void __user *)ioctl_ptr->ioctl_ptr, sizeof(ctrl_info))) { pr_info("fail copy_from_user!"); } /* pr_info("mode : %d", ctrl_info.mode);*/ switch (ctrl_info.mode) { case EXT_CAM_EV: err = sr130pc10_set_exposure_value(0, ctrl_info.value_1); break; case EXT_CAM_MOVIE_MODE: sr130pc10_ctrl->cam_mode = ctrl_info.value_1; /*sr130pc10_set_movie_mode(ctrl_info.value_1);*/ break; case EXT_CAM_EXIF: ctrl_info.value_1 = sr130pc10_get_exif(ctrl_info.address, ctrl_info.value_2); break; case EXT_CAM_SET_FLIP: sr130pc10_set_flipmode(ctrl_info.value_1); break; case EXT_CAM_DTP_TEST: sr130pc10_check_dataline(ctrl_info.value_1); sr130pc10_ctrl->dtp_mode = ctrl_info.value_1; break; default: break; } if (copy_to_user((void __user *)ioctl_ptr->ioctl_ptr, (const void *)&ctrl_info, sizeof(ctrl_info))) pr_info("fail copy_to_user!"); return ; }
static int sr130pc10_set_preview_start(struct v4l2_subdev *sd) { struct i2c_client *client = v4l2_get_subdevdata(sd); struct sr130pc10_state *state = to_state(sd); int err = -EINVAL; cam_info("reset preview\n"); cam_dbg("load sr130pc10_preview\n"); err = sr130pc10_i2c_set_config_register(client, front_preview_camera_regs, PREVIEW_CAMERA_NUM_OF_REGS, "front_preview_camera_regs"); if (state->check_dataline) err = sr130pc10_check_dataline(sd, 1); if (unlikely(err)) { cam_err("fail to make preview\n"); return err; } return 0; }
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; }