From 34621b4c0014e7b44c57f56f825ce5fe450e8d70 Mon Sep 17 00:00:00 2001 From: Yuxi Sun Date: Tue, 27 Mar 2012 14:15:39 +0800 Subject: ENGR00178052 v4l2_capture:Correct multi-sensor uninstallation Point the current sensor to the right existent camera, and remove the detached one Signed-off-by: Yuxi Sun --- drivers/media/video/mxc/capture/mxc_v4l2_capture.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/drivers/media/video/mxc/capture/mxc_v4l2_capture.c b/drivers/media/video/mxc/capture/mxc_v4l2_capture.c index e3af2f817990..9d5fd09ef48a 100644 --- a/drivers/media/video/mxc/capture/mxc_v4l2_capture.c +++ b/drivers/media/video/mxc/capture/mxc_v4l2_capture.c @@ -2890,7 +2890,28 @@ static int mxc_v4l2_master_attach(struct v4l2_int_device *slave) */ static void mxc_v4l2_master_detach(struct v4l2_int_device *slave) { + unsigned int i; + cam_data *cam = slave->u.slave->master->priv; + pr_debug("In MVC:mxc_v4l2_master_detach\n"); + + if (sensor_index > 1) { + for (i = 0; i < sensor_index; i++) { + if (cam->all_sensors[i] != slave) + continue; + /* Move all the sensors behind this + * sensor one step forward + */ + for (; i < sensor_index - 1; i++) + cam->all_sensors[i] = cam->all_sensors[i+1]; + break; + } + /* Point current sensor to the last one */ + cam->sensor = cam->all_sensors[sensor_index - 2]; + } else + cam->sensor = NULL; + + sensor_index--; vidioc_int_dev_exit(slave); } -- cgit v1.2.3