Lines Matching refs:tcu

46 	struct ingenic_tcu *tcu;  member
69 struct ingenic_tcu *tcu = tcu_clk->tcu; in ingenic_tcu_enable() local
71 regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit)); in ingenic_tcu_enable()
80 struct ingenic_tcu *tcu = tcu_clk->tcu; in ingenic_tcu_disable() local
82 regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit)); in ingenic_tcu_disable()
91 regmap_read(tcu_clk->tcu->map, TCU_REG_TSR, &value); in ingenic_tcu_is_enabled()
100 struct ingenic_tcu *tcu = tcu_clk->tcu; in ingenic_tcu_enable_regs() local
108 regmap_write(tcu->map, TCU_REG_TSCR, BIT(info->gate_bit)); in ingenic_tcu_enable_regs()
117 struct ingenic_tcu *tcu = tcu_clk->tcu; in ingenic_tcu_disable_regs() local
119 regmap_write(tcu->map, TCU_REG_TSSR, BIT(info->gate_bit)); in ingenic_tcu_disable_regs()
129 ret = regmap_read(tcu_clk->tcu->map, info->tcsr_reg, &val); in ingenic_tcu_get_parent()
144 ret = regmap_update_bits(tcu_clk->tcu->map, info->tcsr_reg, in ingenic_tcu_set_parent()
162 ret = regmap_read(tcu_clk->tcu->map, info->tcsr_reg, &prescale); in ingenic_tcu_recalc_rate()
206 ret = regmap_update_bits(tcu_clk->tcu->map, info->tcsr_reg, in ingenic_tcu_set_rate()
265 static int __init ingenic_tcu_register_clock(struct ingenic_tcu *tcu, in ingenic_tcu_register_clock() argument
280 tcu_clk->tcu = tcu; in ingenic_tcu_register_clock()
284 regmap_update_bits(tcu->map, info->tcsr_reg, 0xffff, BIT(parent)); in ingenic_tcu_register_clock()
335 struct ingenic_tcu *tcu; in ingenic_tcu_probe() local
344 tcu = kzalloc(sizeof(*tcu), GFP_KERNEL); in ingenic_tcu_probe()
345 if (!tcu) in ingenic_tcu_probe()
348 tcu->map = map; in ingenic_tcu_probe()
349 tcu->soc_info = id->data; in ingenic_tcu_probe()
351 if (tcu->soc_info->has_tcu_clk) { in ingenic_tcu_probe()
352 tcu->clk = of_clk_get_by_name(np, "tcu"); in ingenic_tcu_probe()
353 if (IS_ERR(tcu->clk)) { in ingenic_tcu_probe()
354 ret = PTR_ERR(tcu->clk); in ingenic_tcu_probe()
363 if (tcu->soc_info->allow_missing_tcu_clk && ret == -EINVAL) { in ingenic_tcu_probe()
365 tcu->clk = NULL; in ingenic_tcu_probe()
371 ret = clk_prepare_enable(tcu->clk); in ingenic_tcu_probe()
379 tcu->clocks = kzalloc(struct_size(tcu->clocks, hws, TCU_CLK_COUNT), in ingenic_tcu_probe()
381 if (!tcu->clocks) { in ingenic_tcu_probe()
386 tcu->clocks->num = TCU_CLK_COUNT; in ingenic_tcu_probe()
388 for (i = 0; i < tcu->soc_info->num_channels; i++) { in ingenic_tcu_probe()
389 ret = ingenic_tcu_register_clock(tcu, i, TCU_PARENT_EXT, in ingenic_tcu_probe()
391 tcu->clocks); in ingenic_tcu_probe()
405 ret = ingenic_tcu_register_clock(tcu, TCU_CLK_WDT, TCU_PARENT_RTC, in ingenic_tcu_probe()
407 tcu->clocks); in ingenic_tcu_probe()
413 if (tcu->soc_info->has_ost) { in ingenic_tcu_probe()
414 ret = ingenic_tcu_register_clock(tcu, TCU_CLK_OST, in ingenic_tcu_probe()
417 tcu->clocks); in ingenic_tcu_probe()
424 ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, tcu->clocks); in ingenic_tcu_probe()
430 ingenic_tcu = tcu; in ingenic_tcu_probe()
435 if (tcu->soc_info->has_ost) in ingenic_tcu_probe()
436 clk_hw_unregister(tcu->clocks->hws[i + 1]); in ingenic_tcu_probe()
438 clk_hw_unregister(tcu->clocks->hws[i]); in ingenic_tcu_probe()
440 for (i = 0; i < tcu->clocks->num; i++) in ingenic_tcu_probe()
441 if (tcu->clocks->hws[i]) in ingenic_tcu_probe()
442 clk_hw_unregister(tcu->clocks->hws[i]); in ingenic_tcu_probe()
443 kfree(tcu->clocks); in ingenic_tcu_probe()
445 if (tcu->clk) in ingenic_tcu_probe()
446 clk_disable_unprepare(tcu->clk); in ingenic_tcu_probe()
448 if (tcu->clk) in ingenic_tcu_probe()
449 clk_put(tcu->clk); in ingenic_tcu_probe()
451 kfree(tcu); in ingenic_tcu_probe()
457 struct ingenic_tcu *tcu = ingenic_tcu; in tcu_pm_suspend() local
459 if (tcu->clk) in tcu_pm_suspend()
460 clk_disable(tcu->clk); in tcu_pm_suspend()
467 struct ingenic_tcu *tcu = ingenic_tcu; in tcu_pm_resume() local
469 if (tcu->clk) in tcu_pm_resume()
470 clk_enable(tcu->clk); in tcu_pm_resume()