]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[media] v4l: omap4iss: Propagate stop timeouts from submodules to the driver core
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 9 Oct 2013 14:52:45 +0000 (11:52 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Wed, 11 Dec 2013 09:02:54 +0000 (07:02 -0200)
Return an error from the s_stream handlers when stopping the stream
failed instead of just logging the error and ignoring it. While we're
at it, move the logging code from submodules to the driver code.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/staging/media/omap4iss/iss.c
drivers/staging/media/omap4iss/iss_csi2.c
drivers/staging/media/omap4iss/iss_ipipe.c
drivers/staging/media/omap4iss/iss_ipipeif.c
drivers/staging/media/omap4iss/iss_resizer.c

index ba8460dc8d286176415cd5628538c0c3fe3bcb91..a0bf2f3cbd726254898f402239bcb45df8eb5339 100644 (file)
@@ -614,6 +614,8 @@ static int iss_pipeline_disable(struct iss_pipeline *pipe)
        struct media_entity *entity;
        struct media_pad *pad;
        struct v4l2_subdev *subdev;
+       int failure = 0;
+       int ret;
 
        entity = &pipe->output->video.entity;
        while (1) {
@@ -629,10 +631,15 @@ static int iss_pipeline_disable(struct iss_pipeline *pipe)
                entity = pad->entity;
                subdev = media_entity_to_v4l2_subdev(entity);
 
-               v4l2_subdev_call(subdev, video, s_stream, 0);
+               ret = v4l2_subdev_call(subdev, video, s_stream, 0);
+               if (ret < 0) {
+                       dev_dbg(iss->dev, "%s: module stop timeout.\n",
+                               subdev->name);
+                       failure = -ETIMEDOUT;
+               }
        }
 
-       return 0;
+       return failure;
 }
 
 /*
index 077545ffa54fc70e7f27c81eb4462235f5cc1502..7e7e955d4be67640755a0d7d4b533805f8124c6c 100644 (file)
@@ -1056,6 +1056,7 @@ static int csi2_set_stream(struct v4l2_subdev *sd, int enable)
        struct iss_device *iss = csi2->iss;
        struct iss_pipeline *pipe = to_iss_pipeline(&csi2->subdev.entity);
        struct iss_video *video_out = &csi2->video_out;
+       int ret = 0;
 
        if (csi2->state == ISS_PIPELINE_STREAM_STOPPED) {
                if (enable == ISS_PIPELINE_STREAM_STOPPED)
@@ -1069,8 +1070,6 @@ static int csi2_set_stream(struct v4l2_subdev *sd, int enable)
 
        switch (enable) {
        case ISS_PIPELINE_STREAM_CONTINUOUS: {
-               int ret;
-
                ret = omap4iss_csiphy_config(iss, sd);
                if (ret < 0)
                        return ret;
@@ -1102,8 +1101,7 @@ static int csi2_set_stream(struct v4l2_subdev *sd, int enable)
                        return 0;
                if (omap4iss_module_sync_idle(&sd->entity, &csi2->wait,
                                              &csi2->stopping))
-                       dev_dbg(iss->dev, "%s: module stop timeout.\n",
-                               sd->name);
+                       ret = -ETIMEDOUT;
                csi2_ctx_enable(csi2, 0, 0);
                csi2_if_enable(csi2, 0);
                csi2_irq_ctx_set(csi2, 0);
@@ -1117,7 +1115,7 @@ static int csi2_set_stream(struct v4l2_subdev *sd, int enable)
        }
 
        csi2->state = enable;
-       return 0;
+       return ret;
 }
 
 /* subdev video operations */
index d0b9f8c512fc30731d28c9a685203a360794c9aa..c013f839146a05bd4552a3c60416c22dbc1a31c5 100644 (file)
@@ -166,8 +166,7 @@ static int ipipe_set_stream(struct v4l2_subdev *sd, int enable)
                        return 0;
                if (omap4iss_module_sync_idle(&sd->entity, &ipipe->wait,
                                              &ipipe->stopping))
-                       dev_dbg(iss->dev, "%s: module stop timeout.\n",
-                               sd->name);
+                       ret = -ETIMEDOUT;
 
                ipipe_enable(ipipe, 0);
                omap4iss_isp_disable_interrupts(iss);
index 2d11f62d0b122a66cf92015995ea7ffa22848d89..00bc937aa20dc6af4e40c5288b26870317a5555b 100644 (file)
@@ -363,8 +363,7 @@ static int ipipeif_set_stream(struct v4l2_subdev *sd, int enable)
                        return 0;
                if (omap4iss_module_sync_idle(&sd->entity, &ipipeif->wait,
                                              &ipipeif->stopping))
-                       dev_dbg(iss->dev, "%s: module stop timeout.\n",
-                               sd->name);
+                       ret = -ETIMEDOUT;
 
                if (ipipeif->output & IPIPEIF_OUTPUT_MEMORY)
                        ipipeif_write_enable(ipipeif, 0);
index 5bf50808acc36120e29f44637cf65bd42847c82e..9dbf0185a86d30ef9706ea779f7e47089f358d52 100644 (file)
@@ -416,8 +416,7 @@ static int resizer_set_stream(struct v4l2_subdev *sd, int enable)
                        return 0;
                if (omap4iss_module_sync_idle(&sd->entity, &resizer->wait,
                                              &resizer->stopping))
-                       dev_dbg(iss->dev, "%s: module stop timeout.\n",
-                               sd->name);
+                       ret = -ETIMEDOUT;
 
                resizer_enable(resizer, 0);
                omap4iss_isp_disable_interrupts(iss);