summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/board-loki-sensors.c
diff options
context:
space:
mode:
authorFrank Chen <frankc@nvidia.com>2013-11-04 11:43:26 -0800
committerSachin Nikam <snikam@nvidia.com>2013-11-13 03:18:16 -0800
commita4125eb4d3c58668af62d327107ade92a6fb00fc (patch)
treecb8cfcc842181b2f85023824796e18cfe04922d3 /arch/arm/mach-tegra/board-loki-sensors.c
parent688b03f65a57c9ebbc6d27243c2aa4519b13330b (diff)
ARM: tegra12: OV7695 sensor bring up for Loki
- Enable PBB3 and PBB6 GPIO - Add regulator name for OV7695 - Update Loki board file Bug 1327952 Change-Id: Ib3a0b47336305e76af29fbc553800f184939f05c Signed-off-by: Frank Chen <frankc@nvidia.com> Reviewed-on: http://git-master/r/329302 Reviewed-by: Sachin Nikam <snikam@nvidia.com> Tested-by: Sachin Nikam <snikam@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/board-loki-sensors.c')
-rw-r--r--arch/arm/mach-tegra/board-loki-sensors.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/board-loki-sensors.c b/arch/arm/mach-tegra/board-loki-sensors.c
index 7f27e733b328..f7e7c558200e 100644
--- a/arch/arm/mach-tegra/board-loki-sensors.c
+++ b/arch/arm/mach-tegra/board-loki-sensors.c
@@ -24,6 +24,7 @@
#include <linux/nct1008.h>
#include <linux/tegra-fuse.h>
#include <media/mt9m114.h>
+#include <media/ov7695.h>
#include <mach/gpio-tegra.h>
#include <mach/edp.h>
#include <linux/gpio.h>
@@ -193,11 +194,70 @@ struct mt9m114_platform_data loki_mt9m114_pdata = {
.power_off = loki_mt9m114_power_off,
};
+static int loki_ov7695_power_on(struct ov7695_power_rail *pw)
+{
+ int err;
+
+ if (unlikely(WARN_ON(!pw || !pw->avdd || !pw->iovdd)))
+ return -EFAULT;
+
+ gpio_set_value(CAM2_PWDN, 0);
+ usleep_range(1000, 1020);
+
+ err = regulator_enable(pw->avdd);
+ if (unlikely(err))
+ goto ov7695_avdd_fail;
+ usleep_range(300, 320);
+
+ err = regulator_enable(pw->iovdd);
+ if (unlikely(err))
+ goto ov7695_iovdd_fail;
+ usleep_range(1000, 1020);
+
+ gpio_set_value(CAM2_PWDN, 1);
+ usleep_range(1000, 1020);
+
+ return 0;
+
+ov7695_iovdd_fail:
+ regulator_disable(pw->avdd);
+
+ov7695_avdd_fail:
+
+ gpio_set_value(CAM_RSTN, 0);
+ return -ENODEV;
+}
+
+static int loki_ov7695_power_off(struct ov7695_power_rail *pw)
+{
+ if (unlikely(WARN_ON(!pw || !pw->avdd || !pw->iovdd)))
+ return -EFAULT;
+ usleep_range(100, 120);
+
+ regulator_disable(pw->iovdd);
+ usleep_range(100, 120);
+
+ regulator_disable(pw->avdd);
+ usleep_range(100, 120);
+
+ gpio_set_value(CAM2_PWDN, 0);
+ return 0;
+}
+
+struct ov7695_platform_data loki_ov7695_pdata = {
+ .power_on = loki_ov7695_power_on,
+ .power_off = loki_ov7695_power_off,
+};
+
static struct i2c_board_info loki_i2c_board_info_e2548[] = {
{
I2C_BOARD_INFO("mt9m114", 0x48),
.platform_data = &loki_mt9m114_pdata,
},
+ {
+ I2C_BOARD_INFO("ov7695", 0x21),
+ .platform_data = &loki_ov7695_pdata,
+ },
};
static int loki_camera_init(void)