192
193
.irq_ack = s3c2416_irq_uart3_ack,
196
/* second interrupt register */
198
static inline void s3c2416_irq_ack_second(struct irq_data *data)
200
unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D);
202
__raw_writel(bitval, S3C2416_SRCPND2);
203
__raw_writel(bitval, S3C2416_INTPND2);
206
static void s3c2416_irq_mask_second(struct irq_data *data)
208
unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D);
211
mask = __raw_readl(S3C2416_INTMSK2);
213
__raw_writel(mask, S3C2416_INTMSK2);
216
static void s3c2416_irq_unmask_second(struct irq_data *data)
218
unsigned long bitval = 1UL << (data->irq - IRQ_S3C2416_2D);
221
mask = __raw_readl(S3C2416_INTMSK2);
223
__raw_writel(mask, S3C2416_INTMSK2);
226
struct irq_chip s3c2416_irq_second = {
227
.irq_ack = s3c2416_irq_ack_second,
228
.irq_mask = s3c2416_irq_mask_second,
229
.irq_unmask = s3c2416_irq_unmask_second,
195
233
/* IRQ initialisation code */
197
235
static int __init s3c2416_add_sub(unsigned int base,
254
static void __init s3c2416_irq_add_second(void)
261
/* first, clear all interrupts pending... */
263
for (i = 0; i < 4; i++) {
264
pend = __raw_readl(S3C2416_INTPND2);
266
if (pend == 0 || pend == last)
269
__raw_writel(pend, S3C2416_SRCPND2);
270
__raw_writel(pend, S3C2416_INTPND2);
271
printk(KERN_INFO "irq: clearing pending status %08x\n",
276
for (irqno = IRQ_S3C2416_2D; irqno <= IRQ_S3C2416_I2S1; irqno++) {
278
case IRQ_S3C2416_RESERVED2:
279
case IRQ_S3C2416_RESERVED3:
283
irq_set_chip_and_handler(irqno, &s3c2416_irq_second,
285
set_irq_flags(irqno, IRQF_VALID);
216
290
static int __init s3c2416_irq_add(struct device *dev,
217
291
struct subsys_interface *sif)
249
325
arch_initcall(s3c2416_irq_init);
328
static struct sleep_save irq_save[] = {
329
SAVE_ITEM(S3C2416_INTMSK2),
332
int s3c2416_irq_suspend(void)
334
s3c_pm_do_save(irq_save, ARRAY_SIZE(irq_save));
339
void s3c2416_irq_resume(void)
341
s3c_pm_do_restore(irq_save, ARRAY_SIZE(irq_save));
344
struct syscore_ops s3c2416_irq_syscore_ops = {
345
.suspend = s3c2416_irq_suspend,
346
.resume = s3c2416_irq_resume,