summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMing Wong <miwong@nvidia.com>2015-01-13 12:02:31 -0800
committerWinnie Hsu <whsu@nvidia.com>2015-02-26 10:44:26 -0800
commitc9a21f041658d65abefff5d40fc97e23c3683799 (patch)
treeed7be9c2ae4c418354359dbd728b85229a43df2c /arch
parent6606ce102dcc49f1e5868974468e8254f2a04e1d (diff)
kernel: add support for ar1335
Bug 1598204 Change-Id: I453d18ce570e57c0feab8dc3b24cc2c957b95301 Signed-off-by: Ming Wong <miwong@nvidia.com> Reviewed-on: http://git-master/r/672147 GVS: Gerrit_Virtual_Submit Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/boot/dts/tegra124-platforms/tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi8
-rw-r--r--arch/arm/boot/dts/tegra124-platforms/tegra124-pm359-camera-a00.dtsi47
-rw-r--r--arch/arm/configs/tegra12_defconfig1
-rw-r--r--arch/arm/mach-tegra/board-ardbeg-sensors.c78
4 files changed, 134 insertions, 0 deletions
diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi
index 57e147e5fba0..13645bb027df 100644
--- a/arch/arm/boot/dts/tegra124-platforms/tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi
+++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-jetson_tk1-pmic-pm375-0000-c00-00.dtsi
@@ -367,6 +367,10 @@
c10 {
regulator-consumer-supply = "avdd_hsic_mdm";
};
+ c11 {
+ regulator-consumer-supply = "vdig_csi";
+ regulator-consumer-device = "2-0036";
+ };
};
};
@@ -405,6 +409,10 @@
regulator-consumer-supply = "vana";
regulator-consumer-device = "2-0018";
};
+ c6 {
+ regulator-consumer-supply = "vana";
+ regulator-consumer-device = "2-0036";
+ };
};
};
diff --git a/arch/arm/boot/dts/tegra124-platforms/tegra124-pm359-camera-a00.dtsi b/arch/arm/boot/dts/tegra124-platforms/tegra124-pm359-camera-a00.dtsi
index e84ffcc1c87d..6e35bef14643 100644
--- a/arch/arm/boot/dts/tegra124-platforms/tegra124-pm359-camera-a00.dtsi
+++ b/arch/arm/boot/dts/tegra124-platforms/tegra124-pm359-camera-a00.dtsi
@@ -80,6 +80,15 @@
platformdata = "ardbeg_ov4689_pdata";
};
};
+ module6: module6@modules {
+ compatible = "sensor,rear";
+ badge_info = "e1633_ar1335";
+
+ sensor {
+ profile = <&ar1335_1>;
+ platformdata = "ardbeg_ar1335_pdata";
+ };
+ };
};
profiles {
imx135_1: imx135@2_0010 {
@@ -339,6 +348,44 @@
CAMERA_END
>;
};
+ ar1335_1: ar1335@2_0036 {
+ index = <7>;
+ chipname = "pcl_AR1335";
+ type = "sensor";
+ guid = "s_AR1335";
+ position = <0>;
+ bustype = "i2c";
+ busnum = <2>;
+ addr = <0x36>;
+ datalen = <2>;
+ pinmuxgrp = <0xFFFF>;
+ gpios = <3>;
+ regulators = "vana", "vif", "vdig_csi";
+ clocks = "mclk";
+ drivername = "ar1335";
+ detect = <0x0002 0x3000 0xFFFF 0x0153>;
+ devid = <0x1335>;
+ poweron = <
+ CAMERA_IND_CLK_SET(10000)
+ CAMERA_GPIO_CLR(219)
+ CAMERA_REGULATOR_ON(0)
+ CAMERA_REGULATOR_ON(1)
+ CAMERA_REGULATOR_ON(2)
+ CAMERA_WAITMS(10)
+ CAMERA_GPIO_SET(219)
+ CAMERA_WAITMS(20)
+ CAMERA_END
+ >;
+ poweroff = <
+ CAMERA_IND_CLK_CLR
+ CAMERA_GPIO_CLR(219)
+ CAMERA_WAITUS(10)
+ CAMERA_REGULATOR_OFF(2)
+ CAMERA_REGULATOR_OFF(1)
+ CAMERA_REGULATOR_OFF(0)
+ CAMERA_END
+ >;
+ };
};
};
};
diff --git a/arch/arm/configs/tegra12_defconfig b/arch/arm/configs/tegra12_defconfig
index d028d4a23ad5..6eda4c457494 100644
--- a/arch/arm/configs/tegra12_defconfig
+++ b/arch/arm/configs/tegra12_defconfig
@@ -344,6 +344,7 @@ CONFIG_VIDEO_IMX091=y
CONFIG_VIDEO_IMX135=y
CONFIG_VIDEO_AR0261=y
CONFIG_VIDEO_AR0330=y
+CONFIG_VIDEO_AR1335=y
CONFIG_VIDEO_IMX132=y
CONFIG_VIDEO_OV9772=y
CONFIG_VIDEO_OV4689=y
diff --git a/arch/arm/mach-tegra/board-ardbeg-sensors.c b/arch/arm/mach-tegra/board-ardbeg-sensors.c
index c2fd85030283..9d621c0b708a 100644
--- a/arch/arm/mach-tegra/board-ardbeg-sensors.c
+++ b/arch/arm/mach-tegra/board-ardbeg-sensors.c
@@ -29,6 +29,7 @@
#include <media/camera.h>
#include <media/ar0330.h>
#include <media/ar0261.h>
+#include <media/ar1335.h>
#include <media/imx135.h>
#include <media/imx179.h>
#include <media/dw9718.h>
@@ -690,6 +691,70 @@ static int ardbeg_imx135_power_off(struct imx135_power_rail *pw)
return 0;
}
+static int ardbeg_ar1335_power_on(struct ar1335_power_rail *pw)
+{
+ int err;
+
+ if (unlikely(WARN_ON(!pw || !pw->iovdd || !pw->avdd)))
+ return -EFAULT;
+
+ /* disable CSIA/B IOs DPD mode to turn on camera for ardbeg */
+ tegra_io_dpd_disable(&csia_io);
+ tegra_io_dpd_disable(&csib_io);
+
+ gpio_set_value(CAM_RSTN, 0);
+ usleep_range(10, 20);
+
+ err = regulator_enable(pw->avdd);
+ if (err)
+ goto ar1335_avdd_fail;
+
+ err = regulator_enable(pw->iovdd);
+ if (err)
+ goto ar1335_iovdd_fail;
+
+ err = regulator_enable(pw->dvdd);
+ if (err)
+ goto ar1335_dvdd_fail;
+
+ usleep_range(1, 2);
+ gpio_set_value(CAM_RSTN, 1);
+
+ usleep_range(300, 310);
+
+ return 0;
+
+ar1335_dvdd_fail:
+ regulator_disable(pw->iovdd);
+
+ar1335_iovdd_fail:
+ regulator_disable(pw->avdd);
+
+ar1335_avdd_fail:
+ tegra_io_dpd_enable(&csia_io);
+ tegra_io_dpd_enable(&csib_io);
+ pr_err("%s failed.\n", __func__);
+ return -ENODEV;
+}
+
+static int ardbeg_ar1335_power_off(struct ar1335_power_rail *pw)
+{
+ if (unlikely(WARN_ON(!pw || !pw->iovdd || !pw->avdd))) {
+ tegra_io_dpd_enable(&csia_io);
+ tegra_io_dpd_enable(&csib_io);
+ return -EFAULT;
+ }
+
+ regulator_disable(pw->iovdd);
+ regulator_disable(pw->avdd);
+ regulator_disable(pw->dvdd);
+
+ /* put CSIA/B IOs into DPD mode to save additional power for ardbeg */
+ tegra_io_dpd_enable(&csia_io);
+ tegra_io_dpd_enable(&csib_io);
+ return 0;
+}
+
static int ardbeg_imx179_power_on(struct imx179_power_rail *pw)
{
int err;
@@ -757,6 +822,18 @@ static int ardbeg_imx179_power_off(struct imx179_power_rail *pw)
return 0;
}
+struct ar1335_platform_data ardbeg_ar1335_data = {
+ .flash_cap = {
+ .enable = 1,
+ .edge_trig_en = 1,
+ .start_edge = 0,
+ .repeat = 1,
+ .delay_frm = 0,
+ },
+ .power_on = ardbeg_ar1335_power_on,
+ .power_off = ardbeg_ar1335_power_off,
+};
+
struct imx135_platform_data ardbeg_imx135_data = {
.flash_cap = {
.enable = 1,
@@ -1327,6 +1404,7 @@ static struct camera_data_blob ardbeg_camera_lut[] = {
{"ardbeg_ar0330_pdata", &ardbeg_ar0330_data},
{"ardbeg_ar0330_front_pdata", &ardbeg_ar0330_front_data},
{"ardbeg_ov4689_pdata", &ardbeg_ov4689_data},
+ {"ardbeg_ar1335_pdata", &ardbeg_ar1335_data},
{},
};