Lines Matching refs:tc
259 static int __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx) in setup_clkevents() argument
262 struct clk *t2_clk = tc->clk[2]; in setup_clkevents()
263 int irq = tc->irq[2]; in setup_clkevents()
265 ret = clk_prepare_enable(tc->slow_clk); in setup_clkevents()
272 clk_disable_unprepare(tc->slow_clk); in setup_clkevents()
278 clkevt.regs = tc->regs; in setup_clkevents()
288 clk_disable_unprepare(tc->slow_clk); in setup_clkevents()
299 static int __init setup_clkevents(struct atmel_tc *tc, int clk32k_divisor_idx) in setup_clkevents() argument
307 static void __init tcb_setup_dual_chan(struct atmel_tc *tc, int mck_divisor_idx) in tcb_setup_dual_chan() argument
335 static void __init tcb_setup_single_chan(struct atmel_tc *tc, int mck_divisor_idx) in tcb_setup_single_chan() argument
359 struct atmel_tc tc; in tcb_clksrc_init() local
374 tc.regs = of_iomap(node->parent, 0); in tcb_clksrc_init()
375 if (!tc.regs) in tcb_clksrc_init()
382 tc.slow_clk = of_clk_get_by_name(node->parent, "slow_clk"); in tcb_clksrc_init()
383 if (IS_ERR(tc.slow_clk)) in tcb_clksrc_init()
384 return PTR_ERR(tc.slow_clk); in tcb_clksrc_init()
386 tc.clk[0] = t0_clk; in tcb_clksrc_init()
387 tc.clk[1] = of_clk_get_by_name(node->parent, "t1_clk"); in tcb_clksrc_init()
388 if (IS_ERR(tc.clk[1])) in tcb_clksrc_init()
389 tc.clk[1] = t0_clk; in tcb_clksrc_init()
390 tc.clk[2] = of_clk_get_by_name(node->parent, "t2_clk"); in tcb_clksrc_init()
391 if (IS_ERR(tc.clk[2])) in tcb_clksrc_init()
392 tc.clk[2] = t0_clk; in tcb_clksrc_init()
394 tc.irq[2] = of_irq_get(node->parent, 2); in tcb_clksrc_init()
395 if (tc.irq[2] <= 0) { in tcb_clksrc_init()
396 tc.irq[2] = of_irq_get(node->parent, 0); in tcb_clksrc_init()
397 if (tc.irq[2] <= 0) in tcb_clksrc_init()
404 for (i = 0; i < ARRAY_SIZE(tc.irq); i++) in tcb_clksrc_init()
405 writel(ATMEL_TC_ALL_IRQ, tc.regs + ATMEL_TC_REG(i, IDR)); in tcb_clksrc_init()
440 tcaddr = tc.regs; in tcb_clksrc_init()
446 tcb_setup_single_chan(&tc, best_divisor_idx); in tcb_clksrc_init()
453 ret = clk_prepare_enable(tc.clk[1]); in tcb_clksrc_init()
459 tcb_setup_dual_chan(&tc, best_divisor_idx); in tcb_clksrc_init()
470 ret = setup_clkevents(&tc, clk32k_divisor_idx); in tcb_clksrc_init()
486 clk_disable_unprepare(tc.clk[1]); in tcb_clksrc_init()