diff options
author | Prayas Mohanty <pmohanty@nvidia.com> | 2011-05-02 16:05:53 +0530 |
---|---|---|
committer | Varun Colbert <vcolbert@nvidia.com> | 2011-05-18 22:41:58 -0700 |
commit | 2f777956b8ca3577cd5bc298d97c01be97ca3267 (patch) | |
tree | 5a296c491cd8f144e9984c6701de21dffca0d351 | |
parent | 7f99ddd6073eb9baf6b5bee4ca403fe74bcd1427 (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.c | 16 | ||||
-rw-r--r-- | include/media/ov5650.h | 11 |
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__ */ |