}
 EXPORT_SYMBOL_GPL(ipu_cpmem_set_uv_offset);
 
-void ipu_cpmem_interlaced_scan(struct ipuv3_channel *ch, int stride)
+void ipu_cpmem_interlaced_scan(struct ipuv3_channel *ch, int stride,
+                              u32 pixelformat)
 {
-       u32 ilo, sly;
+       u32 ilo, sly, sluv;
 
        if (stride < 0) {
                stride = -stride;
 
        sly = (stride * 2) - 1;
 
+       switch (pixelformat) {
+       case V4L2_PIX_FMT_YUV420:
+       case V4L2_PIX_FMT_YVU420:
+               sluv = stride / 2 - 1;
+               break;
+       case V4L2_PIX_FMT_NV12:
+               sluv = stride - 1;
+               break;
+       case V4L2_PIX_FMT_YUV422P:
+               sluv = stride - 1;
+               break;
+       case V4L2_PIX_FMT_NV16:
+               sluv = stride * 2 - 1;
+               break;
+       default:
+               sluv = 0;
+               break;
+       }
+
        ipu_ch_param_write_field(ch, IPU_FIELD_SO, 1);
        ipu_ch_param_write_field(ch, IPU_FIELD_ILO, ilo);
        ipu_ch_param_write_field(ch, IPU_FIELD_SLY, sly);
+       if (sluv)
+               ipu_ch_param_write_field(ch, IPU_FIELD_SLUV, sluv);
 };
 EXPORT_SYMBOL_GPL(ipu_cpmem_interlaced_scan);
 
 
        if (image.pix.field == V4L2_FIELD_NONE &&
            V4L2_FIELD_HAS_BOTH(infmt->field) &&
            channel == priv->out_ch)
-               ipu_cpmem_interlaced_scan(channel, image.pix.bytesperline);
+               ipu_cpmem_interlaced_scan(channel, image.pix.bytesperline,
+                                         image.pix.pixelformat);
 
        ret = ipu_ic_task_idma_init(priv->ic, channel,
                                    image.pix.width, image.pix.height,
 
        if (image.pix.field == V4L2_FIELD_NONE &&
            V4L2_FIELD_HAS_BOTH(infmt->field))
                ipu_cpmem_interlaced_scan(priv->idmac_ch,
-                                         image.pix.bytesperline);
+                                         image.pix.bytesperline,
+                                         image.pix.pixelformat);
 
        ipu_idmac_set_double_buffer(priv->idmac_ch, true);
 
 
 void ipu_cpmem_set_high_priority(struct ipuv3_channel *ch);
 void ipu_cpmem_set_buffer(struct ipuv3_channel *ch, int bufnum, dma_addr_t buf);
 void ipu_cpmem_set_uv_offset(struct ipuv3_channel *ch, u32 u_off, u32 v_off);
-void ipu_cpmem_interlaced_scan(struct ipuv3_channel *ch, int stride);
+void ipu_cpmem_interlaced_scan(struct ipuv3_channel *ch, int stride,
+                              u32 pixelformat);
 void ipu_cpmem_set_axi_id(struct ipuv3_channel *ch, u32 id);
 int ipu_cpmem_get_burstsize(struct ipuv3_channel *ch);
 void ipu_cpmem_set_burstsize(struct ipuv3_channel *ch, int burstsize);