]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
MLK-10182: cam :Module can't load/unload twice without camera connected
authorSandor Yu <R01008@freescale.com>
Fri, 30 Jan 2015 09:25:40 +0000 (17:25 +0800)
committerSandor Yu <R01008@freescale.com>
Fri, 30 Jan 2015 15:32:39 +0000 (23:32 +0800)
If no camera connected, ov5640 driver loading failed,
but the driver have register subdev by v4l2_async_register_subdev.
v4l2_async_unregister_subdev function in remove function
and not been called when module unloading.
Same subdev can not register twice, v4l2 async driver will print
error message in the second module loading.
Move v4l2_async_register_subdev function after ov5640 is succeed
found to fix the issue.

Signed-off-by: Sandor Yu <R01008@freescale.com>
drivers/media/platform/mxc/subdev/ov5640.c

index b4247e563a90e1dba8187a2b6108f0be33190716..34f3440a54b4a127f575da59cf5d11edfa0dac64 100644 (file)
@@ -1828,13 +1828,6 @@ static int ov5640_probe(struct i2c_client *client,
                return retval;
        }
 
-       v4l2_i2c_subdev_init(&ov5640_data.subdev, client, &ov5640_subdev_ops);
-
-       retval = v4l2_async_register_subdev(&ov5640_data.subdev);
-       if (retval < 0)
-               dev_err(&client->dev,
-                                       "%s--Async register faialed, ret=%d\n", __func__, retval);
-
        clk_prepare_enable(ov5640_data.sensor_clk);
 
        ov5640_data.io_init = ov5640_reset;
@@ -1879,6 +1872,13 @@ static int ov5640_probe(struct i2c_client *client,
 
        clk_disable(ov5640_data.sensor_clk);
 
+       v4l2_i2c_subdev_init(&ov5640_data.subdev, client, &ov5640_subdev_ops);
+
+       retval = v4l2_async_register_subdev(&ov5640_data.subdev);
+       if (retval < 0)
+               dev_err(&client->dev,
+                                       "%s--Async register failed, ret=%d\n", __func__, retval);
+
        pr_info("camera ov5640, is found\n");
        return retval;
 }