1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* |
3 | * arch/sh/boards/mach-landisk/irq.c |
4 | * |
5 | * I-O DATA Device, Inc. LANDISK Support |
6 | * |
7 | * Copyright (C) 2005-2007 kogiidena |
8 | * Copyright (C) 2011 Nobuhiro Iwamatsu |
9 | * |
10 | * Copyright (C) 2001 Ian da Silva, Jeremy Siegel |
11 | * Based largely on io_se.c. |
12 | */ |
13 | |
14 | #include <linux/init.h> |
15 | #include <linux/irq.h> |
16 | #include <linux/interrupt.h> |
17 | #include <linux/io.h> |
18 | #include <mach-landisk/mach/iodata_landisk.h> |
19 | |
20 | enum { |
21 | UNUSED = 0, |
22 | |
23 | PCI_INTA, /* PCI int A */ |
24 | PCI_INTB, /* PCI int B */ |
25 | PCI_INTC, /* PCI int C */ |
26 | PCI_INTD, /* PCI int D */ |
27 | ATA, /* ATA */ |
28 | FATA, /* CF */ |
29 | POWER, /* Power switch */ |
30 | BUTTON, /* Button switch */ |
31 | }; |
32 | |
33 | /* Vectors for LANDISK */ |
34 | static struct intc_vect vectors_landisk[] __initdata = { |
35 | INTC_IRQ(PCI_INTA, IRQ_PCIINTA), |
36 | INTC_IRQ(PCI_INTB, IRQ_PCIINTB), |
37 | INTC_IRQ(PCI_INTC, IRQ_PCIINTC), |
38 | INTC_IRQ(PCI_INTD, IRQ_PCIINTD), |
39 | INTC_IRQ(ATA, IRQ_ATA), |
40 | INTC_IRQ(FATA, IRQ_FATA), |
41 | INTC_IRQ(POWER, IRQ_POWER), |
42 | INTC_IRQ(BUTTON, IRQ_BUTTON), |
43 | }; |
44 | |
45 | /* IRLMSK mask register layout for LANDISK */ |
46 | static struct intc_mask_reg mask_registers_landisk[] __initdata = { |
47 | { PA_IMASK, 0, 8, /* IRLMSK */ |
48 | { BUTTON, POWER, FATA, ATA, |
49 | PCI_INTD, PCI_INTC, PCI_INTB, PCI_INTA, |
50 | } |
51 | }, |
52 | }; |
53 | |
54 | static DECLARE_INTC_DESC(intc_desc_landisk, "landisk" , vectors_landisk, NULL, |
55 | mask_registers_landisk, NULL, NULL); |
56 | /* |
57 | * Initialize IRQ setting |
58 | */ |
59 | void __init init_landisk_IRQ(void) |
60 | { |
61 | register_intc_controller(&intc_desc_landisk); |
62 | __raw_writeb(val: 0x00, addr: PA_PWRINT_CLR); |
63 | } |
64 | |