summaryrefslogtreecommitdiff
path: root/drivers/media/platform/soc_camera/tegra_camera/common.h
diff options
context:
space:
mode:
authorBryan Wu <pengw@nvidia.com>2015-10-15 13:10:29 -0700
committerMatthew Pedro <mapedro@nvidia.com>2015-10-29 10:52:36 -0700
commitff5bccb61c1f8da1f63451fda88bd1f65dbee5b2 (patch)
tree4f3494c090cc004caec0c96a7028c19b40c05264 /drivers/media/platform/soc_camera/tegra_camera/common.h
parentb15d976c0a2e6a3c512001a3be3feaf057655b8b (diff)
media: tegra_camera: introduce 2 kthreads for capture
Use one kthread to start capture a frame and wait for next frame start. Before waiting, it will move the current buffer to another queue which will be handled another kthread. The second kthread (capture_done) will wait for memory output done sync point event and handle the buffer to videobuffer2 framework as capture done. Bug 1686911 Change-Id: Ia092c708ecca3b2e7cbc657a96fd247ea4a00d2f Signed-off-by: Bryan Wu <pengw@nvidia.com> Reviewed-on: http://git-master/r/819177 GVS: Gerrit_Virtual_Submit Reviewed-by: Matthew Pedro <mapedro@nvidia.com>
Diffstat (limited to 'drivers/media/platform/soc_camera/tegra_camera/common.h')
-rw-r--r--drivers/media/platform/soc_camera/tegra_camera/common.h19
1 files changed, 14 insertions, 5 deletions
diff --git a/drivers/media/platform/soc_camera/tegra_camera/common.h b/drivers/media/platform/soc_camera/tegra_camera/common.h
index c27c83cd4558..1d71c2ba39f5 100644
--- a/drivers/media/platform/soc_camera/tegra_camera/common.h
+++ b/drivers/media/platform/soc_camera/tegra_camera/common.h
@@ -62,9 +62,13 @@ struct tegra_camera_ops {
void (*clks_disable)(struct tegra_camera_dev *cam);
void (*capture_clean)(struct tegra_camera_dev *vi2_cam);
- int (*capture_setup)(struct tegra_camera_dev *vi2_cam);
+ int (*capture_setup)(struct tegra_camera_dev *vi2_cam,
+ struct tegra_camera_buffer *buf);
int (*capture_start)(struct tegra_camera_dev *vi2_cam,
struct tegra_camera_buffer *buf);
+ int (*capture_wait)(struct tegra_camera_dev *vi2_cam,
+ struct tegra_camera_buffer *buf);
+ int (*capture_done)(struct tegra_camera_dev *vi2_cam, int port);
int (*capture_stop)(struct tegra_camera_dev *vi2_cam, int port);
void (*init_syncpts)(struct tegra_camera_dev *vi2_cam);
@@ -76,7 +80,8 @@ struct tegra_camera_ops {
void (*deactivate)(struct tegra_camera_dev *vi2_cam);
int (*port_is_valid)(int port);
- int (*mipi_calibration)(struct tegra_camera_dev *vi2_cam);
+ int (*mipi_calibration)(struct tegra_camera_dev *vi2_cam,
+ struct tegra_camera_buffer *buf);
};
struct tegra_camera_dev {
@@ -93,16 +98,20 @@ struct tegra_camera_dev {
struct tegra_camera_ops *ops;
void __iomem *reg_base;
- spinlock_t videobuf_queue_lock;
struct list_head capture;
+ spinlock_t capture_lock;
+ struct list_head done;
+ spinlock_t done_lock;
struct vb2_buffer *active;
struct vb2_alloc_ctx *alloc_ctx;
enum v4l2_field field;
int sequence_a;
int sequence_b;
- struct task_struct *kthread_capture;
- wait_queue_head_t wait;
+ struct task_struct *kthread_capture_start;
+ struct task_struct *kthread_capture_done;
+ wait_queue_head_t capture_start_wait;
+ wait_queue_head_t capture_done_wait;
/* syncpt ids */
u32 syncpt_id_csi_a;