/** * @brief: set sensor clock * * @author: caolianming * @date: 2014-01-06 * @param [in] cis_sclk: sensor work clock */ static void set_sensor_cis_sclk(unsigned int cis_sclk) { unsigned long regval; unsigned int cis_sclk_div; unsigned int peri_pll = ak_get_peri_pll_clk()/1000000; cis_sclk_div = peri_pll/cis_sclk - 1; regval = REG32(CLOCK_PERI_PLL_CTRL2); regval &= ~(0x3f << 10); regval |= (cis_sclk_div << 10); REG32(CLOCK_PERI_PLL_CTRL2) = (1 << 19)|regval; isp_dbg("%s() cis_sclk=%dMHz peri_pll=%dMHz cis_sclk_div=%d\n", __func__, cis_sclk, peri_pll, cis_sclk_div); }
/* initalise all the clocks */ static int __init ak39xx_init_clocks(void) { clk_default_setrate(&clk_cpu_pll, ak_get_cpu_pll_clk()); clk_default_setrate(&clk_asic_pll, ak_get_asic_pll_clk()); clk_default_setrate(&clk_peri_pll, ak_get_peri_pll_clk()); clk_default_setrate(&clk_cpu, ak_get_cpu_clk()); clk_default_setrate(&clk_ahb, ak_get_ahb_clk()); clk_default_setrate(&clk_mem, ak_get_mem_clk()); clk_default_setrate(&clk_vclk, ak_get_vclk()); clk_default_setrate(&clk_asic, ak_get_asic_clk()); printk("AK39 clocks: CPU %ldMHz, MEM %ldMHz, ASIC %ldMHz\n", clk_cpu.rate/MHz, clk_mem.rate/MHz, clk_asic.rate/MHz); /* register clocks */ if (ak39xx_register_clock(&clk_xtal_12M) < 0) printk(KERN_ERR "failed to register 12M xtal\n"); if (ak39xx_register_clock(&clk_xtal_25M) < 0) printk(KERN_ERR "failed to register 25M xtal\n"); if (ak39xx_register_clock(&clk_xtal_32K) < 0) printk(KERN_ERR "failed to register 32K xtal\n"); if (ak39xx_register_clock(&clk_cpu_pll) < 0) printk(KERN_ERR "failed to register cpu pll clk\n"); if (ak39xx_register_clock(&clk_asic_pll) < 0) printk(KERN_ERR "failed to register asic pll clk\n"); if (ak39xx_register_clock(&clk_peri_pll) < 0) printk(KERN_ERR "failed to register peri pll clk\n"); if (ak39xx_register_clock(&clk_cpu) < 0) printk(KERN_ERR "failed to register cpu clk\n"); if (ak39xx_register_clock(&clk_ahb) < 0) printk(KERN_ERR "failed to register AHB clk\n"); if (ak39xx_register_clock(&clk_mem) < 0) printk(KERN_ERR "failed to register memory clk\n"); if (ak39xx_register_clock(&clk_vclk) < 0) printk(KERN_ERR "failed to register vclk\n"); if (ak39xx_register_clock(&clk_asic) < 0) printk(KERN_ERR "failed to register asic clk\n"); if (ak39xx_register_clock(&clk_opclk) < 0) printk(KERN_ERR "failed to register opclk\n"); ak39xx_register_clocks(init_clocks, ARRAY_SIZE(init_clocks)); #if 0 printk("ak39xx_init_clocks: clk gate reg=0x%p\n", REG32(CLOCK_GATE_CTRL1)); /* * Enable L2buf clock by default, Disable all other clocks. * uart0 clock has been open in uncompreess.h */ int i; for (i = 0; i < ARRAY_SIZE(init_clocks); i++) { if (strcmp(init_clocks[i].name, "uart0") == 0) { clk_enable(&init_clocks[i]); } } #endif return 0; }