diff --git a/drivers/media/platform/msm/camera_v2/camera/camera.c b/drivers/media/platform/msm/camera_v2/camera/camera.c index 53859db3b41..e6e6cfeffb7 100644 --- a/drivers/media/platform/msm/camera_v2/camera/camera.c +++ b/drivers/media/platform/msm/camera_v2/camera/camera.c @@ -596,13 +596,18 @@ static int camera_v4l2_close(struct file *filep) struct v4l2_event event; struct msm_video_device *pvdev = video_drvdata(filep); struct camera_v4l2_private *sp = fh_to_private(filep->private_data); - BUG_ON(!pvdev); atomic_sub_return(1, &pvdev->opened); if (atomic_read(&pvdev->opened) == 0) { + camera_pack_event(filep, MSM_CAMERA_SET_PARM, + MSM_CAMERA_PRIV_DEL_STREAM, -1, &event); + + /* Donot wait, imaging server may have crashed */ + msm_post_event(&event, MSM_POST_EVT_TIMEOUT); + camera_pack_event(filep, MSM_CAMERA_DEL_SESSION, 0, -1, &event); /* Donot wait, imaging server may have crashed */ diff --git a/drivers/media/platform/msm/camera_v2/msm.c b/drivers/media/platform/msm/camera_v2/msm.c index 9f1c81ad714..be9f613d623 100644 --- a/drivers/media/platform/msm/camera_v2/msm.c +++ b/drivers/media/platform/msm/camera_v2/msm.c @@ -661,6 +661,7 @@ int msm_post_event(struct v4l2_event *event, int timeout) rc = -ETIMEDOUT; } if (rc < 0) { + pr_err("%s: rc = %d\n", __func__, rc); mutex_unlock(&session->lock); return rc; }