summaryrefslogtreecommitdiff
path: root/patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch')
-rw-r--r--patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch b/patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch
new file mode 100644
index 00000000000..231c3b90ce6
--- /dev/null
+++ b/patches.tizen/0132-m5mols-device-initialization-moved-to-V4L2-registere.patch
@@ -0,0 +1,75 @@
+From 2de48b138ec30e3dbabb3e3f361e84a27553151f Mon Sep 17 00:00:00 2001
+From: Andrzej Hajda <a.hajda@samsung.com>
+Date: Wed, 27 Feb 2013 13:26:29 +0100
+Subject: [PATCH 0132/1302] m5mols: device initialization moved to V4L2
+ registered callback
+
+Since parent media device controls camera clock
+device initialization must be performed in registered callback.
+
+Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
+Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
+---
+ drivers/media/i2c/m5mols/m5mols_core.c | 37 +++++++++++++++++++++++-----------
+ 1 file changed, 25 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/media/i2c/m5mols/m5mols_core.c b/drivers/media/i2c/m5mols/m5mols_core.c
+index 656e107..9504d88 100644
+--- a/drivers/media/i2c/m5mols/m5mols_core.c
++++ b/drivers/media/i2c/m5mols/m5mols_core.c
+@@ -925,7 +925,31 @@ static int m5mols_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
+ return 0;
+ }
+
++static int m5mols_registered(struct v4l2_subdev *sd)
++{
++ struct m5mols_info *info = to_m5mols(sd);
++ int ret;
++
++ mutex_lock(&info->lock);
++
++ ret = m5mols_sensor_power(info, true);
++ if (!ret)
++ ret = m5mols_fw_start(sd);
++ if (!ret)
++ ret = m5mols_init_controls(sd);
++
++ m5mols_sensor_power(info, false);
++
++ mutex_unlock(&info->lock);
++
++ v4l2_dbg(1, m5mols_debug, sd, "%s: Booting %s (%d)\n",
++ __func__, ret ? "failed" : "succeded", ret);
++
++ return ret;
++}
++
+ static const struct v4l2_subdev_internal_ops m5mols_subdev_internal_ops = {
++ .registered = m5mols_registered,
+ .open = m5mols_open,
+ };
+
+@@ -1013,19 +1037,8 @@ static int m5mols_probe(struct i2c_client *client,
+ info->ffmt[0] = m5mols_default_ffmt[0];
+ info->ffmt[1] = m5mols_default_ffmt[1];
+
+- ret = m5mols_sensor_power(info, true);
+- if (ret)
+- goto out_irq;
+-
+- ret = m5mols_fw_start(sd);
+- if (!ret)
+- ret = m5mols_init_controls(sd);
++ return 0;
+
+- ret = m5mols_sensor_power(info, false);
+- if (!ret)
+- return 0;
+-out_irq:
+- free_irq(client->irq, sd);
+ out_me:
+ media_entity_cleanup(&sd->entity);
+ out_reg:
+--
+1.8.3.2
+