Lines Matching refs:pwm

83 static struct samsung_pwm_clocksource pwm;  variable
96 reg = readl(pwm.base + REG_TCFG0); in samsung_timer_set_prescale()
99 writel(reg, pwm.base + REG_TCFG0); in samsung_timer_set_prescale()
111 bits = (fls(divisor) - 1) - pwm.variant.div_base; in samsung_timer_set_divisor()
115 reg = readl(pwm.base + REG_TCFG1); in samsung_timer_set_divisor()
118 writel(reg, pwm.base + REG_TCFG1); in samsung_timer_set_divisor()
133 tcon = __raw_readl(pwm.base + REG_TCON); in samsung_time_stop()
135 __raw_writel(tcon, pwm.base + REG_TCON); in samsung_time_stop()
151 tcon = __raw_readl(pwm.base + REG_TCON); in samsung_time_setup()
156 __raw_writel(tcnt, pwm.base + REG_TCNTB(channel)); in samsung_time_setup()
157 __raw_writel(tcnt, pwm.base + REG_TCMPB(channel)); in samsung_time_setup()
158 __raw_writel(tcon, pwm.base + REG_TCON); in samsung_time_setup()
173 tcon = __raw_readl(pwm.base + REG_TCON); in samsung_time_start()
183 __raw_writel(tcon, pwm.base + REG_TCON); in samsung_time_start()
204 samsung_time_setup(pwm.event_id, cycles); in samsung_set_next_event()
205 samsung_time_start(pwm.event_id, false); in samsung_set_next_event()
212 samsung_time_stop(pwm.event_id); in samsung_shutdown()
218 samsung_time_stop(pwm.event_id); in samsung_set_periodic()
219 samsung_time_setup(pwm.event_id, pwm.clock_count_per_tick - 1); in samsung_set_periodic()
220 samsung_time_start(pwm.event_id, true); in samsung_set_periodic()
226 samsung_timer_set_prescale(pwm.event_id, pwm.tscaler_div); in samsung_clockevent_resume()
227 samsung_timer_set_divisor(pwm.event_id, pwm.tdiv); in samsung_clockevent_resume()
229 if (pwm.variant.has_tint_cstat) { in samsung_clockevent_resume()
230 u32 mask = (1 << pwm.event_id); in samsung_clockevent_resume()
231 writel(mask | (mask << 5), pwm.base + REG_TINT_CSTAT); in samsung_clockevent_resume()
252 if (pwm.variant.has_tint_cstat) { in samsung_clock_event_isr()
253 u32 mask = (1 << pwm.event_id); in samsung_clock_event_isr()
254 writel(mask | (mask << 5), pwm.base + REG_TINT_CSTAT); in samsung_clock_event_isr()
275 pclk = clk_get_rate(pwm.timerclk); in samsung_clockevent_init()
277 samsung_timer_set_prescale(pwm.event_id, pwm.tscaler_div); in samsung_clockevent_init()
278 samsung_timer_set_divisor(pwm.event_id, pwm.tdiv); in samsung_clockevent_init()
280 clock_rate = pclk / (pwm.tscaler_div * pwm.tdiv); in samsung_clockevent_init()
281 pwm.clock_count_per_tick = clock_rate / HZ; in samsung_clockevent_init()
285 clock_rate, 1, pwm.tcnt_max); in samsung_clockevent_init()
287 irq_number = pwm.irq[pwm.event_id]; in samsung_clockevent_init()
290 if (pwm.variant.has_tint_cstat) { in samsung_clockevent_init()
291 u32 mask = (1 << pwm.event_id); in samsung_clockevent_init()
292 writel(mask | (mask << 5), pwm.base + REG_TINT_CSTAT); in samsung_clockevent_init()
298 samsung_time_stop(pwm.source_id); in samsung_clocksource_suspend()
303 samsung_timer_set_prescale(pwm.source_id, pwm.tscaler_div); in samsung_clocksource_resume()
304 samsung_timer_set_divisor(pwm.source_id, pwm.tdiv); in samsung_clocksource_resume()
306 samsung_time_setup(pwm.source_id, pwm.tcnt_max); in samsung_clocksource_resume()
307 samsung_time_start(pwm.source_id, true); in samsung_clocksource_resume()
312 return ~readl_relaxed(pwm.source_reg); in samsung_clocksource_read()
342 pclk = clk_get_rate(pwm.timerclk); in samsung_clocksource_init()
344 samsung_timer_set_prescale(pwm.source_id, pwm.tscaler_div); in samsung_clocksource_init()
345 samsung_timer_set_divisor(pwm.source_id, pwm.tdiv); in samsung_clocksource_init()
347 clock_rate = pclk / (pwm.tscaler_div * pwm.tdiv); in samsung_clocksource_init()
349 samsung_time_setup(pwm.source_id, pwm.tcnt_max); in samsung_clocksource_init()
350 samsung_time_start(pwm.source_id, true); in samsung_clocksource_init()
352 if (pwm.source_id == 4) in samsung_clocksource_init()
353 pwm.source_reg = pwm.base + 0x40; in samsung_clocksource_init()
355 pwm.source_reg = pwm.base + pwm.source_id * 0x0c + 0x14; in samsung_clocksource_init()
358 pwm.variant.bits, clock_rate); in samsung_clocksource_init()
360 samsung_clocksource.mask = CLOCKSOURCE_MASK(pwm.variant.bits); in samsung_clocksource_init()
368 clk_prepare_enable(pwm.timerclk); in samsung_timer_resources()
370 pwm.tcnt_max = (1UL << pwm.variant.bits) - 1; in samsung_timer_resources()
371 if (pwm.variant.bits == 16) { in samsung_timer_resources()
372 pwm.tscaler_div = 25; in samsung_timer_resources()
373 pwm.tdiv = 2; in samsung_timer_resources()
375 pwm.tscaler_div = 2; in samsung_timer_resources()
376 pwm.tdiv = 1; in samsung_timer_resources()
388 mask = ~pwm.variant.output_mask & ((1 << SAMSUNG_PWM_NUM) - 1); in _samsung_pwm_clocksource_init()
392 pwm.source_id = channel; in _samsung_pwm_clocksource_init()
398 pwm.event_id = channel; in _samsung_pwm_clocksource_init()
408 pwm.base = base; in samsung_pwm_clocksource_init()
409 memcpy(&pwm.variant, variant, sizeof(pwm.variant)); in samsung_pwm_clocksource_init()
410 memcpy(pwm.irq, irqs, SAMSUNG_PWM_NUM * sizeof(*irqs)); in samsung_pwm_clocksource_init()
412 pwm.timerclk = clk_get(NULL, "timers"); in samsung_pwm_clocksource_init()
413 if (IS_ERR(pwm.timerclk)) in samsung_pwm_clocksource_init()
428 memcpy(&pwm.variant, variant, sizeof(pwm.variant)); in samsung_pwm_alloc()
430 pwm.irq[i] = irq_of_parse_and_map(np, i); in samsung_pwm_alloc()
438 pwm.variant.output_mask |= 1 << val; in samsung_pwm_alloc()
441 pwm.base = of_iomap(np, 0); in samsung_pwm_alloc()
442 if (!pwm.base) { in samsung_pwm_alloc()
447 pwm.timerclk = of_clk_get_by_name(np, "timers"); in samsung_pwm_alloc()
448 if (IS_ERR(pwm.timerclk)) in samsung_pwm_alloc()