|
@@ -106,11 +106,22 @@ static int rpf_s_stream(struct v4l2_subdev *subdev, int enable)
|
|
|
+ crop->left * fmtinfo->bpp[0] / 8;
|
|
|
pstride = format->plane_fmt[0].bytesperline
|
|
|
<< VI6_RPF_SRCM_PSTRIDE_Y_SHIFT;
|
|
|
+
|
|
|
+ vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_Y,
|
|
|
+ rpf->buf_addr[0] + rpf->offsets[0]);
|
|
|
+
|
|
|
if (format->num_planes > 1) {
|
|
|
rpf->offsets[1] = crop->top * format->plane_fmt[1].bytesperline
|
|
|
+ crop->left * fmtinfo->bpp[1] / 8;
|
|
|
pstride |= format->plane_fmt[1].bytesperline
|
|
|
<< VI6_RPF_SRCM_PSTRIDE_C_SHIFT;
|
|
|
+
|
|
|
+ vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C0,
|
|
|
+ rpf->buf_addr[1] + rpf->offsets[1]);
|
|
|
+
|
|
|
+ if (format->num_planes > 2)
|
|
|
+ vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_C1,
|
|
|
+ rpf->buf_addr[2] + rpf->offsets[1]);
|
|
|
}
|
|
|
|
|
|
vsp1_rpf_write(rpf, VI6_RPF_SRCM_PSTRIDE, pstride);
|
|
@@ -179,6 +190,13 @@ static void rpf_vdev_queue(struct vsp1_video *video,
|
|
|
struct vsp1_video_buffer *buf)
|
|
|
{
|
|
|
struct vsp1_rwpf *rpf = container_of(video, struct vsp1_rwpf, video);
|
|
|
+ unsigned int i;
|
|
|
+
|
|
|
+ for (i = 0; i < 3; ++i)
|
|
|
+ rpf->buf_addr[i] = buf->addr[i];
|
|
|
+
|
|
|
+ if (!vsp1_entity_is_streaming(&rpf->entity))
|
|
|
+ return;
|
|
|
|
|
|
vsp1_rpf_write(rpf, VI6_RPF_SRCM_ADDR_Y,
|
|
|
buf->addr[0] + rpf->offsets[0]);
|