summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Chen <b02280@freescale.com>2010-03-24 16:07:56 +0800
committerAlejandro Gonzalez <alex.gonzalez@digi.com>2010-05-25 11:20:16 +0200
commitfa257907abe1d8e63912df5033f3a3593c592924 (patch)
tree17ddfe817298411b51c050a780b602dedc3d7cfe
parentcf436300e4b56eadfb0aa1735643e8aa44da4b88 (diff)
ENGR00121922 ipuv3: move ipu reset function to MSL
move ipu reset function to MSL. Signed-off-by: Jason Chen <b02280@freescale.com> Signed-off-by: Alejandro Gonzalez <alex.gonzalez@digi.com>
-rw-r--r--arch/arm/mach-mx37/devices.c15
-rw-r--r--arch/arm/mach-mx5/cpu.c14
-rw-r--r--arch/arm/mach-mx5/mx51_3stack.c2
-rw-r--r--arch/arm/mach-mx5/mx51_babbage.c2
-rw-r--r--arch/arm/mach-mx5/mx53_evk.c2
-rw-r--r--arch/arm/plat-mxc/include/mach/mxc.h1
-rw-r--r--drivers/mxc/ipu3/ipu_common.c18
-rw-r--r--drivers/mxc/ipu3/ipu_regs.h3
8 files changed, 38 insertions, 19 deletions
diff --git a/arch/arm/mach-mx37/devices.c b/arch/arm/mach-mx37/devices.c
index 6c8ee6fe5ceb..dfb954a08339 100644
--- a/arch/arm/mach-mx37/devices.c
+++ b/arch/arm/mach-mx37/devices.c
@@ -194,8 +194,23 @@ static inline void mxc_init_wdt(void)
#endif
#if defined(CONFIG_MXC_IPU_V3) || defined(CONFIG_MXC_IPU_V3_MODULE)
+/*!
+ * This function resets IPU
+ */
+void mx37_ipu_reset(void)
+{
+ u32 *reg;
+ u32 value;
+ reg = ioremap(SRC_BASE_ADDR, PAGE_SIZE);
+ value = __raw_readl(reg);
+ value = value | 0x8;
+ __raw_writel(value, reg);
+ iounmap(reg);
+}
+
static struct mxc_ipu_config mxc_ipu_data = {
.rev = 1,
+ .reset = mx37_ipu_reset,
};
static struct resource ipu_resources[] = {
diff --git a/arch/arm/mach-mx5/cpu.c b/arch/arm/mach-mx5/cpu.c
index b45f2e9578a7..692d258a4a0c 100644
--- a/arch/arm/mach-mx5/cpu.c
+++ b/arch/arm/mach-mx5/cpu.c
@@ -63,6 +63,20 @@ static void __init mipi_hsc_disable(void)
iounmap(reg_hsc_mcd);
}
+/*!
+ * This function resets IPU
+ */
+void mx5_ipu_reset(void)
+{
+ u32 *reg;
+ u32 value;
+ reg = ioremap(MX53_BASE_ADDR(SRC_BASE_ADDR), PAGE_SIZE);
+ value = __raw_readl(reg);
+ value = value | 0x8;
+ __raw_writel(value, reg);
+ iounmap(reg);
+}
+
void mx5_vpu_reset(void)
{
u32 reg;
diff --git a/arch/arm/mach-mx5/mx51_3stack.c b/arch/arm/mach-mx5/mx51_3stack.c
index c1a2c5f732d6..8b78ebef0320 100644
--- a/arch/arm/mach-mx5/mx51_3stack.c
+++ b/arch/arm/mach-mx5/mx51_3stack.c
@@ -136,8 +136,10 @@ static struct platform_pwm_backlight_data mxc_pwm_backlight_data = {
.pwm_period_ns = 78770,
};
+extern void mx5_ipu_reset(void);
static struct mxc_ipu_config mxc_ipu_data = {
.rev = 2,
+ .reset = mx5_ipu_reset,
};
extern void mx5_vpu_reset(void);
diff --git a/arch/arm/mach-mx5/mx51_babbage.c b/arch/arm/mach-mx5/mx51_babbage.c
index 9922f5532fce..f44489a806c8 100644
--- a/arch/arm/mach-mx5/mx51_babbage.c
+++ b/arch/arm/mach-mx5/mx51_babbage.c
@@ -155,8 +155,10 @@ static struct platform_pwm_backlight_data mxc_pwm_backlight_data = {
.pwm_period_ns = 78770,
};
+extern void mx5_ipu_reset(void);
static struct mxc_ipu_config mxc_ipu_data = {
.rev = 2,
+ .reset = mx5_ipu_reset,
};
extern void mx5_vpu_reset(void);
diff --git a/arch/arm/mach-mx5/mx53_evk.c b/arch/arm/mach-mx5/mx53_evk.c
index db1d6ea1b0b7..c30b887678ae 100644
--- a/arch/arm/mach-mx5/mx53_evk.c
+++ b/arch/arm/mach-mx5/mx53_evk.c
@@ -150,8 +150,10 @@ static struct platform_pwm_backlight_data mxc_pwm_backlight_data = {
.pwm_period_ns = 78770,
};
+extern void mx5_ipu_reset(void);
static struct mxc_ipu_config mxc_ipu_data = {
.rev = 3,
+ .reset = mx5_ipu_reset,
};
extern void mx5_vpu_reset(void);
diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/plat-mxc/include/mach/mxc.h
index c8426959d873..a47e599c54d4 100644
--- a/arch/arm/plat-mxc/include/mach/mxc.h
+++ b/arch/arm/plat-mxc/include/mach/mxc.h
@@ -220,6 +220,7 @@ struct mxc_spi_master {
struct mxc_ipu_config {
int rev;
+ void (*reset) (void);
struct clk *di_clk[2];
};
diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c
index 4b79b6a36dea..8216b10ecf07 100644
--- a/drivers/mxc/ipu3/ipu_common.c
+++ b/drivers/mxc/ipu3/ipu_common.c
@@ -250,21 +250,6 @@ static struct clk pixel_clk[] = {
};
/*!
- * This function resets IPU
- */
-void ipu_reset(void)
-{
- u32 *reg;
- u32 value;
- reg = ioremap(SRC_BASE_ADDR, PAGE_SIZE);
- value = __raw_readl(reg);
- value = value | SW_IPU_RST;
- __raw_writel(value, reg);
- iounmap(reg);
-}
-EXPORT_SYMBOL(ipu_reset);
-
-/*!
* This function is called by the driver framework to initialize the IPU
* hardware.
*
@@ -359,7 +344,8 @@ static int ipu_probe(struct platform_device *pdev)
g_ipu_clk = clk_get(&pdev->dev, "ipu_clk");
dev_dbg(g_ipu_dev, "ipu_clk = %lu\n", clk_get_rate(g_ipu_clk));
- ipu_reset();
+ if (plat_data->reset)
+ plat_data->reset();
clk_set_parent(g_pixel_clk[0], g_ipu_clk);
clk_set_parent(g_pixel_clk[1], g_ipu_clk);
diff --git a/drivers/mxc/ipu3/ipu_regs.h b/drivers/mxc/ipu3/ipu_regs.h
index d650e8a305ff..2438df60a0ce 100644
--- a/drivers/mxc/ipu3/ipu_regs.h
+++ b/drivers/mxc/ipu3/ipu_regs.h
@@ -299,9 +299,6 @@ extern u32 *ipu_vdi_reg;
#define DP_CSC_0(flow) (ipu_dp_reg + 0x0054/4 + flow/4)
#define DP_CSC_1(flow) (ipu_dp_reg + 0x0058/4 + flow/4)
-/* Software reset for ipu */
-#define SW_IPU_RST 8
-
enum {
IPU_CONF_CSI0_EN = 0x00000001,
IPU_CONF_CSI1_EN = 0x00000002,