diff options
author | Frank Chen <frankc@nvidia.com> | 2013-11-04 11:43:26 -0800 |
---|---|---|
committer | Sachin Nikam <snikam@nvidia.com> | 2013-11-13 03:18:16 -0800 |
commit | a4125eb4d3c58668af62d327107ade92a6fb00fc (patch) | |
tree | cb8cfcc842181b2f85023824796e18cfe04922d3 /arch/arm/mach-tegra/board-loki-sensors.c | |
parent | 688b03f65a57c9ebbc6d27243c2aa4519b13330b (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.c | 60 |
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) |