From a4125eb4d3c58668af62d327107ade92a6fb00fc Mon Sep 17 00:00:00 2001 From: Frank Chen Date: Mon, 4 Nov 2013 11:43:26 -0800 Subject: 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 Reviewed-on: http://git-master/r/329302 Reviewed-by: Sachin Nikam Tested-by: Sachin Nikam --- arch/arm/mach-tegra/board-loki-sensors.c | 60 ++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'arch/arm/mach-tegra/board-loki-sensors.c') 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 #include #include +#include #include #include #include @@ -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) -- cgit v1.2.3