Commit 04d766ac authored by Benoit Parrot's avatar Benoit Parrot Committed by Mauro Carvalho Chehab

media: ti-vpe: cal: Add subdev s_power hooks

Because V4L2 still uses a specific way to manage power state of devices
that predates runtime PM, bridge driver should power on and off sub
device explicitly.
Signed-off-by: default avatarBenoit Parrot <bparrot@ti.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 7a3b9684
...@@ -1654,6 +1654,12 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1654,6 +1654,12 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
if (ret < 0) if (ret < 0)
goto err; goto err;
ret = v4l2_subdev_call(ctx->sensor, core, s_power, 1);
if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV) {
ctx_err(ctx, "power on failed in subdev\n");
goto err;
}
cal_runtime_get(ctx->dev); cal_runtime_get(ctx->dev);
csi2_ctx_config(ctx); csi2_ctx_config(ctx);
...@@ -1667,6 +1673,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count) ...@@ -1667,6 +1673,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
ret = v4l2_subdev_call(ctx->sensor, video, s_stream, 1); ret = v4l2_subdev_call(ctx->sensor, video, s_stream, 1);
if (ret) { if (ret) {
v4l2_subdev_call(ctx->sensor, core, s_power, 0);
ctx_err(ctx, "stream on failed in subdev\n"); ctx_err(ctx, "stream on failed in subdev\n");
cal_runtime_put(ctx->dev); cal_runtime_put(ctx->dev);
goto err; goto err;
...@@ -1695,6 +1702,7 @@ static void cal_stop_streaming(struct vb2_queue *vq) ...@@ -1695,6 +1702,7 @@ static void cal_stop_streaming(struct vb2_queue *vq)
struct cal_dmaqueue *dma_q = &ctx->vidq; struct cal_dmaqueue *dma_q = &ctx->vidq;
struct cal_buffer *buf, *tmp; struct cal_buffer *buf, *tmp;
unsigned long flags; unsigned long flags;
int ret;
csi2_ppi_disable(ctx); csi2_ppi_disable(ctx);
disable_irqs(ctx); disable_irqs(ctx);
...@@ -1703,6 +1711,10 @@ static void cal_stop_streaming(struct vb2_queue *vq) ...@@ -1703,6 +1711,10 @@ static void cal_stop_streaming(struct vb2_queue *vq)
if (v4l2_subdev_call(ctx->sensor, video, s_stream, 0)) if (v4l2_subdev_call(ctx->sensor, video, s_stream, 0))
ctx_err(ctx, "stream off failed in subdev\n"); ctx_err(ctx, "stream off failed in subdev\n");
ret = v4l2_subdev_call(ctx->sensor, core, s_power, 0);
if (ret < 0 && ret != -ENOIOCTLCMD && ret != -ENODEV)
ctx_err(ctx, "power off failed in subdev\n");
/* Release all active buffers */ /* Release all active buffers */
spin_lock_irqsave(&ctx->slock, flags); spin_lock_irqsave(&ctx->slock, flags);
list_for_each_entry_safe(buf, tmp, &dma_q->active, list) { list_for_each_entry_safe(buf, tmp, &dma_q->active, list) {
......
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