diff options
author | Jason Chen <jason.chen@linaro.org> | 2012-01-13 10:53:16 +0800 |
---|---|---|
committer | Eric Miao <eric.miao@linaro.org> | 2012-01-13 14:49:58 +0800 |
commit | 87fce0dcb864fa943c19d9ec8ae7c42f5826772c (patch) | |
tree | 302f979d5ac3f0b62cc202545f375cf0d9359281 | |
parent | dce3069d947b6b3bf8af4ad5201438b6da51ff2d (diff) |
imx: ipu3: add hwtyp supporttopic/lt-3.2-imx6-display
Signed-off-by: Jason Chen <jason.chen@linaro.org>
-rw-r--r-- | arch/arm/mach-imx/mach-imx6q.c | 4 | ||||
-rw-r--r-- | drivers/mxc/ipu3/ipu_common.c | 39 | ||||
-rw-r--r-- | drivers/mxc/ipu3/ipu_prv.h | 1 |
3 files changed, 35 insertions, 9 deletions
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 377a5ba27db..0bb8cd25385 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c @@ -119,8 +119,8 @@ static struct mxc_vpu_platform_data vpu_pdata = { }; static const struct of_dev_auxdata imx6q_auxdata_lookup[] __initconst = { - OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU1_BASE_ADDR, "imx-ipuv3.0", &ipuv3_pdata), - OF_DEV_AUXDATA("fsl,ipuv3", MX6Q_IPU2_BASE_ADDR, "imx-ipuv3.1", &ipuv3_pdata), + OF_DEV_AUXDATA("fsl,imx6q-ipu", MX6Q_IPU1_BASE_ADDR, "imx-ipuv3.0", &ipuv3_pdata), + OF_DEV_AUXDATA("fsl,imx6q-ipu", MX6Q_IPU2_BASE_ADDR, "imx-ipuv3.1", &ipuv3_pdata), OF_DEV_AUXDATA("fsl,vpu", MX6Q_VPU_BASE_ADDR, "mxc_vpu.0", &vpu_pdata), }; diff --git a/drivers/mxc/ipu3/ipu_common.c b/drivers/mxc/ipu3/ipu_common.c index 24c0f8a05c0..0a595d67732 100644 --- a/drivers/mxc/ipu3/ipu_common.c +++ b/drivers/mxc/ipu3/ipu_common.c @@ -30,6 +30,7 @@ #include <linux/irq.h> #include <linux/irqdesc.h> #include <linux/clk.h> +#include <linux/of_device.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/ipu-v3.h> @@ -45,6 +46,29 @@ static struct ipu_soc ipu_array[MXC_IPU_MAX_NUM]; static int ipu_idx; int g_ipu_hw_rev; +enum mxc_ipu_hwtype { + IMX5_IPU, + IMX6_IPU, +}; + +static struct platform_device_id mxc_ipu_devtype[] = { + { + .name = "imx5-ipu", + .driver_data = IMX5_IPU, + }, { + .name = "imx6-ipu", + .driver_data = IMX6_IPU, + }, { + /* sentinel */ + } +}; + +static const struct of_device_id mxc_ipu_dt_ids[] = { + { .compatible = "fsl,imx5-ipu", .data = &mxc_ipu_devtype[IMX5_IPU], }, + { .compatible = "fsl,imx6q-ipu", .data = &mxc_ipu_devtype[IMX6_IPU], }, + { /* sentinel */ } +}; + /* Static functions */ static irqreturn_t ipu_irq_handler(int irq, void *desc); @@ -377,6 +401,8 @@ void _ipu_put(struct ipu_soc *ipu) static int __devinit ipu_probe(struct platform_device *pdev) { struct imx_ipuv3_platform_data *plat_data = pdev->dev.platform_data; + const struct of_device_id *of_id = + of_match_device(mxc_ipu_dt_ids, &pdev->dev); struct ipu_soc *ipu; struct resource *res; unsigned long ipu_base; @@ -391,6 +417,10 @@ static int __devinit ipu_probe(struct platform_device *pdev) ipu = &ipu_array[pdev->id]; memset(ipu, 0, sizeof(struct ipu_soc)); + if (of_id) + pdev->id_entry = of_id->data; + ipu->hwtype = pdev->id_entry->driver_data; + spin_lock_init(&ipu->spin_lock); mutex_init(&ipu->mutex_lock); atomic_set(&ipu->ipu_use_count, 0); @@ -1253,7 +1283,7 @@ int32_t ipu_init_channel_buffer(struct ipu_soc *ipu, ipu_channel_t channel, if (idma_is_set(ipu, IDMAC_CHA_PRI, dma_chan)) { unsigned reg = IDMAC_CH_LOCK_EN_1; uint32_t value = 0; - if (cpu_is_mx53() || cpu_is_mx6q()) { + if (ipu->hwtype == IMX5_IPU || ipu->hwtype == IMX6_IPU) { _ipu_ch_param_set_axi_id(ipu, dma_chan, 0); switch (dma_chan) { case 5: @@ -1321,7 +1351,7 @@ int32_t ipu_init_channel_buffer(struct ipu_soc *ipu, ipu_channel_t channel, } else _ipu_ch_param_set_axi_id(ipu, dma_chan, 1); } else { - if (cpu_is_mx6q()) + if (ipu->hwtype == IMX6_IPU) _ipu_ch_param_set_axi_id(ipu, dma_chan, 1); } @@ -2940,11 +2970,6 @@ static const struct dev_pm_ops mxcipu_pm_ops = { .resume_noirq = ipu_resume_noirq, }; -static const struct of_device_id mxc_ipu_dt_ids[] = { - { .compatible = "fsl,ipuv3", }, - { /* sentinel */ } -}; - /*! * This structure contains pointers to the power management callback functions. */ diff --git a/drivers/mxc/ipu3/ipu_prv.h b/drivers/mxc/ipu3/ipu_prv.h index 42060c954a1..7b245a5e197 100644 --- a/drivers/mxc/ipu3/ipu_prv.h +++ b/drivers/mxc/ipu3/ipu_prv.h @@ -51,6 +51,7 @@ enum csc_type_t { }; struct ipu_soc { + u8 hwtype; bool online; /*clk*/ |