GPIO_PINMUX(GPIO_X7_AUD, PULL_DOWN, NORMAL, OUTPUT, DISABLE),
GPIO_PINMUX(GPIO_W3_AUD, NORMAL, NORMAL, INPUT, DISABLE),
GPIO_PINMUX(GPIO_X1_AUD, PULL_DOWN, NORMAL, OUTPUT, DISABLE),
+ GPIO_PINMUX(GPIO_PBB3, NORMAL, NORMAL, OUTPUT, DISABLE),
+ GPIO_PINMUX(GPIO_PBB6, NORMAL, NORMAL, OUTPUT, DISABLE),
GPIO_PINMUX(GPIO_PG0, NORMAL, NORMAL, INPUT, DISABLE),
GPIO_PINMUX(GPIO_PG1, NORMAL, NORMAL, INPUT, DISABLE),
GPIO_PINMUX(GPIO_PH4, NORMAL, NORMAL, OUTPUT, DISABLE),
UNUSED_PINMUX(ULPI_DATA7),
VI_PINMUX(CAM_MCLK, VI_ALT3, NORMAL, NORMAL, OUTPUT, DEFAULT, DISABLE),
UNUSED_PINMUX(GPIO_PBB0),
- UNUSED_PINMUX(GPIO_PBB3),
UNUSED_PINMUX(GPIO_PBB4),
UNUSED_PINMUX(GPIO_PBB5),
- UNUSED_PINMUX(GPIO_PBB6),
UNUSED_PINMUX(GPIO_PBB7),
UNUSED_PINMUX(GPIO_PCC1),
UNUSED_PINMUX(GPIO_PCC2),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PX7, false, 0),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PW3, true, 0),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PX1, false, 0),
+ GPIO_INIT_PIN_MODE(TEGRA_GPIO_PBB3, false, 0),
+ GPIO_INIT_PIN_MODE(TEGRA_GPIO_PBB6, false, 0),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG0, true, 0),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG1, true, 0),
GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH2, false, 0),
REGULATOR_SUPPLY("vid", "0-000c"),
REGULATOR_SUPPLY("vddio", "0-0077"),
REGULATOR_SUPPLY("vif", "2-0048"),
+ REGULATOR_SUPPLY("vif2", "2-0021"),
};
static struct regulator_consumer_supply palmas_smps9_supply[] = {
static struct regulator_consumer_supply palmas_ldo3_supply[] = {
REGULATOR_SUPPLY("avdd_dsi_csi", "tegradc.0"),
REGULATOR_SUPPLY("avdd_dsi_csi", "tegradc.1"),
- REGULATOR_SUPPLY("avdd_dsi_csi", "vi.0"),
- REGULATOR_SUPPLY("avdd_dsi_csi", "vi.1"),
+ REGULATOR_SUPPLY("avdd_dsi_csi", "vi"),
REGULATOR_SUPPLY("vddio_hsic", "tegra-ehci.1"),
REGULATOR_SUPPLY("vddio_hsic", "tegra-ehci.2"),
REGULATOR_SUPPLY("vddio_hsic", "tegra-xhci"),
REGULATOR_SUPPLY("vdd", "0-0077"),
REGULATOR_SUPPLY("vdd", "0-004c"),
REGULATOR_SUPPLY("vdd", "0-0068"),
+ REGULATOR_SUPPLY("vana", "2-0021"),
};
static struct regulator_consumer_supply palmas_ldo8_supply[] = {
#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>
.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)