int spi_init_clk(void)
{
	int pclk = module_get_clock(APB_CLK_BASE),
		i, j;

	for(i = 2; i < 255; i += 2)
	  for(j = 0; j < 256; j++)
		if(pclk / (i * (j + 1)) <= SPI_CLK)
		  goto calc_finish;

calc_finish:
	if(i >= 255 || j >= 256) {
		printf("spi: calc clock failed(%d, %d), use default.\n", i, j);
		i = 2; j = 39;
	}

	printf("PCLK: %d, PS: %d, SCR: %d, Fout: %d\n", 
				pclk, i, j, pclk / (i * (j + 1)));

	writel(0, SSP_CR1_1);
	writel(0, SSP_IMSC_1);
	writel(i, SSP_CPSR_1);
	writel((j << 8) | (3 << 6) | (0 << 4) | (7 << 0), SSP_CR0_1);
	writel((1 << 3) | (0 << 2) | (1 << 1) | (0 << 0), SSP_CR1_1);

	return 0;
}
Exemple #2
0
void tvif_set_clk(int num)
{
	uint32_t val;
	int clk;
	
	if (num)
		clk = module_get_clock("ids1-eitf");
	else
		clk = module_get_clock("ids0-eitf");

#ifndef CONFIG_COMPILE_FPGA
	val = (1 << TVIF_CLK_CFG_EN_CLOCK) | (0 << TVIF_CLK_CFG_PB_CLOCK) |
		  (0 << TVIF_CLK_CFG_INV_CLOCK) | (1 << TVIF_CLK_CFG_SEL_CLOCK) |
		  ((clk / 27000000 - 1) << TVIF_CLK_CFG_DIVER_CLOCK);
#else
	val = (1 << TVIF_CLK_CFG_EN_CLOCK) | (0 << TVIF_CLK_CFG_PB_CLOCK) |
		  (0 << TVIF_CLK_CFG_INV_CLOCK) | (1 << TVIF_CLK_CFG_SEL_CLOCK) |
		  (0 << TVIF_CLK_CFG_DIVER_CLOCK);
#endif
	tvif_writel(TVIF_CLK_CFG_ADDR, val, 0, 32);
}