summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPrayas Mohanty <pmohanty@nvidia.com>2011-05-02 16:05:53 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-05-18 22:41:58 -0700
commit2f777956b8ca3577cd5bc298d97c01be97ca3267 (patch)
tree5a296c491cd8f144e9984c6701de21dffca0d351
parent7f99ddd6073eb9baf6b5bee4ca403fe74bcd1427 (diff)
media: video: ov5650: synchronize sensors for stereo
For stereo camera, it is important that both sensors should start sending data at the same time for them to be in sync. Add IOCTL (OV5650_IOCTL_SYNC_SENSORS), which user code can access to synchronize both sensors. bug 787214 bug 786928 Change-Id: I6bf34a8af3b7dd51150d5c0247b6787b824c1dae Reviewed-on: http://git-master/r/30005 Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r--drivers/media/video/tegra/ov5650.c16
-rw-r--r--include/media/ov5650.h11
2 files changed, 16 insertions, 11 deletions
diff --git a/drivers/media/video/tegra/ov5650.c b/drivers/media/video/tegra/ov5650.c
index 80b87bc23c50..9f329d375f26 100644
--- a/drivers/media/video/tegra/ov5650.c
+++ b/drivers/media/video/tegra/ov5650.c
@@ -720,16 +720,16 @@ static int ov5650_test_pattern(struct ov5650_info *info,
NULL, 0);
}
-static int ov5650_set_power(int val)
+static int ov5650_set_power(int powerLevel)
{
- pr_info("%s: val=%d camera mode=%d\n", __func__, val,
+ pr_info("%s: powerLevel=%d camera mode=%d\n", __func__, powerLevel,
info->camera_mode);
switch (info->camera_mode) {
case Main:
case LeftOnly:
if (info->left.pdata) {
- if (val && info->left.pdata->power_on)
+ if (powerLevel && info->left.pdata->power_on)
info->left.pdata->power_on();
else if (info->left.pdata->power_off)
info->left.pdata->power_off();
@@ -738,13 +738,13 @@ static int ov5650_set_power(int val)
case Stereo:
if (info->left.pdata) {
- if (val && info->left.pdata->power_on)
+ if (powerLevel && info->left.pdata->power_on)
info->left.pdata->power_on();
else if (info->left.pdata->power_off)
info->left.pdata->power_off();
}
if (info->right.pdata) {
- if (val && info->right.pdata->power_on)
+ if (powerLevel && info->right.pdata->power_on)
info->right.pdata->power_on();
else if (info->right.pdata->power_off)
info->right.pdata->power_off();
@@ -753,7 +753,7 @@ static int ov5650_set_power(int val)
case RightOnly:
if (info->right.pdata) {
- if (val && info->right.pdata->power_on)
+ if (powerLevel && info->right.pdata->power_on)
info->right.pdata->power_on();
else if (info->right.pdata->power_off)
info->right.pdata->power_off();
@@ -788,6 +788,10 @@ static long ov5650_ioctl(struct file *file,
}
return 0;
}
+ case OV5650_IOCTL_SYNC_SENSORS:
+ if (info->right.pdata->synchronize_sensors)
+ info->right.pdata->synchronize_sensors();
+ return 0;
case OV5650_IOCTL_SET_MODE:
{
struct ov5650_mode mode;
diff --git a/include/media/ov5650.h b/include/media/ov5650.h
index 8ad5185d35e5..4a5f5baa5b43 100644
--- a/include/media/ov5650.h
+++ b/include/media/ov5650.h
@@ -22,13 +22,14 @@
#include <linux/ioctl.h> /* For IOCTL macros */
-#define OV5650_IOCTL_SET_MODE _IOW('o', 1, struct ov5650_mode)
+#define OV5650_IOCTL_SET_MODE _IOW('o', 1, struct ov5650_mode)
#define OV5650_IOCTL_SET_FRAME_LENGTH _IOW('o', 2, __u32)
#define OV5650_IOCTL_SET_COARSE_TIME _IOW('o', 3, __u32)
-#define OV5650_IOCTL_SET_GAIN _IOW('o', 4, __u16)
-#define OV5650_IOCTL_GET_STATUS _IOR('o', 5, __u8)
-#define OV5650_IOCTL_TEST_PATTERN _IOW('o', 7, enum ov5650_test_pattern)
+#define OV5650_IOCTL_SET_GAIN _IOW('o', 4, __u16)
+#define OV5650_IOCTL_GET_STATUS _IOR('o', 5, __u8)
+#define OV5650_IOCTL_TEST_PATTERN _IOW('o', 7, enum ov5650_test_pattern)
#define OV5650_IOCTL_SET_CAMERA_MODE _IOW('o', 10, __u32)
+#define OV5650_IOCTL_SYNC_SENSORS _IOW('o', 11, __u32)
enum ov5650_test_pattern {
TEST_PATTERN_NONE,
@@ -47,7 +48,7 @@ struct ov5650_mode {
struct ov5650_platform_data {
int (*power_on)(void);
int (*power_off)(void);
-
+ void (*synchronize_sensors)(void);
};
#endif /* __KERNEL__ */