Commit d0d28326 authored by Sachin Kamat's avatar Sachin Kamat Committed by Mauro Carvalho Chehab

[media] s5p-g2d: Add HFLIP and VFLIP support

Add support for flipping the image horizontally and vertically.
Signed-off-by: default avatarSachin Kamat <sachin.kamat@linaro.org>
Acked-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent eb732518
...@@ -77,6 +77,11 @@ void g2d_set_rop4(struct g2d_dev *d, u32 r) ...@@ -77,6 +77,11 @@ void g2d_set_rop4(struct g2d_dev *d, u32 r)
w(r, ROP4_REG); w(r, ROP4_REG);
} }
void g2d_set_flip(struct g2d_dev *d, u32 r)
{
w(r, SRC_MSK_DIRECT_REG);
}
u32 g2d_cmd_stretch(u32 e) u32 g2d_cmd_stretch(u32 e)
{ {
e &= 1; e &= 1;
......
...@@ -185,6 +185,11 @@ static int g2d_s_ctrl(struct v4l2_ctrl *ctrl) ...@@ -185,6 +185,11 @@ static int g2d_s_ctrl(struct v4l2_ctrl *ctrl)
else else
ctx->rop = ROP4_COPY; ctx->rop = ROP4_COPY;
break; break;
case V4L2_CID_HFLIP:
ctx->flip = ctx->ctrl_hflip->val | (ctx->ctrl_vflip->val << 1);
break;
default: default:
v4l2_err(&ctx->dev->v4l2_dev, "unknown control\n"); v4l2_err(&ctx->dev->v4l2_dev, "unknown control\n");
return -EINVAL; return -EINVAL;
...@@ -200,11 +205,13 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx) ...@@ -200,11 +205,13 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx)
{ {
struct g2d_dev *dev = ctx->dev; struct g2d_dev *dev = ctx->dev;
v4l2_ctrl_handler_init(&ctx->ctrl_handler, 1); v4l2_ctrl_handler_init(&ctx->ctrl_handler, 3);
if (ctx->ctrl_handler.error) {
v4l2_err(&dev->v4l2_dev, "v4l2_ctrl_handler_init failed\n"); ctx->ctrl_hflip = v4l2_ctrl_new_std(&ctx->ctrl_handler, &g2d_ctrl_ops,
return ctx->ctrl_handler.error; V4L2_CID_HFLIP, 0, 1, 1, 0);
}
ctx->ctrl_vflip = v4l2_ctrl_new_std(&ctx->ctrl_handler, &g2d_ctrl_ops,
V4L2_CID_VFLIP, 0, 1, 1, 0);
v4l2_ctrl_new_std_menu( v4l2_ctrl_new_std_menu(
&ctx->ctrl_handler, &ctx->ctrl_handler,
...@@ -215,10 +222,14 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx) ...@@ -215,10 +222,14 @@ int g2d_setup_ctrls(struct g2d_ctx *ctx)
V4L2_COLORFX_NONE); V4L2_COLORFX_NONE);
if (ctx->ctrl_handler.error) { if (ctx->ctrl_handler.error) {
v4l2_err(&dev->v4l2_dev, "v4l2_ctrl_handler_init failed\n"); int err = ctx->ctrl_handler.error;
return ctx->ctrl_handler.error; v4l2_err(&dev->v4l2_dev, "g2d_setup_ctrls failed\n");
v4l2_ctrl_handler_free(&ctx->ctrl_handler);
return err;
} }
v4l2_ctrl_cluster(2, &ctx->ctrl_hflip);
return 0; return 0;
} }
...@@ -564,6 +575,8 @@ static void device_run(void *prv) ...@@ -564,6 +575,8 @@ static void device_run(void *prv)
g2d_set_dst_addr(dev, vb2_dma_contig_plane_dma_addr(dst, 0)); g2d_set_dst_addr(dev, vb2_dma_contig_plane_dma_addr(dst, 0));
g2d_set_rop4(dev, ctx->rop); g2d_set_rop4(dev, ctx->rop);
g2d_set_flip(dev, ctx->flip);
if (ctx->in.c_width != ctx->out.c_width || if (ctx->in.c_width != ctx->out.c_width ||
ctx->in.c_height != ctx->out.c_height) ctx->in.c_height != ctx->out.c_height)
cmd |= g2d_cmd_stretch(1); cmd |= g2d_cmd_stretch(1);
......
...@@ -57,8 +57,11 @@ struct g2d_ctx { ...@@ -57,8 +57,11 @@ struct g2d_ctx {
struct v4l2_m2m_ctx *m2m_ctx; struct v4l2_m2m_ctx *m2m_ctx;
struct g2d_frame in; struct g2d_frame in;
struct g2d_frame out; struct g2d_frame out;
struct v4l2_ctrl *ctrl_hflip;
struct v4l2_ctrl *ctrl_vflip;
struct v4l2_ctrl_handler ctrl_handler; struct v4l2_ctrl_handler ctrl_handler;
u32 rop; u32 rop;
u32 flip;
}; };
struct g2d_fmt { struct g2d_fmt {
...@@ -77,6 +80,7 @@ void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a); ...@@ -77,6 +80,7 @@ void g2d_set_dst_addr(struct g2d_dev *d, dma_addr_t a);
void g2d_start(struct g2d_dev *d); void g2d_start(struct g2d_dev *d);
void g2d_clear_int(struct g2d_dev *d); void g2d_clear_int(struct g2d_dev *d);
void g2d_set_rop4(struct g2d_dev *d, u32 r); void g2d_set_rop4(struct g2d_dev *d, u32 r);
void g2d_set_flip(struct g2d_dev *d, u32 r);
u32 g2d_cmd_stretch(u32 e); u32 g2d_cmd_stretch(u32 e);
void g2d_set_cmd(struct g2d_dev *d, u32 c); void g2d_set_cmd(struct g2d_dev *d, u32 c);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment