~ubuntu-branches/ubuntu/lucid/linux-rt/lucid

« back to all changes in this revision

Viewing changes to arch/arm/mach-mmp/irq.c

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2009-08-05 23:00:52 UTC
  • Revision ID: james.westby@ubuntu.com-20090805230052-7xedvqcyk9dnnxb2
Tags: 2.6.31-1.1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  linux/arch/arm/mach-mmp/irq.c
 
3
 *
 
4
 *  Generic IRQ handling, GPIO IRQ demultiplexing, etc.
 
5
 *
 
6
 *  Author:     Bin Yang <bin.yang@marvell.com>
 
7
 *  Created:    Sep 30, 2008
 
8
 *  Copyright:  Marvell International Ltd.
 
9
 *
 
10
 *  This program is free software; you can redistribute it and/or modify
 
11
 *  it under the terms of the GNU General Public License version 2 as
 
12
 *  published by the Free Software Foundation.
 
13
 */
 
14
 
 
15
#include <linux/init.h>
 
16
#include <linux/irq.h>
 
17
#include <linux/io.h>
 
18
 
 
19
#include <mach/regs-icu.h>
 
20
 
 
21
#include "common.h"
 
22
 
 
23
#define IRQ_ROUTE_TO_AP         (ICU_INT_CONF_AP_INT | ICU_INT_CONF_IRQ)
 
24
 
 
25
#define PRIORITY_DEFAULT        0x1
 
26
#define PRIORITY_NONE           0x0     /* means IRQ disabled */
 
27
 
 
28
static void icu_mask_irq(unsigned int irq)
 
29
{
 
30
        __raw_writel(PRIORITY_NONE, ICU_INT_CONF(irq));
 
31
}
 
32
 
 
33
static void icu_unmask_irq(unsigned int irq)
 
34
{
 
35
        __raw_writel(IRQ_ROUTE_TO_AP | PRIORITY_DEFAULT, ICU_INT_CONF(irq));
 
36
}
 
37
 
 
38
static struct irq_chip icu_irq_chip = {
 
39
        .name   = "icu_irq",
 
40
        .ack    = icu_mask_irq,
 
41
        .mask   = icu_mask_irq,
 
42
        .unmask = icu_unmask_irq,
 
43
};
 
44
 
 
45
void __init icu_init_irq(void)
 
46
{
 
47
        int irq;
 
48
 
 
49
        for (irq = 0; irq < 64; irq++) {
 
50
                icu_mask_irq(irq);
 
51
                set_irq_chip(irq, &icu_irq_chip);
 
52
                set_irq_handler(irq, handle_level_irq);
 
53
                set_irq_flags(irq, IRQF_VALID);
 
54
        }
 
55
}