aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/fimc/fimc.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/samsung/fimc/fimc.h')
-rw-r--r--drivers/media/video/samsung/fimc/fimc.h42
1 files changed, 41 insertions, 1 deletions
diff --git a/drivers/media/video/samsung/fimc/fimc.h b/drivers/media/video/samsung/fimc/fimc.h
index 9527f52..b648965 100644
--- a/drivers/media/video/samsung/fimc/fimc.h
+++ b/drivers/media/video/samsung/fimc/fimc.h
@@ -25,6 +25,9 @@
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/videobuf-core.h>
+#ifdef CONFIG_SLP_DMABUF
+#include <media/videobuf2-core.h>
+#endif
#include <media/v4l2-mediabus.h>
#if defined(CONFIG_BUSFREQ_OPP) || defined(CONFIG_BUSFREQ_LOCK_WRAPPER)
#include <mach/dev.h>
@@ -42,7 +45,9 @@
#define FIMC_CMA_NAME "fimc"
#define FIMC_CORE_CLK "sclk_fimc"
-#define FIMC_CLK_RATE 166750000
+
+extern int fimc_clk_rate(void);
+
#define EXYNOS_BUSFREQ_NAME "exynos-busfreq"
#if defined(CONFIG_ARCH_EXYNOS4)
@@ -58,7 +63,11 @@
#define FIMC_SUBDEVS 3
#define FIMC_OUTBUFS 3
#define FIMC_INQUEUES 10
+#if defined(CONFIG_SLP)
+#define FIMC_MAX_CTXS 8
+#else
#define FIMC_MAX_CTXS 4
+#endif
#define FIMC_TPID 3
#define FIMC_CAPBUFS 32
#define FIMC_ONESHOT_TIMEOUT 200
@@ -205,12 +214,22 @@ enum cam_mclk_status {
CAM_MCLK_ON,
};
+enum fimc_plane_num {
+ PLANE_1 = 0x1,
+ PLANE_2 = 0x2,
+ PLANE_3 = 0x3,
+ PLANE_4 = 0x4,
+};
+
/*
* STRUCTURES
*/
/* for reserved memory */
struct fimc_meminfo {
+#ifdef CONFIG_USE_FIMC_CMA
+ void *cpu_addr;
+#endif
dma_addr_t base; /* buffer base */
size_t size; /* total length */
dma_addr_t curr; /* current addr */
@@ -263,6 +282,9 @@ struct fimc_capinfo {
/* using c210 */
struct list_head outgoing_q;
int nr_bufs;
+#ifdef CONFIG_SLP_DMABUF
+ int nr_plane;
+#endif
int irq;
int lastirq;
@@ -326,6 +348,9 @@ struct fimc_ctx {
struct fimc_overlay overlay;
u32 buf_num;
+#ifdef CONFIG_SLP_DMABUF
+ int nr_plane;
+#endif
u32 is_requested;
struct fimc_buf_set src[FIMC_OUTBUFS];
struct fimc_buf_set dst[FIMC_OUTBUFS];
@@ -477,6 +502,10 @@ struct fimc_control {
struct timeval before_time;
char cma_name[16];
bool restart;
+#ifdef CONFIG_SLP_DMABUF
+ struct vb2_buffer *out_bufs[VIDEO_MAX_FRAME];
+ struct vb2_buffer *cap_bufs[VIDEO_MAX_FRAME];
+#endif
};
/* global */
@@ -766,5 +795,16 @@ static inline struct fimc_control *get_fimc_ctrl(int id)
{
return &fimc_dev->ctrl[id];
}
+#ifdef CONFIG_SLP_DMABUF
+extern void _fimc_queue_free(struct fimc_control *ctrl,
+ enum v4l2_buf_type type);
+extern int fimc_queue_alloc(struct fimc_control *ctrl, enum v4l2_buf_type type,
+ enum v4l2_memory memory, unsigned int num_buffers,
+ unsigned int num_planes);
+extern int _qbuf_dmabuf(struct fimc_control *ctrl, struct vb2_buffer *vb,
+ struct v4l2_buffer *b);
+extern int _dqbuf_dmabuf(struct fimc_control *ctrl, struct vb2_buffer *vb,
+ struct v4l2_buffer *b);
+#endif
#endif /* __FIMC_H */