All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] IPUv3: Add i.MX53 IPU support
@ 2011-02-15  8:56 jason.chen at freescale.com
  2011-02-15  8:56 ` [PATCH 2/3] ARM i.MX53 LoCo: Add ipu device & framebuffer support jason.chen at freescale.com
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: jason.chen at freescale.com @ 2011-02-15  8:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Jason Chen <b02280@freescale.com>

Signed-off-by: Jason Chen <b02280@freescale.com>
---
 arch/arm/mach-mx5/board-mx51_babbage.c          |    2 +-
 arch/arm/mach-mx5/devices-imx51.h               |    3 -
 arch/arm/plat-mxc/devices/platform-imx_ipuv3.c  |   97 +++++++++++++++++++++--
 arch/arm/plat-mxc/include/mach/devices-common.h |    4 +-
 arch/arm/plat-mxc/include/mach/ipu-v3.h         |    1 +
 drivers/mfd/Kconfig                             |    6 +-
 drivers/mfd/imx-ipu-v3/ipu-common.c             |   66 +++------------
 drivers/mfd/imx-ipu-v3/ipu-prv.h                |   32 ++++----
 8 files changed, 126 insertions(+), 85 deletions(-)

diff --git a/arch/arm/mach-mx5/board-mx51_babbage.c b/arch/arm/mach-mx5/board-mx51_babbage.c
index ff951f8..176b9bc 100644
--- a/arch/arm/mach-mx5/board-mx51_babbage.c
+++ b/arch/arm/mach-mx5/board-mx51_babbage.c
@@ -457,7 +457,7 @@ static void __init mxc_board_init(void)
 	gpio_request(GPIO_DVI_I2C, "dvi i2c");
 	gpio_direction_output(GPIO_DVI_I2C, 0);
 
-	imx51_add_ipuv3(&ipu_data);
+	imx_add_ipuv3(&ipu_data);
 }
 
 static void __init mx51_babbage_timer_init(void)
diff --git a/arch/arm/mach-mx5/devices-imx51.h b/arch/arm/mach-mx5/devices-imx51.h
index 1bd73b3..065ac87 100644
--- a/arch/arm/mach-mx5/devices-imx51.h
+++ b/arch/arm/mach-mx5/devices-imx51.h
@@ -56,6 +56,3 @@ extern const struct imx_imx_keypad_data imx51_imx_keypad_data __initconst;
 #define imx51_add_imx_keypad(pdata)	\
 	imx_add_imx_keypad(&imx51_imx_keypad_data, pdata)
 
-extern const struct imx_ipuv3_data imx51_ipuv3_data __initconst;
-#define imx51_add_ipuv3(pdata)	\
-	imx_add_ipuv3(&imx51_ipuv3_data, pdata)
diff --git a/arch/arm/plat-mxc/devices/platform-imx_ipuv3.c b/arch/arm/plat-mxc/devices/platform-imx_ipuv3.c
index 2c6b913..c867f97 100644
--- a/arch/arm/plat-mxc/devices/platform-imx_ipuv3.c
+++ b/arch/arm/plat-mxc/devices/platform-imx_ipuv3.c
@@ -8,27 +8,93 @@
  */
 #include <mach/hardware.h>
 #include <mach/devices-common.h>
+#include <linux/clk.h>
 
-#define imx51_ipuv3_data_entry_single(soc)				\
+#define imx5_ipuv3_data_entry_single(soc)				\
 	{								\
 		.iobase = soc ## _IPU_CTRL_BASE_ADDR,			\
 		.irq_err = soc ## _INT_IPU_ERR,				\
 		.irq = soc ## _INT_IPU_SYN,				\
 	}
 
-#ifdef CONFIG_SOC_IMX51
-const struct imx_ipuv3_data imx51_ipuv3_data __initconst =
-	imx51_ipuv3_data_entry_single(MX51);
-#endif /* ifdef CONFIG_SOC_IMX35 */
+struct imx_ipuv3_data __initdata imx51_ipuv3_data =
+		imx5_ipuv3_data_entry_single(MX51);
+struct imx_ipuv3_data __initdata imx53_ipuv3_data =
+		imx5_ipuv3_data_entry_single(MX53);
 
-struct platform_device *__init imx_add_ipuv3(
+/*
+ * The MIPI HSC unit has been removed from the i.MX51 Reference Manual by
+ * the Freescale marketing division. However this did not remove the
+ * hardware from the chip which still needs to be configured...
+ */
+static int __init ipu_mipi_setup(void)
+{
+	struct clk *hsc_clk;
+	void __iomem *hsc_addr;
+	int ret = 0;
+
+	hsc_addr = ioremap(MX51_MIPI_HSC_BASE_ADDR, PAGE_SIZE);
+	if (!hsc_addr)
+		return -ENOMEM;
+
+	hsc_clk = clk_get_sys(NULL, "mipi_hsp");
+	if (IS_ERR(hsc_clk)) {
+		ret = PTR_ERR(hsc_clk);
+		goto unmap;
+	}
+	clk_enable(hsc_clk);
+
+	/* setup MIPI module to legacy mode */
+	__raw_writel(0xF00, hsc_addr);
+
+	/* CSI mode: reserved; DI control mode: legacy (from Freescale BSP) */
+	__raw_writel(__raw_readl(hsc_addr + 0x800) | 0x30ff,
+		hsc_addr + 0x800);
+
+	clk_disable(hsc_clk);
+	clk_put(hsc_clk);
+unmap:
+	iounmap(hsc_addr);
+
+	return ret;
+}
+
+int __init mx51_ipuv3_init(void)
+{
+	int ret = 0;
+	u32 val;
+
+	ret = ipu_mipi_setup();
+
+	/* hard reset the IPU */
+	val = readl(MX51_IO_ADDRESS(MX51_SRC_BASE_ADDR));
+	val |= 1 << 3;
+	writel(val, MX51_IO_ADDRESS(MX51_SRC_BASE_ADDR));
+
+	return ret;
+}
+
+int __init mx53_ipuv3_init(void)
+{
+	int ret = 0;
+	u32 val;
+
+	/* hard reset the IPU */
+	val = readl(MX53_IO_ADDRESS(MX53_SRC_BASE_ADDR));
+	val |= 1 << 3;
+	writel(val, MX53_IO_ADDRESS(MX53_SRC_BASE_ADDR));
+
+	return ret;
+}
+
+struct platform_device *__init _imx_add_ipuv3(
 		const struct imx_ipuv3_data *data,
 		const struct imx_ipuv3_platform_data *pdata)
 {
 	struct resource res[] = {
 		{
 			.start = data->iobase,
-			.end = data->iobase + SZ_512M - 1,
+			.end = data->iobase + data->iosize - 1,
 			.flags = IORESOURCE_MEM,
 		}, {
 			.start = data->irq_err,
@@ -45,3 +111,20 @@ struct platform_device *__init imx_add_ipuv3(
 			res, ARRAY_SIZE(res), pdata, sizeof(*pdata));
 }
 
+struct platform_device *__init imx_add_ipuv3(
+		struct imx_ipuv3_platform_data *pdata)
+{
+	if (cpu_is_mx51()) {
+		imx51_ipuv3_data.iosize = SZ_512M;
+		pdata->init = mx51_ipuv3_init;
+		return _imx_add_ipuv3(&imx51_ipuv3_data, pdata);
+	} else if (cpu_is_mx53()) {
+		/* fix offset */
+		imx53_ipuv3_data.iobase -= 0x18000000;
+		imx51_ipuv3_data.iosize = SZ_128M;
+		pdata->init = mx53_ipuv3_init;
+		return _imx_add_ipuv3(&imx53_ipuv3_data, pdata);
+	} else
+		return ERR_PTR(-EINVAL);
+}
+
diff --git a/arch/arm/plat-mxc/include/mach/devices-common.h b/arch/arm/plat-mxc/include/mach/devices-common.h
index 8f5197f..d9824a2 100644
--- a/arch/arm/plat-mxc/include/mach/devices-common.h
+++ b/arch/arm/plat-mxc/include/mach/devices-common.h
@@ -268,9 +268,9 @@ struct platform_device *__init imx_add_spi_imx(
 #include <mach/ipu-v3.h>
 struct imx_ipuv3_data {
 	resource_size_t iobase;
+	resource_size_t iosize;
 	resource_size_t irq_err;
 	resource_size_t irq;
 };
 struct platform_device *__init imx_add_ipuv3(
-		const struct imx_ipuv3_data *data,
-		const struct imx_ipuv3_platform_data *pdata);
+		struct imx_ipuv3_platform_data *pdata);
diff --git a/arch/arm/plat-mxc/include/mach/ipu-v3.h b/arch/arm/plat-mxc/include/mach/ipu-v3.h
index f8900b9..1a4a271 100644
--- a/arch/arm/plat-mxc/include/mach/ipu-v3.h
+++ b/arch/arm/plat-mxc/include/mach/ipu-v3.h
@@ -42,6 +42,7 @@ struct ipuv3_fb_platform_data {
 
 struct imx_ipuv3_platform_data {
 	int rev;
+	int (*init) (void);
 	struct ipuv3_fb_platform_data	*fb_head0_platform_data;
 	struct ipuv3_fb_platform_data	*fb_head1_platform_data;
 };
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index d1aa701..0d218cd 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -625,11 +625,11 @@ config MFD_WL1273_CORE
 	  audio codec.
 
 config MFD_IMX_IPU_V3
-	tristate "Support the Image Processing Unit (IPU) found on the i.MX51"
-	depends on ARCH_MX51
+	tristate "Support the Image Processing Unit (IPUv3) found on the i.MX5X"
+	depends on ARCH_MX51 || ARCH_MX53
 	select MFD_CORE
 	help
-	  Say yes here to support the IPU on i.MX51.
+	  Say yes here to support the IPUv3 on i.MX5X.
 
 endif # MFD_SUPPORT
 
diff --git a/drivers/mfd/imx-ipu-v3/ipu-common.c b/drivers/mfd/imx-ipu-v3/ipu-common.c
index d96245f..3a026c0 100644
--- a/drivers/mfd/imx-ipu-v3/ipu-common.c
+++ b/drivers/mfd/imx-ipu-v3/ipu-common.c
@@ -345,15 +345,9 @@ ipu_color_space_t format_to_colorspace(u32 fmt)
 	}
 }
 
-static int ipu_reset(void)
+static int ipu_mem_reset(void)
 {
 	int timeout = 10000;
-	u32 val;
-
-	/* hard reset the IPU */
-	val = readl(MX51_IO_ADDRESS(MX51_SRC_BASE_ADDR));
-	val |= 1 << 3;
-	writel(val, MX51_IO_ADDRESS(MX51_SRC_BASE_ADDR));
 
 	ipu_cm_write(0x807FFFFF, IPU_MEM_RST);
 
@@ -366,43 +360,6 @@ static int ipu_reset(void)
 	return 0;
 }
 
-/*
- * The MIPI HSC unit has been removed from the i.MX51 Reference Manual by
- * the Freescale marketing division. However this did not remove the
- * hardware from the chip which still needs to be configured...
- */
-static int __devinit ipu_mipi_setup(void)
-{
-	struct clk *hsc_clk;
-	void __iomem *hsc_addr;
-	int ret = 0;
-
-	hsc_addr = ioremap(MX51_MIPI_HSC_BASE_ADDR, PAGE_SIZE);
-	if (!hsc_addr)
-		return -ENOMEM;
-
-	hsc_clk = clk_get_sys(NULL, "mipi_hsp");
-	if (IS_ERR(hsc_clk)) {
-		ret = PTR_ERR(hsc_clk);
-		goto unmap;
-	}
-	clk_enable(hsc_clk);
-
-	/* setup MIPI module to legacy mode */
-	__raw_writel(0xF00, hsc_addr);
-
-	/* CSI mode: reserved; DI control mode: legacy (from Freescale BSP) */
-	__raw_writel(__raw_readl(hsc_addr + 0x800) | 0x30ff,
-		hsc_addr + 0x800);
-
-	clk_disable(hsc_clk);
-	clk_put(hsc_clk);
-unmap:
-	iounmap(hsc_addr);
-
-	return ret;
-}
-
 static int ipu_submodules_init(struct platform_device *pdev,
 		unsigned long ipu_base, struct clk *ipu_clk)
 {
@@ -526,9 +483,9 @@ static int ipu_add_client_devices(struct platform_device *pdev)
 	fbdata = plat_data->fb_head0_platform_data;
 	if (fbdata) {
 		fbdata->ipu_channel_bg =
-			MX51_IPU_CHANNEL_MEM_BG_SYNC;
+			MX5_IPU_CHANNEL_MEM_BG_SYNC;
 		fbdata->ipu_channel_fg =
-			MX51_IPU_CHANNEL_MEM_FG_SYNC;
+			MX5_IPU_CHANNEL_MEM_FG_SYNC;
 		fbdata->dc_channel = 5;
 		fbdata->dp_channel = IPU_DP_FLOW_SYNC;
 
@@ -539,7 +496,7 @@ static int ipu_add_client_devices(struct platform_device *pdev)
 	fbdata = plat_data->fb_head1_platform_data;
 	if (fbdata) {
 		fbdata->ipu_channel_bg =
-			MX51_IPU_CHANNEL_MEM_DC_SYNC;
+			MX5_IPU_CHANNEL_MEM_DC_SYNC;
 		fbdata->ipu_channel_fg = -1;
 		fbdata->dc_channel = 1;
 		fbdata->dp_channel = -1;
@@ -554,6 +511,7 @@ static int ipu_add_client_devices(struct platform_device *pdev)
 static int __devinit ipu_probe(struct platform_device *pdev)
 {
 	struct resource *res;
+	struct imx_ipuv3_platform_data *plat_data = pdev->dev.platform_data;
 	unsigned long ipu_base;
 	int ret, irq1, irq2;
 
@@ -586,10 +544,6 @@ static int __devinit ipu_probe(struct platform_device *pdev)
 		goto failed_ioremap2;
 	}
 
-	ret = ipu_mipi_setup();
-	if (ret)
-		goto failed_mipi_setup;
-
 	ipu_clk = clk_get(&pdev->dev, "ipu");
 	if (IS_ERR(ipu_clk)) {
 		ret = PTR_ERR(ipu_clk);
@@ -613,7 +567,13 @@ static int __devinit ipu_probe(struct platform_device *pdev)
 		goto failed_request_irq2;
 	}
 
-	ipu_reset();
+	if (plat_data->init) {
+		ret = plat_data->init();
+		if (ret)
+			goto failed_plat_init;
+	}
+
+	ipu_mem_reset();
 
 	ret = ipu_submodules_init(pdev, ipu_base, ipu_clk);
 	if (ret)
@@ -634,6 +594,7 @@ static int __devinit ipu_probe(struct platform_device *pdev)
 
 failed_add_clients:
 	ipu_submodules_exit(pdev, ipu_base);
+failed_plat_init:
 failed_submodules_init:
 	free_irq(irq2, &pdev->dev);
 failed_request_irq2:
@@ -642,7 +603,6 @@ failed_request_irq2:
 failed_request_irq1:
 	clk_put(ipu_clk);
 failed_clk_get:
-failed_mipi_setup:
 	iounmap(ipu_idmac_reg);
 failed_ioremap2:
 	iounmap(ipu_cm_reg);
diff --git a/drivers/mfd/imx-ipu-v3/ipu-prv.h b/drivers/mfd/imx-ipu-v3/ipu-prv.h
index 339b554..8469337 100644
--- a/drivers/mfd/imx-ipu-v3/ipu-prv.h
+++ b/drivers/mfd/imx-ipu-v3/ipu-prv.h
@@ -21,22 +21,22 @@
 #include <linux/platform_device.h>
 #include <mach/hardware.h>
 
-#define MX51_IPU_CHANNEL_CSI0			 0
-#define MX51_IPU_CHANNEL_CSI1			 1
-#define MX51_IPU_CHANNEL_CSI2			 2
-#define MX51_IPU_CHANNEL_CSI3			 3
-#define MX51_IPU_CHANNEL_MEM_BG_SYNC		23
-#define MX51_IPU_CHANNEL_MEM_FG_SYNC		27
-#define MX51_IPU_CHANNEL_MEM_DC_SYNC		28
-#define MX51_IPU_CHANNEL_MEM_FG_SYNC_ALPHA	31
-#define MX51_IPU_CHANNEL_MEM_DC_ASYNC		41
-#define MX51_IPU_CHANNEL_ROT_ENC_MEM		45
-#define MX51_IPU_CHANNEL_ROT_VF_MEM		46
-#define MX51_IPU_CHANNEL_ROT_PP_MEM		47
-#define MX51_IPU_CHANNEL_ROT_ENC_MEM_OUT	48
-#define MX51_IPU_CHANNEL_ROT_VF_MEM_OUT		49
-#define MX51_IPU_CHANNEL_ROT_PP_MEM_OUT		50
-#define MX51_IPU_CHANNEL_MEM_BG_SYNC_ALPHA	51
+#define MX5_IPU_CHANNEL_CSI0			 0
+#define MX5_IPU_CHANNEL_CSI1			 1
+#define MX5_IPU_CHANNEL_CSI2			 2
+#define MX5_IPU_CHANNEL_CSI3			 3
+#define MX5_IPU_CHANNEL_MEM_BG_SYNC		23
+#define MX5_IPU_CHANNEL_MEM_FG_SYNC		27
+#define MX5_IPU_CHANNEL_MEM_DC_SYNC		28
+#define MX5_IPU_CHANNEL_MEM_FG_SYNC_ALPHA	31
+#define MX5_IPU_CHANNEL_MEM_DC_ASYNC		41
+#define MX5_IPU_CHANNEL_ROT_ENC_MEM		45
+#define MX5_IPU_CHANNEL_ROT_VF_MEM		46
+#define MX5_IPU_CHANNEL_ROT_PP_MEM		47
+#define MX5_IPU_CHANNEL_ROT_ENC_MEM_OUT	48
+#define MX5_IPU_CHANNEL_ROT_VF_MEM_OUT		49
+#define MX5_IPU_CHANNEL_ROT_PP_MEM_OUT		50
+#define MX5_IPU_CHANNEL_MEM_BG_SYNC_ALPHA	51
 
 #define IPU_DISP0_BASE		0x00000000
 #define IPU_MCU_T_DEFAULT	8
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] ARM i.MX53 LoCo: Add ipu device & framebuffer support
  2011-02-15  8:56 [PATCH 1/3] IPUv3: Add i.MX53 IPU support jason.chen at freescale.com
@ 2011-02-15  8:56 ` jason.chen at freescale.com
  2011-02-15  8:56 ` [PATCH 3/3] ARM i.MX53 LoCo: Add PWM backlight device support jason.chen at freescale.com
  2011-02-15 16:12 ` [PATCH 1/3] IPUv3: Add i.MX53 IPU support Fabio Estevam
  2 siblings, 0 replies; 5+ messages in thread
From: jason.chen at freescale.com @ 2011-02-15  8:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Jason Chen <b02280@freescale.com>

Signed-off-by: Jason Chen <b02280@freescale.com>
---
 arch/arm/mach-mx5/Kconfig           |    1 +
 arch/arm/mach-mx5/board-mx53_loco.c |   52 +++++++++++++++++++++++++++++++++++
 arch/arm/mach-mx5/clock-mx51-mx53.c |    5 +++-
 3 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mx5/Kconfig b/arch/arm/mach-mx5/Kconfig
index 8afdb75..14840c3 100644
--- a/arch/arm/mach-mx5/Kconfig
+++ b/arch/arm/mach-mx5/Kconfig
@@ -147,6 +147,7 @@ config MACH_MX53_LOCO
 	bool "Support MX53 LOCO platforms"
 	select SOC_IMX53
 	select IMX_HAVE_PLATFORM_IMX_UART
+	select IMX_HAVE_PLATFORM_IMX_IPUV3
 	help
 	  Include support for MX53 LOCO platform. This includes specific
 	  configurations for the board and its peripherals.
diff --git a/arch/arm/mach-mx5/board-mx53_loco.c b/arch/arm/mach-mx5/board-mx53_loco.c
index 0fea252..8da1cd4 100644
--- a/arch/arm/mach-mx5/board-mx53_loco.c
+++ b/arch/arm/mach-mx5/board-mx53_loco.c
@@ -23,11 +23,13 @@
 #include <linux/fec.h>
 #include <linux/delay.h>
 #include <linux/gpio.h>
+#include <linux/mfd/imx-ipu-v3.h>
 
 #include <mach/common.h>
 #include <mach/hardware.h>
 #include <mach/imx-uart.h>
 #include <mach/iomux-mx53.h>
+#include <mach/ipu-v3.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -35,12 +37,43 @@
 
 #include "crm_regs.h"
 #include "devices-imx53.h"
+#include "devices.h"
 
 #define LOCO_FEC_PHY_RST		IMX_GPIO_NR(7, 6)
 
 static iomux_v3_cfg_t mx53_loco_pads[] = {
 	MX53_PAD_CSI0_DAT10__UART1_TXD_MUX,
 	MX53_PAD_CSI0_DAT11__UART1_RXD_MUX,
+
+	/* DISPLAY */
+	MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK,
+	MX53_PAD_DI0_PIN15__IPU_DI0_PIN15,
+	MX53_PAD_DI0_PIN2__IPU_DI0_PIN2,
+	MX53_PAD_DI0_PIN3__IPU_DI0_PIN3,
+	MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0,
+	MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1,
+	MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2,
+	MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3,
+	MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4,
+	MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5,
+	MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6,
+	MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7,
+	MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8,
+	MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9,
+	MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10,
+	MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11,
+	MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12,
+	MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13,
+	MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14,
+	MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15,
+	MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16,
+	MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17,
+	MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18,
+	MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19,
+	MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20,
+	MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21,
+	MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22,
+	MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23,
 };
 
 static inline void mx53_loco_fec_reset(void)
@@ -62,6 +95,23 @@ static struct fec_platform_data mx53_loco_fec_data = {
 	.phy = PHY_INTERFACE_MODE_RMII,
 };
 
+static struct ipuv3_fb_platform_data loco_fb0_data = {
+	.interface_pix_fmt = IPU_PIX_FMT_RGB565,
+	.flags = IMX_IPU_FB_USE_MODEDB | IMX_IPU_FB_USE_OVERLAY,
+	.display = 0,
+};
+
+static struct ipuv3_fb_platform_data loco_fb1_data = {
+	.interface_pix_fmt = IPU_PIX_FMT_RGB24,
+	.flags = IMX_IPU_FB_USE_MODEDB,
+	.display = 1,
+};
+
+static struct imx_ipuv3_platform_data ipu_data = {
+	.fb_head0_platform_data = &loco_fb0_data,
+	.fb_head1_platform_data = &loco_fb1_data,
+};
+
 static void __init mx53_loco_board_init(void)
 {
 	mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads,
@@ -69,6 +119,8 @@ static void __init mx53_loco_board_init(void)
 	imx53_add_imx_uart(0, NULL);
 	mx53_loco_fec_reset();
 	imx53_add_fec(&mx53_loco_fec_data);
+
+	imx_add_ipuv3(&ipu_data);
 }
 
 static void __init mx53_loco_timer_init(void)
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
index c66be0e..043572f 100644
--- a/arch/arm/mach-mx5/clock-mx51-mx53.c
+++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
@@ -1317,7 +1317,7 @@ static struct clk_lookup mx51_lookups[] = {
 	_REGISTER_CLOCK("imx2-wdt.0", NULL, dummy_clk)
 	_REGISTER_CLOCK("imx2-wdt.1", NULL, dummy_clk)
 	_REGISTER_CLOCK(NULL, "mipi_hsp", mipi_hsp_clk)
-	_REGISTER_CLOCK("imx-ipuv3", NULL, ipu_clk)
+	_REGISTER_CLOCK("imx-ipuv3", "ipu", ipu_clk)
 	_REGISTER_CLOCK("imx-ipuv3", "di0", ipu_di0_clk)
 	_REGISTER_CLOCK("imx-ipuv3", "di1", ipu_di1_clk)
 };
@@ -1336,6 +1336,9 @@ static struct clk_lookup mx53_lookups[] = {
 	_REGISTER_CLOCK("imx53-ecspi.0", NULL, ecspi1_clk)
 	_REGISTER_CLOCK("imx53-ecspi.1", NULL, ecspi2_clk)
 	_REGISTER_CLOCK("imx53-cspi.0", NULL, cspi_clk)
+	_REGISTER_CLOCK("imx-ipuv3", "ipu", ipu_clk)
+	_REGISTER_CLOCK("imx-ipuv3", "di0", ipu_di0_clk)
+	_REGISTER_CLOCK("imx-ipuv3", "di1", ipu_di1_clk)
 };
 
 static void clk_tree_init(void)
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] ARM i.MX53 LoCo: Add PWM backlight device support
  2011-02-15  8:56 [PATCH 1/3] IPUv3: Add i.MX53 IPU support jason.chen at freescale.com
  2011-02-15  8:56 ` [PATCH 2/3] ARM i.MX53 LoCo: Add ipu device & framebuffer support jason.chen at freescale.com
@ 2011-02-15  8:56 ` jason.chen at freescale.com
  2011-02-15 16:12 ` [PATCH 1/3] IPUv3: Add i.MX53 IPU support Fabio Estevam
  2 siblings, 0 replies; 5+ messages in thread
From: jason.chen at freescale.com @ 2011-02-15  8:56 UTC (permalink / raw)
  To: linux-arm-kernel

From: Jason Chen <b02280@freescale.com>

Signed-off-by: Jason Chen <b02280@freescale.com>
---
 arch/arm/mach-mx5/board-mx53_loco.c          |   29 ++++++++++++++++++++++++++
 arch/arm/mach-mx5/clock-mx51-mx53.c          |    2 +
 arch/arm/mach-mx5/devices-imx53.h            |    2 +
 arch/arm/mach-mx5/devices.c                  |   10 +++++++++
 arch/arm/mach-mx5/devices.h                  |    2 +
 arch/arm/plat-mxc/devices/Kconfig            |    1 +
 arch/arm/plat-mxc/devices/platform-mxc_pwm.c |    9 ++++++++
 arch/arm/plat-mxc/pwm.c                      |    3 +-
 8 files changed, 57 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mx5/board-mx53_loco.c b/arch/arm/mach-mx5/board-mx53_loco.c
index 8da1cd4..1ded0ef 100644
--- a/arch/arm/mach-mx5/board-mx53_loco.c
+++ b/arch/arm/mach-mx5/board-mx53_loco.c
@@ -24,6 +24,7 @@
 #include <linux/delay.h>
 #include <linux/gpio.h>
 #include <linux/mfd/imx-ipu-v3.h>
+#include <linux/pwm_backlight.h>
 
 #include <mach/common.h>
 #include <mach/hardware.h>
@@ -39,6 +40,7 @@
 #include "devices-imx53.h"
 #include "devices.h"
 
+#define LOCO_DISP0_PWR			IMX_GPIO_NR(3, 24)
 #define LOCO_FEC_PHY_RST		IMX_GPIO_NR(7, 6)
 
 static iomux_v3_cfg_t mx53_loco_pads[] = {
@@ -74,6 +76,12 @@ static iomux_v3_cfg_t mx53_loco_pads[] = {
 	MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21,
 	MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22,
 	MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23,
+
+	/* DISP0_POWER_EN */
+	MX53_PAD_EIM_D24__GPIO3_24,
+
+	/* PWM */
+	MX53_PAD_GPIO_1__PWM2_PWMO,
 };
 
 static inline void mx53_loco_fec_reset(void)
@@ -95,6 +103,13 @@ static struct fec_platform_data mx53_loco_fec_data = {
 	.phy = PHY_INTERFACE_MODE_RMII,
 };
 
+static struct platform_pwm_backlight_data loco_pwm_backlight_data = {
+        .pwm_id = 1,
+        .max_brightness = 255,
+        .dft_brightness = 128,
+        .pwm_period_ns = 50000,
+};
+
 static struct ipuv3_fb_platform_data loco_fb0_data = {
 	.interface_pix_fmt = IPU_PIX_FMT_RGB565,
 	.flags = IMX_IPU_FB_USE_MODEDB | IMX_IPU_FB_USE_OVERLAY,
@@ -114,6 +129,8 @@ static struct imx_ipuv3_platform_data ipu_data = {
 
 static void __init mx53_loco_board_init(void)
 {
+	int ret;
+
 	mxc_iomux_v3_setup_multiple_pads(mx53_loco_pads,
 					ARRAY_SIZE(mx53_loco_pads));
 	imx53_add_imx_uart(0, NULL);
@@ -121,6 +138,18 @@ static void __init mx53_loco_board_init(void)
 	imx53_add_fec(&mx53_loco_fec_data);
 
 	imx_add_ipuv3(&ipu_data);
+
+	imx_add_mxc_pwm(&imx53_mxc_pwm_data[1]);
+	mxc_register_device(&mxc_pwm1_backlight_device,
+			&loco_pwm_backlight_data);
+
+	/* enable disp0 power */
+	ret = gpio_request(LOCO_DISP0_PWR, "disp0-power-en");
+	if (ret) {
+		printk(KERN_ERR"failed to get GPIO_LOCO_DISP0_PWR: %d\n", ret);
+		return;
+	}
+	gpio_direction_output(LOCO_DISP0_PWR, 1);
 }
 
 static void __init mx53_loco_timer_init(void)
diff --git a/arch/arm/mach-mx5/clock-mx51-mx53.c b/arch/arm/mach-mx5/clock-mx51-mx53.c
index 043572f..64419e0 100644
--- a/arch/arm/mach-mx5/clock-mx51-mx53.c
+++ b/arch/arm/mach-mx5/clock-mx51-mx53.c
@@ -1339,6 +1339,8 @@ static struct clk_lookup mx53_lookups[] = {
 	_REGISTER_CLOCK("imx-ipuv3", "ipu", ipu_clk)
 	_REGISTER_CLOCK("imx-ipuv3", "di0", ipu_di0_clk)
 	_REGISTER_CLOCK("imx-ipuv3", "di1", ipu_di1_clk)
+	_REGISTER_CLOCK("mxc_pwm.0", "pwm", pwm1_clk)
+	_REGISTER_CLOCK("mxc_pwm.1", "pwm", pwm2_clk)
 };
 
 static void clk_tree_init(void)
diff --git a/arch/arm/mach-mx5/devices-imx53.h b/arch/arm/mach-mx5/devices-imx53.h
index 8639735..a60ef2e 100644
--- a/arch/arm/mach-mx5/devices-imx53.h
+++ b/arch/arm/mach-mx5/devices-imx53.h
@@ -29,3 +29,5 @@ imx53_sdhci_esdhc_imx_data[] __initconst;
 extern const struct imx_spi_imx_data imx53_ecspi_data[] __initconst;
 #define imx53_add_ecspi(id, pdata)	\
 	imx_add_spi_imx(&imx53_ecspi_data[id], pdata)
+
+extern const struct imx_mxc_pwm_data imx53_mxc_pwm_data[] __initconst;
diff --git a/arch/arm/mach-mx5/devices.c b/arch/arm/mach-mx5/devices.c
index 153ada5..f523209 100644
--- a/arch/arm/mach-mx5/devices.c
+++ b/arch/arm/mach-mx5/devices.c
@@ -120,6 +120,16 @@ struct platform_device mxc_usbh2_device = {
 	},
 };
 
+struct platform_device mxc_pwm1_backlight_device = {
+        .name = "pwm-backlight",
+        .id = 0,
+};
+
+struct platform_device mxc_pwm2_backlight_device = {
+        .name = "pwm-backlight",
+        .id = 1,
+};
+
 static struct mxc_gpio_port mxc_gpio_ports[] = {
 	{
 		.chip.label = "gpio-0",
diff --git a/arch/arm/mach-mx5/devices.h b/arch/arm/mach-mx5/devices.h
index 55a5129..a74cd97 100644
--- a/arch/arm/mach-mx5/devices.h
+++ b/arch/arm/mach-mx5/devices.h
@@ -3,3 +3,5 @@ extern struct platform_device mxc_usbh1_device;
 extern struct platform_device mxc_usbh2_device;
 extern struct platform_device mxc_usbdr_udc_device;
 extern struct platform_device mxc_hsi2c_device;
+extern struct platform_device mxc_pwm1_backlight_device;
+extern struct platform_device mxc_pwm2_backlight_device;
diff --git a/arch/arm/plat-mxc/devices/Kconfig b/arch/arm/plat-mxc/devices/Kconfig
index f99317e..83e9f1c 100644
--- a/arch/arm/plat-mxc/devices/Kconfig
+++ b/arch/arm/plat-mxc/devices/Kconfig
@@ -58,6 +58,7 @@ config IMX_HAVE_PLATFORM_MXC_NAND
 
 config IMX_HAVE_PLATFORM_MXC_PWM
 	bool
+	default y if HAVE_PWM
 
 config IMX_HAVE_PLATFORM_MXC_RNGA
 	bool
diff --git a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c b/arch/arm/plat-mxc/devices/platform-mxc_pwm.c
index b0c4ae2..18cfd07 100644
--- a/arch/arm/plat-mxc/devices/platform-mxc_pwm.c
+++ b/arch/arm/plat-mxc/devices/platform-mxc_pwm.c
@@ -49,6 +49,15 @@ const struct imx_mxc_pwm_data imx51_mxc_pwm_data[] __initconst = {
 };
 #endif /* ifdef CONFIG_SOC_IMX51 */
 
+#ifdef CONFIG_SOC_IMX53
+const struct imx_mxc_pwm_data imx53_mxc_pwm_data[] __initconst = {
+#define imx53_mxc_pwm_data_entry(_id, _hwid)				\
+	imx_mxc_pwm_data_entry(MX53, _id, _hwid, SZ_16K)
+	imx53_mxc_pwm_data_entry(0, 1),
+	imx53_mxc_pwm_data_entry(1, 2),
+};
+#endif /* ifdef CONFIG_SOC_IMX53 */
+
 struct platform_device *__init imx_add_mxc_pwm(
 		const struct imx_mxc_pwm_data *data)
 {
diff --git a/arch/arm/plat-mxc/pwm.c b/arch/arm/plat-mxc/pwm.c
index 7a61ef8..61dd8fb 100644
--- a/arch/arm/plat-mxc/pwm.c
+++ b/arch/arm/plat-mxc/pwm.c
@@ -57,7 +57,8 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
 	if (pwm == NULL || period_ns == 0 || duty_ns > period_ns)
 		return -EINVAL;
 
-	if (cpu_is_mx27() || cpu_is_mx3() || cpu_is_mx25() || cpu_is_mx51()) {
+	if (cpu_is_mx27() || cpu_is_mx3() || cpu_is_mx25() || cpu_is_mx51() ||
+		cpu_is_mx53()) {
 		unsigned long long c;
 		unsigned long period_cycles, duty_cycles, prescale;
 		u32 cr;
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 1/3] IPUv3: Add i.MX53 IPU support
  2011-02-15  8:56 [PATCH 1/3] IPUv3: Add i.MX53 IPU support jason.chen at freescale.com
  2011-02-15  8:56 ` [PATCH 2/3] ARM i.MX53 LoCo: Add ipu device & framebuffer support jason.chen at freescale.com
  2011-02-15  8:56 ` [PATCH 3/3] ARM i.MX53 LoCo: Add PWM backlight device support jason.chen at freescale.com
@ 2011-02-15 16:12 ` Fabio Estevam
  2011-02-16  1:40   ` Chen Jie-B02280
  2 siblings, 1 reply; 5+ messages in thread
From: Fabio Estevam @ 2011-02-15 16:12 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Jason,

On Tue, Feb 15, 2011 at 6:56 AM,  <jason.chen@freescale.com> wrote:
> From: Jason Chen <b02280@freescale.com>
>
> Signed-off-by: Jason Chen <b02280@freescale.com>
> ---
> ?arch/arm/mach-mx5/board-mx51_babbage.c ? ? ? ? ?| ? ?2 +-
> ?arch/arm/mach-mx5/devices-imx51.h ? ? ? ? ? ? ? | ? ?3 -
> ?arch/arm/plat-mxc/devices/platform-imx_ipuv3.c ?| ? 97 +++++++++++++++++++++--
> ?arch/arm/plat-mxc/include/mach/devices-common.h | ? ?4 +-
> ?arch/arm/plat-mxc/include/mach/ipu-v3.h ? ? ? ? | ? ?1 +
> ?drivers/mfd/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?6 +-
> ?drivers/mfd/imx-ipu-v3/ipu-common.c ? ? ? ? ? ? | ? 66 +++------------
> ?drivers/mfd/imx-ipu-v3/ipu-prv.h ? ? ? ? ? ? ? ?| ? 32 ++++----
> ?8 files changed, 126 insertions(+), 85 deletions(-)

Which git tree did you use for these patches?

I can not see a git tree that contains both the MX51 IPU and MX53LOCO
board support.

Regards,

Fabio Estevam

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] IPUv3: Add i.MX53 IPU support
  2011-02-15 16:12 ` [PATCH 1/3] IPUv3: Add i.MX53 IPU support Fabio Estevam
@ 2011-02-16  1:40   ` Chen Jie-B02280
  0 siblings, 0 replies; 5+ messages in thread
From: Chen Jie-B02280 @ 2011-02-16  1:40 UTC (permalink / raw)
  To: linux-arm-kernel

Hi, Fabio,

You need do some cherry-pick from Sascha's ipuv3 branch to for-next.

Jason Chen / Chen Jie
NMG / MAD
Freescale Semiconductor (China) Ltd.
2F, Building B, 177#, Bi Bo Rd
Pu Dong New District Shanghai?201203
Tel:???? 021-28937178?
Fax:???? 021-28937444
E-mail:??Jason.Chen at freescale.com


-----Original Message-----
From: Fabio Estevam [mailto:festevam at gmail.com] 
Sent: Wednesday, February 16, 2011 12:12 AM
To: Chen Jie-B02280
Cc: s.hauer at pengutronix.de; linux-arm-kernel at lists.infradead.org; Chen Jie-B02280
Subject: Re: [PATCH 1/3] IPUv3: Add i.MX53 IPU support

Hi Jason,

On Tue, Feb 15, 2011 at 6:56 AM,  <jason.chen@freescale.com> wrote:
> From: Jason Chen <b02280@freescale.com>
>
> Signed-off-by: Jason Chen <b02280@freescale.com>
> ---
> ?arch/arm/mach-mx5/board-mx51_babbage.c ? ? ? ? ?| ? ?2 +-
> ?arch/arm/mach-mx5/devices-imx51.h ? ? ? ? ? ? ? | ? ?3 -
> ?arch/arm/plat-mxc/devices/platform-imx_ipuv3.c ?| ? 97 
> +++++++++++++++++++++--
> ?arch/arm/plat-mxc/include/mach/devices-common.h | ? ?4 +-
> ?arch/arm/plat-mxc/include/mach/ipu-v3.h ? ? ? ? | ? ?1 +
> ?drivers/mfd/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?6 +-
> ?drivers/mfd/imx-ipu-v3/ipu-common.c ? ? ? ? ? ? | ? 66 
> +++------------
> ?drivers/mfd/imx-ipu-v3/ipu-prv.h ? ? ? ? ? ? ? ?| ? 32 ++++----
> ?8 files changed, 126 insertions(+), 85 deletions(-)

Which git tree did you use for these patches?

I can not see a git tree that contains both the MX51 IPU and MX53LOCO board support.

Regards,

Fabio Estevam

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-02-16  1:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-15  8:56 [PATCH 1/3] IPUv3: Add i.MX53 IPU support jason.chen at freescale.com
2011-02-15  8:56 ` [PATCH 2/3] ARM i.MX53 LoCo: Add ipu device & framebuffer support jason.chen at freescale.com
2011-02-15  8:56 ` [PATCH 3/3] ARM i.MX53 LoCo: Add PWM backlight device support jason.chen at freescale.com
2011-02-15 16:12 ` [PATCH 1/3] IPUv3: Add i.MX53 IPU support Fabio Estevam
2011-02-16  1:40   ` Chen Jie-B02280

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.