msm: camera: Enable CSI PHY 2 and CSID 2 interface
Enable CSI PHY 2 and CSID 2 interfaces used by camera.
For some sensors, the data path shall be configured
through CSI PHY 2 and CSID 2 interface. These
changes enable support for additional interface.
Change-Id: I927a1b5538ebe8f870b6db4164a7938878c4c6f5
Signed-off-by: Sreesudhan Ramakrish Ramkumar <srramku@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-8960-camera.c b/arch/arm/mach-msm/board-8960-camera.c
index 23c4928..fbe223d 100644
--- a/arch/arm/mach-msm/board-8960-camera.c
+++ b/arch/arm/mach-msm/board-8960-camera.c
@@ -411,6 +411,12 @@
.is_vpe = 1,
.cam_bus_scale_table = &cam_bus_client_pdata,
},
+ {
+ .ioclk.mclk_clk_rate = 24000000,
+ .ioclk.vfe_clk_rate = 228570000,
+ .csid_core = 2,
+ .cam_bus_scale_table = &cam_bus_client_pdata,
+ },
};
static struct camera_vreg_t msm_8960_back_cam_vreg[] = {
@@ -643,8 +649,10 @@
platform_device_register(&msm8960_device_csiphy0);
platform_device_register(&msm8960_device_csiphy1);
+ platform_device_register(&msm8960_device_csiphy2);
platform_device_register(&msm8960_device_csid0);
platform_device_register(&msm8960_device_csid1);
+ platform_device_register(&msm8960_device_csid2);
platform_device_register(&msm8960_device_ispif);
platform_device_register(&msm8960_device_vfe);
platform_device_register(&msm8960_device_vpe);
diff --git a/arch/arm/mach-msm/clock-8960.c b/arch/arm/mach-msm/clock-8960.c
index aca582e..4a9fd98 100644
--- a/arch/arm/mach-msm/clock-8960.c
+++ b/arch/arm/mach-msm/clock-8960.c
@@ -5268,10 +5268,13 @@
CLK_LOOKUP("cam_clk", cam0_clk.c, "4-0020"),
CLK_LOOKUP("csi_src_clk", csi0_src_clk.c, "msm_csid.0"),
CLK_LOOKUP("csi_src_clk", csi1_src_clk.c, "msm_csid.1"),
+ CLK_LOOKUP("csi_src_clk", csi2_src_clk.c, "msm_csid.2"),
CLK_LOOKUP("csi_clk", csi0_clk.c, "msm_csid.0"),
CLK_LOOKUP("csi_clk", csi1_clk.c, "msm_csid.1"),
+ CLK_LOOKUP("csi_clk", csi2_clk.c, "msm_csid.2"),
CLK_LOOKUP("csi_phy_clk", csi0_phy_clk.c, "msm_csid.0"),
CLK_LOOKUP("csi_phy_clk", csi1_phy_clk.c, "msm_csid.1"),
+ CLK_LOOKUP("csi_phy_clk", csi2_phy_clk.c, "msm_csid.2"),
CLK_LOOKUP("csi_pix_clk", csi_pix_clk.c, "msm_ispif.0"),
CLK_LOOKUP("csi_rdi_clk", csi_rdi_clk.c, "msm_ispif.0"),
CLK_LOOKUP("csi_src_clk", csi2_src_clk.c, NULL),
@@ -5285,8 +5288,11 @@
csiphy_timer_src_clk.c, "msm_csiphy.0"),
CLK_LOOKUP("csiphy_timer_src_clk",
csiphy_timer_src_clk.c, "msm_csiphy.1"),
+ CLK_LOOKUP("csiphy_timer_src_clk",
+ csiphy_timer_src_clk.c, "msm_csiphy.2"),
CLK_LOOKUP("csiphy_timer_clk", csi0phy_timer_clk.c, "msm_csiphy.0"),
CLK_LOOKUP("csiphy_timer_clk", csi1phy_timer_clk.c, "msm_csiphy.1"),
+ CLK_LOOKUP("csiphy_timer_clk", csi2phy_timer_clk.c, "msm_csiphy.2"),
CLK_LOOKUP("dsi_byte_div_clk", dsi1_byte_clk.c, NULL),
CLK_LOOKUP("dsi_byte_div_clk", dsi2_byte_clk.c, NULL),
CLK_LOOKUP("dsi_esc_clk", dsi1_esc_clk.c, NULL),
@@ -5335,6 +5341,7 @@
CLK_LOOKUP("amp_pclk", amp_p_clk.c, NULL),
CLK_LOOKUP("csi_pclk", csi_p_clk.c, "msm_csid.0"),
CLK_LOOKUP("csi_pclk", csi_p_clk.c, "msm_csid.1"),
+ CLK_LOOKUP("csi_pclk", csi_p_clk.c, "msm_csid.2"),
CLK_LOOKUP("dsi_m_pclk", dsi1_m_p_clk.c, NULL),
CLK_LOOKUP("dsi_s_pclk", dsi1_s_p_clk.c, NULL),
CLK_LOOKUP("dsi_m_pclk", dsi2_m_p_clk.c, NULL),
diff --git a/arch/arm/mach-msm/devices-8960.c b/arch/arm/mach-msm/devices-8960.c
index 0c1d4ab..4d4b88f 100644
--- a/arch/arm/mach-msm/devices-8960.c
+++ b/arch/arm/mach-msm/devices-8960.c
@@ -1186,6 +1186,21 @@
},
};
+static struct resource msm_csiphy2_resources[] = {
+ {
+ .name = "csiphy",
+ .start = 0x04801400,
+ .end = 0x04801400 + SZ_1K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .name = "csiphy",
+ .start = MSM8960_CSIPHY_2_2LN_IRQ,
+ .end = MSM8960_CSIPHY_2_2LN_IRQ,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
struct platform_device msm8960_device_csiphy0 = {
.name = "msm_csiphy",
.id = 0,
@@ -1200,6 +1215,13 @@
.num_resources = ARRAY_SIZE(msm_csiphy1_resources),
};
+struct platform_device msm8960_device_csiphy2 = {
+ .name = "msm_csiphy",
+ .id = 2,
+ .resource = msm_csiphy2_resources,
+ .num_resources = ARRAY_SIZE(msm_csiphy2_resources),
+};
+
static struct resource msm_csid0_resources[] = {
{
.name = "csid",
@@ -1230,6 +1252,21 @@
},
};
+static struct resource msm_csid2_resources[] = {
+ {
+ .name = "csid",
+ .start = 0x04801800,
+ .end = 0x04801800 + SZ_1K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .name = "csid",
+ .start = CSI_2_IRQ,
+ .end = CSI_2_IRQ,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
struct platform_device msm8960_device_csid0 = {
.name = "msm_csid",
.id = 0,
@@ -1244,6 +1281,13 @@
.num_resources = ARRAY_SIZE(msm_csid1_resources),
};
+struct platform_device msm8960_device_csid2 = {
+ .name = "msm_csid",
+ .id = 2,
+ .resource = msm_csid2_resources,
+ .num_resources = ARRAY_SIZE(msm_csid2_resources),
+};
+
struct resource msm_ispif_resources[] = {
{
.name = "ispif",
diff --git a/arch/arm/mach-msm/devices.h b/arch/arm/mach-msm/devices.h
index 78cb73e..e6f3323 100644
--- a/arch/arm/mach-msm/devices.h
+++ b/arch/arm/mach-msm/devices.h
@@ -62,8 +62,10 @@
extern struct platform_device msm8960_device_i2c_mux_gsbi4;
extern struct platform_device msm8960_device_csiphy0;
extern struct platform_device msm8960_device_csiphy1;
+extern struct platform_device msm8960_device_csiphy2;
extern struct platform_device msm8960_device_csid0;
extern struct platform_device msm8960_device_csid1;
+extern struct platform_device msm8960_device_csid2;
extern struct platform_device msm8960_device_ispif;
extern struct platform_device msm8960_device_vfe;
extern struct platform_device msm8960_device_vpe;
diff --git a/arch/arm/mach-msm/include/mach/irqs-8960.h b/arch/arm/mach-msm/include/mach/irqs-8960.h
index dae0f47..012dd74 100644
--- a/arch/arm/mach-msm/include/mach/irqs-8960.h
+++ b/arch/arm/mach-msm/include/mach/irqs-8960.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -268,6 +268,8 @@
#define PM8921_SEC_IRQ_104 (GIC_SPI_START + 225)
#define PM8018_SEC_IRQ_107 (GIC_SPI_START + 226)
#define USB_HSIC_IRQ (GIC_SPI_START + 229)
+#define MSM8960_CSIPHY_2_2LN_IRQ (GIC_SPI_START + 228)
+#define CSI_2_IRQ (GIC_SPI_START + 227)
/* Backwards compatible IRQ macros. */
#define INT_ADM_AARM ADM_0_SCSS_0_IRQ