[media] cafe_ccic: fix colorspace corruption on resume
authorDaniel Drake <[email protected]>
Wed, 27 Oct 2010 13:55:00 +0000 (10:55 -0300)
committerMauro Carvalho Chehab <[email protected]>
Wed, 29 Dec 2010 10:16:29 +0000 (08:16 -0200)
If you suspend and resume during video capture, the video colours
are corrupted on resume. This is because the sensor is being unconditionally
powered off during the resume path.

Only power down during resume if the camera is not in use, and correctly
reconfigure the sensor during resume.
Fixes http://dev.laptop.org/ticket/10190

Signed-off-by: Daniel Drake <[email protected]>
Acked-by: Jonathan Corbet <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
drivers/media/video/cafe_ccic.c

index 0dfff50891e404056059eaf18316bd81fed0824f..789087cd6a9ca318570fd89485ab6621d71bde42 100644 (file)
@@ -859,8 +859,6 @@ static int cafe_cam_configure(struct cafe_camera *cam)
        struct v4l2_mbus_framefmt mbus_fmt;
        int ret;
 
-       if (cam->state != S_IDLE)
-               return -EINVAL;
        v4l2_fill_mbus_format(&mbus_fmt, &cam->pix_format, cam->mbus_code);
        ret = sensor_call(cam, core, init, 0);
        if (ret == 0)
@@ -2196,12 +2194,13 @@ static int cafe_pci_resume(struct pci_dev *pdev)
                return ret;
        }
        cafe_ctlr_init(cam);
-       cafe_ctlr_power_down(cam);
 
        mutex_lock(&cam->s_mutex);
        if (cam->users > 0) {
                cafe_ctlr_power_up(cam);
                __cafe_cam_reset(cam);
+       } else {
+               cafe_ctlr_power_down(cam);
        }
        mutex_unlock(&cam->s_mutex);