From e0cfa889531d0a2587fb1fc607fffcc9599a2f4e Mon Sep 17 00:00:00 2001 From: Ye Li Date: Mon, 26 Mar 2018 01:56:39 -0700 Subject: [PATCH] ENGR00315894-77 mx6: soc: Add vadc power up/down function Add vadc power up/down function. When gis enable in uboot, the CSI0 input mux select setting to vadc module, clean the bit when gis disabled Signed-off-by: Ye Li Signed-off-by: Sandor Yu Signed-off-by: Peng Fan --- arch/arm/include/asm/mach-imx/sys_proto.h | 3 ++ arch/arm/mach-imx/mx6/soc.c | 50 +++++++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/arch/arm/include/asm/mach-imx/sys_proto.h b/arch/arm/include/asm/mach-imx/sys_proto.h index 6381a68dfd..07e1c61fc3 100644 --- a/arch/arm/include/asm/mach-imx/sys_proto.h +++ b/arch/arm/include/asm/mach-imx/sys_proto.h @@ -128,6 +128,9 @@ int mxs_reset_block(struct mxs_register_32 *reg); int mxs_wait_mask_set(struct mxs_register_32 *reg, u32 mask, u32 timeout); int mxs_wait_mask_clr(struct mxs_register_32 *reg, u32 mask, u32 timeout); +void vadc_power_up(void); +void vadc_power_down(void); + void pcie_power_up(void); void pcie_power_off(void); int arch_auxiliary_core_up(u32 core_id, ulong boot_private_data); diff --git a/arch/arm/mach-imx/mx6/soc.c b/arch/arm/mach-imx/mx6/soc.c index 775a4118bd..80ba22e408 100644 --- a/arch/arm/mach-imx/mx6/soc.c +++ b/arch/arm/mach-imx/mx6/soc.c @@ -392,6 +392,56 @@ static void set_preclk_from_osc(void) } #ifdef CONFIG_MX6SX +void vadc_power_up(void) +{ + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; + u32 val; + + /* csi0 */ + val = readl(&iomux->gpr[5]); + val &= ~IMX6SX_GPR5_CSI1_MUX_CTRL_MASK, + val |= IMX6SX_GPR5_CSI1_MUX_CTRL_CVD; + writel(val, &iomux->gpr[5]); + + /* Power on vadc analog + * Power down vadc ext power */ + val = readl(GPC_BASE_ADDR + 0); + val &= ~0x60000; + writel(val, GPC_BASE_ADDR + 0); + + /* software reset afe */ + val = readl(&iomux->gpr[1]); + writel(val | 0x80000, &iomux->gpr[1]); + + udelay(10*1000); + + /* Release reset bit */ + writel(val & ~0x80000, &iomux->gpr[1]); + + /* Power on vadc ext power */ + val = readl(GPC_BASE_ADDR + 0); + val |= 0x40000; + writel(val, GPC_BASE_ADDR + 0); +} + +void vadc_power_down(void) +{ + struct iomuxc *iomux = (struct iomuxc *)IOMUXC_BASE_ADDR; + u32 val; + + /* Power down vadc ext power + * Power off vadc analog */ + val = readl(GPC_BASE_ADDR + 0); + val &= ~0x40000; + val |= 0x20000; + writel(val, GPC_BASE_ADDR + 0); + + /* clean csi0 connect to vadc */ + val = readl(&iomux->gpr[5]); + val &= ~IMX6SX_GPR5_CSI1_MUX_CTRL_MASK, + writel(val, &iomux->gpr[5]); +} + void pcie_power_up(void) { set_ldo_voltage(LDO_PU, 1100); /* Set VDDPU to 1.1V */