.g_volatile_ctrl = s5p_mfc_dec_g_v_ctrl,
 };
 
-/* Get cropping information */
-static int vidioc_g_crop(struct file *file, void *priv,
-               struct v4l2_crop *cr)
+/* Get compose information */
+static int vidioc_g_selection(struct file *file, void *priv,
+                             struct v4l2_selection *s)
 {
        struct s5p_mfc_ctx *ctx = fh_to_ctx(priv);
        struct s5p_mfc_dev *dev = ctx->dev;
        u32 left, right, top, bottom;
+       u32 width, height;
+
+       if (s->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+               return -EINVAL;
 
        if (ctx->state != MFCINST_HEAD_PARSED &&
            ctx->state != MFCINST_RUNNING &&
            ctx->state != MFCINST_FINISHING &&
            ctx->state != MFCINST_FINISHED) {
-               mfc_err("Can not get crop information\n");
+               mfc_err("Can not get compose information\n");
                return -EINVAL;
        }
        if (ctx->src_fmt->fourcc == V4L2_PIX_FMT_H264) {
                top = s5p_mfc_hw_call(dev->mfc_ops, get_crop_info_v, ctx);
                bottom = top >> S5P_FIMV_SHARED_CROP_BOTTOM_SHIFT;
                top = top & S5P_FIMV_SHARED_CROP_TOP_MASK;
-               cr->c.left = left;
-               cr->c.top = top;
-               cr->c.width = ctx->img_width - left - right;
-               cr->c.height = ctx->img_height - top - bottom;
-               mfc_debug(2, "Cropping info [h264]: l=%d t=%d w=%d h=%d (r=%d b=%d fw=%d fh=%d\n",
-                         left, top, cr->c.width, cr->c.height, right, bottom,
+               width = ctx->img_width - left - right;
+               height = ctx->img_height - top - bottom;
+               mfc_debug(2, "Composing info [h264]: l=%d t=%d w=%d h=%d (r=%d b=%d fw=%d fh=%d\n",
+                         left, top, s->r.width, s->r.height, right, bottom,
                          ctx->buf_width, ctx->buf_height);
        } else {
-               cr->c.left = 0;
-               cr->c.top = 0;
-               cr->c.width = ctx->img_width;
-               cr->c.height = ctx->img_height;
-               mfc_debug(2, "Cropping info: w=%d h=%d fw=%d fh=%d\n",
-                         cr->c.width,  cr->c.height, ctx->buf_width,
+               left = 0;
+               top = 0;
+               width = ctx->img_width;
+               height = ctx->img_height;
+               mfc_debug(2, "Composing info: w=%d h=%d fw=%d fh=%d\n",
+                         s->r.width, s->r.height, ctx->buf_width,
                          ctx->buf_height);
        }
+
+       switch (s->target) {
+       case V4L2_SEL_TGT_COMPOSE:
+       case V4L2_SEL_TGT_COMPOSE_DEFAULT:
+       case V4L2_SEL_TGT_COMPOSE_BOUNDS:
+               s->r.left = left;
+               s->r.top = top;
+               s->r.width = width;
+               s->r.height = height;
+               break;
+       default:
+               return -EINVAL;
+       }
        return 0;
 }
 
        .vidioc_expbuf = vidioc_expbuf,
        .vidioc_streamon = vidioc_streamon,
        .vidioc_streamoff = vidioc_streamoff,
-       .vidioc_g_crop = vidioc_g_crop,
+       .vidioc_g_selection = vidioc_g_selection,
        .vidioc_decoder_cmd = vidioc_decoder_cmd,
        .vidioc_subscribe_event = vidioc_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,