void mipi_csi2_clock_set(void) { //set VIDPLL(PLL5) to 596MHz HW_CCM_ANALOG_PLL_VIDEO_WR(BF_CCM_ANALOG_PLL_VIDEO_DIV_SELECT(0) | BF_CCM_ANALOG_PLL_VIDEO_ENABLE(1)); HW_CCM_ANALOG_PLL_VIDEO_NUM_WR(0x00000000); HW_CCM_ANALOG_PLL_VIDEO_DENOM_WR(0x00000001); while (!HW_CCM_ANALOG_PLL_VIDEO.B.LOCK) ; //waiting for PLL lock BF_CLR(CCM_ANALOG_PLL_VIDEO, BYPASS); //select CSI0_HSYNC osc_clk 24MHz, CKO1 output drives cko2 clock HW_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_WR( BF_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_SION_V(DISABLED) | BF_IOMUXC_SW_MUX_CTL_PAD_CSI0_HSYNC_MUX_MODE_V(ALT3)); HW_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_WR( BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_HYS_V(ENABLED) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PUS_V(100K_OHM_PU) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PUE_V(PULL) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_PKE_V(ENABLED) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_ODE_V(DISABLED) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_SPEED_V(100MHZ) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_DSE_V(40_OHM) | BF_IOMUXC_SW_PAD_CTL_PAD_CSI0_HSYNC_SRE_V(SLOW)); HW_CCM_CCOSR_WR( BF_CCM_CCOSR_CLKO1_SEL(0) | BF_CCM_CCOSR_CLKO1_DIV(0) | BF_CCM_CCOSR_CLKO1_EN(1) | BF_CCM_CCOSR_CLKO_SEL(1) | // select cko2 for cko1 output BF_CCM_CCOSR_CLKO2_SEL(0xe) | // osc_clk BF_CCM_CCOSR_CLKO2_DIV(0) | // div 1 BF_CCM_CCOSR_CLKO2_EN(1)); }
void gpu_clock_config(void) { HW_CCM_ANALOG_PLL_VIDEO_NUM_WR(0xFF0D6C3); HW_CCM_ANALOG_PLL_VIDEO_WR(BF_CCM_ANALOG_PLL_VIDEO_DIV_SELECT(2) | BF_CCM_ANALOG_PLL_VIDEO_ENABLE(1) | BF_CCM_ANALOG_PLL_VIDEO_BYPASS(1)); while (!HW_CCM_ANALOG_PLL_VIDEO.B.LOCK) ; //waiting for PLL lock BF_CLR(CCM_ANALOG_PLL_VIDEO, BYPASS); //ldb_di0_clk select PLL5 HW_CCM_CS2CDR.B.LDB_DI0_CLK_SEL = 0; // PLL5 HW_IOMUXC_GPR3.B.LVDS1_MUX_CTL = 0; // LVDS1 source is IPU1 DI0 port HW_IOMUXC_GPR3.B.LVDS0_MUX_CTL = 2; // LVDS0 source is IPU2 DI0 port HW_CCM_CHSCCDR.B.IPU1_DI0_CLK_SEL = 3; // derive clock from ldb_di0_clk HW_CCM_CSCMR2_SET(BM_CCM_CSCMR2_LDB_DI0_IPU_DIV | BM_CCM_CSCMR2_LDB_DI1_IPU_DIV); // ldb_di0 divided by 3.5 HW_CCM_CSCDR2.B.IPU2_DI0_CLK_SEL = 3; // derive clock from ldb_di0_clk HW_CCM_CSCDR2.B.IPU2_DI1_CLK_SEL = 3; // derive clock from 352M PFD }