Lines Matching refs:rt

38 static inline void rt_timer_w32(struct rt_timer *rt, u8 reg, u32 val)  in rt_timer_w32()  argument
40 __raw_writel(val, rt->membase + reg); in rt_timer_w32()
43 static inline u32 rt_timer_r32(struct rt_timer *rt, u8 reg) in rt_timer_r32() argument
45 return __raw_readl(rt->membase + reg); in rt_timer_r32()
50 struct rt_timer *rt = (struct rt_timer *) _rt; in rt_timer_irq() local
52 rt_timer_w32(rt, TIMER_REG_TMR0LOAD, rt->timer_freq / rt->timer_div); in rt_timer_irq()
53 rt_timer_w32(rt, TIMER_REG_TMRSTAT, TMRSTAT_TMR0INT); in rt_timer_irq()
59 static int rt_timer_request(struct rt_timer *rt) in rt_timer_request() argument
61 int err = request_irq(rt->irq, rt_timer_irq, 0, in rt_timer_request()
62 dev_name(rt->dev), rt); in rt_timer_request()
64 dev_err(rt->dev, "failed to request irq\n"); in rt_timer_request()
67 rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); in rt_timer_request()
72 static void rt_timer_free(struct rt_timer *rt) in rt_timer_free() argument
74 free_irq(rt->irq, rt); in rt_timer_free()
77 static int rt_timer_config(struct rt_timer *rt, unsigned long divisor) in rt_timer_config() argument
79 if (rt->timer_freq < divisor) in rt_timer_config()
80 rt->timer_div = rt->timer_freq; in rt_timer_config()
82 rt->timer_div = divisor; in rt_timer_config()
84 rt_timer_w32(rt, TIMER_REG_TMR0LOAD, rt->timer_freq / rt->timer_div); in rt_timer_config()
89 static int rt_timer_enable(struct rt_timer *rt) in rt_timer_enable() argument
93 rt_timer_w32(rt, TIMER_REG_TMR0LOAD, rt->timer_freq / rt->timer_div); in rt_timer_enable()
95 t = rt_timer_r32(rt, TIMER_REG_TMR0CTL); in rt_timer_enable()
97 rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); in rt_timer_enable()
102 static void rt_timer_disable(struct rt_timer *rt) in rt_timer_disable() argument
106 t = rt_timer_r32(rt, TIMER_REG_TMR0CTL); in rt_timer_disable()
108 rt_timer_w32(rt, TIMER_REG_TMR0CTL, t); in rt_timer_disable()
114 struct rt_timer *rt; in rt_timer_probe() local
117 rt = devm_kzalloc(&pdev->dev, sizeof(*rt), GFP_KERNEL); in rt_timer_probe()
118 if (!rt) { in rt_timer_probe()
123 rt->irq = platform_get_irq(pdev, 0); in rt_timer_probe()
124 if (!rt->irq) { in rt_timer_probe()
129 rt->membase = devm_ioremap_resource(&pdev->dev, res); in rt_timer_probe()
130 if (IS_ERR(rt->membase)) in rt_timer_probe()
131 return PTR_ERR(rt->membase); in rt_timer_probe()
139 rt->timer_freq = clk_get_rate(clk) / TMR0CTL_PRESCALE_DIV; in rt_timer_probe()
140 if (!rt->timer_freq) in rt_timer_probe()
143 rt->dev = &pdev->dev; in rt_timer_probe()
144 platform_set_drvdata(pdev, rt); in rt_timer_probe()
146 rt_timer_request(rt); in rt_timer_probe()
147 rt_timer_config(rt, 2); in rt_timer_probe()
148 rt_timer_enable(rt); in rt_timer_probe()
150 dev_info(&pdev->dev, "maximum frequency is %luHz\n", rt->timer_freq); in rt_timer_probe()
157 struct rt_timer *rt = platform_get_drvdata(pdev); in rt_timer_remove() local
159 rt_timer_disable(rt); in rt_timer_remove()
160 rt_timer_free(rt); in rt_timer_remove()