18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * linux/arch/arm/mach-footbridge/isa-timer.c 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 1998 Russell King. 68c2ecf20Sopenharmony_ci * Copyright (C) 1998 Phil Blundell 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci#include <linux/clockchips.h> 98c2ecf20Sopenharmony_ci#include <linux/i8253.h> 108c2ecf20Sopenharmony_ci#include <linux/init.h> 118c2ecf20Sopenharmony_ci#include <linux/interrupt.h> 128c2ecf20Sopenharmony_ci#include <linux/irq.h> 138c2ecf20Sopenharmony_ci#include <linux/spinlock.h> 148c2ecf20Sopenharmony_ci#include <linux/timex.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#include <asm/irq.h> 178c2ecf20Sopenharmony_ci#include <asm/mach/time.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include "common.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_cistatic irqreturn_t pit_timer_interrupt(int irq, void *dev_id) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci struct clock_event_device *ce = dev_id; 248c2ecf20Sopenharmony_ci ce->event_handler(ce); 258c2ecf20Sopenharmony_ci return IRQ_HANDLED; 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_civoid __init isa_timer_init(void) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci clocksource_i8253_init(); 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci if (request_irq(i8253_clockevent.irq, pit_timer_interrupt, 338c2ecf20Sopenharmony_ci IRQF_TIMER | IRQF_IRQPOLL, "pit", &i8253_clockevent)) 348c2ecf20Sopenharmony_ci pr_err("Failed to request irq %d(pit)\n", i8253_clockevent.irq); 358c2ecf20Sopenharmony_ci clockevent_i8253_init(false); 368c2ecf20Sopenharmony_ci} 37