49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
|
/*
|
||
|
* SDK7786 FPGA IRQ Controller Support.
|
||
|
*
|
||
|
* Copyright (C) 2010 Matt Fleming
|
||
|
* Copyright (C) 2010 Paul Mundt
|
||
|
*
|
||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||
|
* License. See the file "COPYING" in the main directory of this archive
|
||
|
* for more details.
|
||
|
*/
|
||
|
#include <linux/irq.h>
|
||
|
#include <mach/fpga.h>
|
||
|
#include <mach/irq.h>
|
||
|
|
||
|
enum {
|
||
|
ATA_IRQ_BIT = 1,
|
||
|
SPI_BUSY_BIT = 2,
|
||
|
LIRQ5_BIT = 3,
|
||
|
LIRQ6_BIT = 4,
|
||
|
LIRQ7_BIT = 5,
|
||
|
LIRQ8_BIT = 6,
|
||
|
KEY_IRQ_BIT = 7,
|
||
|
PEN_IRQ_BIT = 8,
|
||
|
ETH_IRQ_BIT = 9,
|
||
|
RTC_ALARM_BIT = 10,
|
||
|
CRYSTAL_FAIL_BIT = 12,
|
||
|
ETH_PME_BIT = 14,
|
||
|
};
|
||
|
|
||
|
void __init sdk7786_init_irq(void)
|
||
|
{
|
||
|
unsigned int tmp;
|
||
|
|
||
|
/* Enable priority encoding for all IRLs */
|
||
|
fpga_write_reg(fpga_read_reg(INTMSR) | 0x0303, INTMSR);
|
||
|
|
||
|
/* Clear FPGA interrupt status registers */
|
||
|
fpga_write_reg(0x0000, INTASR);
|
||
|
fpga_write_reg(0x0000, INTBSR);
|
||
|
|
||
|
/* Unmask FPGA interrupts */
|
||
|
tmp = fpga_read_reg(INTAMR);
|
||
|
tmp &= ~(1 << ETH_IRQ_BIT);
|
||
|
fpga_write_reg(tmp, INTAMR);
|
||
|
|
||
|
plat_irq_setup_pins(IRQ_MODE_IRL7654_MASK);
|
||
|
plat_irq_setup_pins(IRQ_MODE_IRL3210_MASK);
|
||
|
}
|