v4l2_subdev_notify(*csi->subdev, CSI_NOTIFY_VSYNC, &vsync_cnt);
}
- wake_up(&csi->wait_queue);
-
tasklet_schedule(&csi->tasklet_csis_str);
}
if (!csi->workqueue)
probe_warn("failed to alloc CSI own workqueue, will be use global one");
- init_waitqueue_head(&csi->wait_queue);
-
v4l2_subdev_init(subdev_csi, &subdev_ops);
v4l2_set_subdevdata(subdev_csi, csi);
v4l2_set_subdev_hostdata(subdev_csi, device);
int retry = 10;
struct v4l2_subdev *subdev_module;
- struct fimc_is_device_csi *csi;
- long timetowait;
FIMC_BUG(!device);
subdev_module = device->subdev_module;
if (subdev_module) {
- csi = v4l2_get_subdevdata(device->subdev_csi);
- if (!csi) {
- merr("CSI is NULL", device);
- return -EINVAL;
- }
-
- /* HACK: if sensor stop called at Vblank time,
- * wait for next vvalid time for prevent sensor malfunction
- */
- timetowait = wait_event_timeout(csi->wait_queue,
- atomic_read(&csi->vvalid), 30);
- if (!timetowait)
- mwarn("wait CSI VVALID timeout (%ld)", csi, timetowait);
-
ret = v4l2_subdev_call(subdev_module, video, s_stream, false);
if (ret)
merr("v4l2_subdev_call(s_stream) is fail(%d)", device, ret);