Lines Matching +full:ingenic +full:- +full:tcu
1 // SPDX-License-Identifier: GPL-2.0
3 * JZ47xx SoCs TCU Operating System Timer driver
11 #include <linux/mfd/ingenic-tcu.h>
25 * The TCU_REG_OST_CNT{L,R} from <linux/mfd/ingenic-tcu.h> are only for the
47 return readl(ingenic_ost->regs + OST_REG_CNTL); in ingenic_ost_read_cntl()
53 return readl(ingenic_ost->regs + OST_REG_CNTH); in ingenic_ost_read_cnth()
69 struct device *dev = &pdev->dev; in ingenic_ost_probe()
78 return -EINVAL; in ingenic_ost_probe()
82 return -ENOMEM; in ingenic_ost_probe()
86 ost->regs = devm_platform_ioremap_resource(pdev, 0); in ingenic_ost_probe()
87 if (IS_ERR(ost->regs)) in ingenic_ost_probe()
88 return PTR_ERR(ost->regs); in ingenic_ost_probe()
90 map = device_node_to_regmap(dev->parent->of_node); in ingenic_ost_probe()
96 ost->clk = devm_clk_get_enabled(dev, "ost"); in ingenic_ost_probe()
97 if (IS_ERR(ost->clk)) in ingenic_ost_probe()
98 return PTR_ERR(ost->clk); in ingenic_ost_probe()
101 if (soc_info->is64bit) in ingenic_ost_probe()
109 rate = clk_get_rate(ost->clk); in ingenic_ost_probe()
111 /* Enable OST TCU channel */ in ingenic_ost_probe()
114 cs = &ost->cs; in ingenic_ost_probe()
115 cs->name = "ingenic-ost"; in ingenic_ost_probe()
116 cs->rating = 320; in ingenic_ost_probe()
117 cs->flags = CLOCK_SOURCE_IS_CONTINUOUS; in ingenic_ost_probe()
118 cs->mask = CLOCKSOURCE_MASK(32); in ingenic_ost_probe()
120 if (soc_info->is64bit) in ingenic_ost_probe()
121 cs->read = ingenic_ost_clocksource_readl; in ingenic_ost_probe()
123 cs->read = ingenic_ost_clocksource_readh; in ingenic_ost_probe()
131 if (soc_info->is64bit) in ingenic_ost_probe()
143 clk_disable(ost->clk); in ingenic_ost_suspend()
152 return clk_enable(ost->clk); in ingenic_ost_resume()
170 { .compatible = "ingenic,jz4725b-ost", .data = &jz4725b_ost_soc_info, },
171 { .compatible = "ingenic,jz4760b-ost", .data = &jz4760b_ost_soc_info, },
172 { .compatible = "ingenic,jz4770-ost", .data = &jz4760b_ost_soc_info, },
178 .name = "ingenic-ost",