aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/platform/marvell-ccic
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2014-11-18 07:51:01 -0500
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2014-11-25 05:55:32 -0500
commit0c3a14c177aa85afb991e7c2be3921aa9a52a893 (patch)
treede833b66ee640393292bc404e16c8f43a49ae89c /drivers/media/platform/marvell-ccic
parente5ae8fa739f8a1d5c292c5b13fa33ac64166e5a0 (diff)
[media] vb2-dma-sg: add allocation context to dma-sg
Require that dma-sg also uses an allocation context. This is in preparation for adding prepare/finish memops to sync the memory between DMA and CPU. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Pawel Osciak <pawel@osciak.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/platform/marvell-ccic')
-rw-r--r--drivers/media/platform/marvell-ccic/mcam-core.c13
-rw-r--r--drivers/media/platform/marvell-ccic/mcam-core.h1
2 files changed, 13 insertions, 1 deletions
diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c
index f0eeb6cd262c..c3ff5388aeb3 100644
--- a/drivers/media/platform/marvell-ccic/mcam-core.c
+++ b/drivers/media/platform/marvell-ccic/mcam-core.c
@@ -1079,6 +1079,8 @@ static int mcam_vb_queue_setup(struct vb2_queue *vq,
1079 *nbufs = minbufs; 1079 *nbufs = minbufs;
1080 if (cam->buffer_mode == B_DMA_contig) 1080 if (cam->buffer_mode == B_DMA_contig)
1081 alloc_ctxs[0] = cam->vb_alloc_ctx; 1081 alloc_ctxs[0] = cam->vb_alloc_ctx;
1082 else if (cam->buffer_mode == B_DMA_sg)
1083 alloc_ctxs[0] = cam->vb_alloc_ctx_sg;
1082 return 0; 1084 return 0;
1083} 1085}
1084 1086
@@ -1286,10 +1288,12 @@ static int mcam_setup_vb2(struct mcam_camera *cam)
1286 vq->ops = &mcam_vb2_ops; 1288 vq->ops = &mcam_vb2_ops;
1287 vq->mem_ops = &vb2_dma_contig_memops; 1289 vq->mem_ops = &vb2_dma_contig_memops;
1288 vq->buf_struct_size = sizeof(struct mcam_vb_buffer); 1290 vq->buf_struct_size = sizeof(struct mcam_vb_buffer);
1289 cam->vb_alloc_ctx = vb2_dma_contig_init_ctx(cam->dev);
1290 vq->io_modes = VB2_MMAP | VB2_USERPTR; 1291 vq->io_modes = VB2_MMAP | VB2_USERPTR;
1291 cam->dma_setup = mcam_ctlr_dma_contig; 1292 cam->dma_setup = mcam_ctlr_dma_contig;
1292 cam->frame_complete = mcam_dma_contig_done; 1293 cam->frame_complete = mcam_dma_contig_done;
1294 cam->vb_alloc_ctx = vb2_dma_contig_init_ctx(cam->dev);
1295 if (IS_ERR(cam->vb_alloc_ctx))
1296 return PTR_ERR(cam->vb_alloc_ctx);
1293#endif 1297#endif
1294 break; 1298 break;
1295 case B_DMA_sg: 1299 case B_DMA_sg:
@@ -1300,6 +1304,9 @@ static int mcam_setup_vb2(struct mcam_camera *cam)
1300 vq->io_modes = VB2_MMAP | VB2_USERPTR; 1304 vq->io_modes = VB2_MMAP | VB2_USERPTR;
1301 cam->dma_setup = mcam_ctlr_dma_sg; 1305 cam->dma_setup = mcam_ctlr_dma_sg;
1302 cam->frame_complete = mcam_dma_sg_done; 1306 cam->frame_complete = mcam_dma_sg_done;
1307 cam->vb_alloc_ctx_sg = vb2_dma_sg_init_ctx(cam->dev);
1308 if (IS_ERR(cam->vb_alloc_ctx_sg))
1309 return PTR_ERR(cam->vb_alloc_ctx_sg);
1303#endif 1310#endif
1304 break; 1311 break;
1305 case B_vmalloc: 1312 case B_vmalloc:
@@ -1325,6 +1332,10 @@ static void mcam_cleanup_vb2(struct mcam_camera *cam)
1325 if (cam->buffer_mode == B_DMA_contig) 1332 if (cam->buffer_mode == B_DMA_contig)
1326 vb2_dma_contig_cleanup_ctx(cam->vb_alloc_ctx); 1333 vb2_dma_contig_cleanup_ctx(cam->vb_alloc_ctx);
1327#endif 1334#endif
1335#ifdef MCAM_MODE_DMA_SG
1336 if (cam->buffer_mode == B_DMA_sg)
1337 vb2_dma_sg_cleanup_ctx(cam->vb_alloc_ctx_sg);
1338#endif
1328} 1339}
1329 1340
1330 1341
diff --git a/drivers/media/platform/marvell-ccic/mcam-core.h b/drivers/media/platform/marvell-ccic/mcam-core.h
index 60a8e1cfeff7..aa0c6eac254a 100644
--- a/drivers/media/platform/marvell-ccic/mcam-core.h
+++ b/drivers/media/platform/marvell-ccic/mcam-core.h
@@ -176,6 +176,7 @@ struct mcam_camera {
176 /* DMA buffers - DMA modes */ 176 /* DMA buffers - DMA modes */
177 struct mcam_vb_buffer *vb_bufs[MAX_DMA_BUFS]; 177 struct mcam_vb_buffer *vb_bufs[MAX_DMA_BUFS];
178 struct vb2_alloc_ctx *vb_alloc_ctx; 178 struct vb2_alloc_ctx *vb_alloc_ctx;
179 struct vb2_alloc_ctx *vb_alloc_ctx_sg;
179 180
180 /* Mode-specific ops, set at open time */ 181 /* Mode-specific ops, set at open time */
181 void (*dma_setup)(struct mcam_camera *cam); 182 void (*dma_setup)(struct mcam_camera *cam);