static unsigned long clk_get_rate_mclk(struct clk *clk) { u16 val; val = syscon_clk_get_rate(); switch (val) { case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: return 13000000; case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: { u16 val = readw(U300_SYSCON_VBASE + U300_SYSCON_MMF0R) & U300_SYSCON_MMF0R_MASK; switch (val) { case 0x0054: return 18900000; case 0x0044: return 20800000; case 0x0043: return 23100000; case 0x0033: return 26000000; case 0x0032: return 29700000; case 0x0022: return 34700000; case 0x0021: return 41600000; case 0x0011: return 52000000; case 0x0000: return 104000000; default: break; } } default: break; } return clk->rate; }
static unsigned long clk_get_rate_i2s_i2c_spi(struct clk *clk) { u16 val; val = syscon_clk_get_rate(); switch (val) { case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: return 13000000; case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: return 26000000; default: break; } return clk->rate; }
static unsigned long clk_get_rate_mclk(struct clk *clk) { u16 val; val = syscon_clk_get_rate(); switch (val) { case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW_POWER: /* * Here, the 208 MHz PLL gets shut down and the always * on 13 MHz PLL used for RTC etc kicks into use * instead. */ return 13000000; case U300_SYSCON_CCR_CLKING_PERFORMANCE_LOW: case U300_SYSCON_CCR_CLKING_PERFORMANCE_INTERMEDIATE: case U300_SYSCON_CCR_CLKING_PERFORMANCE_HIGH: case U300_SYSCON_CCR_CLKING_PERFORMANCE_BEST: { /* * This clock is under program control. The register is * divided in two nybbles, bit 7-4 gives cycles-1 to count * high, bit 3-0 gives cycles-1 to count low. Distribute * these with no more than 1 cycle difference between * low and high and add low and high to get the actual * divisor. The base PLL is 208 MHz. Writing 0x00 will * divide by 1 and 1 so the highest frequency possible * is 104 MHz. * * e.g. 0x54 => * f = 208 / ((5+1) + (4+1)) = 208 / 11 = 18.9 MHz */ u16 val = readw(U300_SYSCON_VBASE + U300_SYSCON_MMF0R) & U300_SYSCON_MMF0R_MASK; switch (val) { case 0x0054: return 18900000; case 0x0044: return 20800000; case 0x0043: return 23100000; case 0x0033: return 26000000; case 0x0032: return 29700000; case 0x0022: return 34700000; case 0x0021: return 41600000; case 0x0011: return 52000000; case 0x0000: return 104000000; default: break; } } default: break; } return clk->rate; }