void rct_pll_init(void) { g_ref_clk_hz = (u32) amb_get_reference_clock_frequency(HAL_BASE_VP); /* Set audio clock to 12.288 Mhz. */ if (amb_set_audio_clock_source(HAL_BASE_VP, AMB_PLL_REFERENCE_CLOCK_SOURCE_CLK_REF, 0) != AMB_HAL_SUCCESS) { DEBUG_MSG("amb_set_audio_clock_source() failed"); } if (amb_set_audio_clock_frequency(HAL_BASE_VP, 12288000) != AMB_HAL_SUCCESS) { DEBUG_MSG("amb_set_audio_clock_frequency() failed"); } }
void rct_set_audio_pll_hal(u32 clksrc, u32 mclk) { int chk_count = 0; amb_hal_success_t success; amb_clock_source_t clk_src_sel; switch (clksrc) { #if (CHIP_REV == A5S) case AMBARELLA_CLKSRC_SP_CLK: clk_src_sel = AMB_PLL_REFERENCE_CLOCK_SOURCE_SP_CLK; break; #endif case AMBARELLA_CLKSRC_CLK_SI: #if (CHIP_REV == S2) clk_src_sel = AMB_REFERENCE_CLOCK_SOURCE_CLK_SI; #else clk_src_sel = AMB_PLL_REFERENCE_CLOCK_SOURCE_CLK_SI; #endif break; case AMBARELLA_CLKSRC_LVDS_IDSP_SCLK: #if (CHIP_REV == S2) clk_src_sel = AMB_REFERENCE_CLOCK_SOURCE_LVDS_IDSP_SCLK; #else clk_src_sel = AMB_PLL_REFERENCE_CLOCK_SOURCE_LVDS_IDSP_SCLK; #endif break; case AMBARELLA_CLKSRC_EXTERNAL: clk_src_sel = AMB_EXTERNAL_CLOCK_SOURCE; break; default: case AMBARELLA_CLKSRC_ONCHIP: #if (CHIP_REV == S2) clk_src_sel = AMB_REFERENCE_CLOCK_SOURCE_CLK_REF; #else clk_src_sel = AMB_PLL_REFERENCE_CLOCK_SOURCE_CLK_REF; #endif break; } #if (CHIP_REV == S2) if (clk_src_sel == AMB_REFERENCE_CLOCK_SOURCE_CLK_SI || clk_src_sel == AMB_REFERENCE_CLOCK_SOURCE_LVDS_IDSP_SCLK) #else if (clk_src_sel == AMB_PLL_REFERENCE_CLOCK_SOURCE_CLK_SI || clk_src_sel == AMB_PLL_REFERENCE_CLOCK_SOURCE_LVDS_IDSP_SCLK) #endif { success = amb_set_audio_clock_source(HAL_BASE_VP, clk_src_sel, mclk); } else { success = amb_set_audio_clock_source(HAL_BASE_VP, clk_src_sel, 0); } if (success == AMB_HAL_SUCCESS) { if(clk_src_sel != AMB_EXTERNAL_CLOCK_SOURCE) { success = amb_set_audio_clock_frequency(HAL_BASE_VP, mclk); while (success == AMB_HAL_RETRY) { // do something else or sleep mdelay(10); chk_count ++; success = amb_set_audio_clock_frequency(HAL_BASE_VP, mclk); if (chk_count == 100) { printk("a previous audio pll frequency change request is still outstanding"); break; } }; if (success == AMB_HAL_FAIL) printk("new audio pll frequency requested is not supported"); } } else { printk("new audio pll reference clock source is not supported"); } }