|
#define CPLD_BANK0_BASE (0XE0000000)
static int __init s3c2410_key_init(void)
{
int ret;
// 初始化Bank6设置
unsigned int bswcon = inl((unsigned int)S3C2410_BWSCON);
bswcon = (bswcon & 0xFFFCFFFF) | 0x00000000;
outl(bswcon,(unsigned int)S3C2410_BWSCON);
bswcon = inl((unsigned int)S3C2410_BWSCON);
注释说初始化bank6,bank6不是27-24吗
outb(0xFF,0xE0000000+0x02600000);
outb(0xF9,0xE0000000+0x02600000);
.......
static irqreturn_t key_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned char vector,tmp;
vector = inb(CPLD_BANK0_BASE + 0x02200000);
tmp = inb(CPLD_BANK0_BASE + 0x02600000);
if(0 == (vector & 0x4)){
printk("key1\n");
outb(tmp | (1<<2), CPLD_BANK0_BASE+0x02600000);
inb(CPLD_BANK0_BASE + 0x02600000);
outb(tmp & (~(1<<2)), CPLD_BANK0_BASE+0x02600000);
}
else if(0 == (vector & 0x2)){
printk("key2\n");
outb(tmp | (1<<1), CPLD_BANK0_BASE+0x02600000);
inb(CPLD_BANK0_BASE + 0x02600000);
outb(tmp & (~(1<<1)), CPLD_BANK0_BASE+0x02600000);
}
return IRQ_HANDLED;
}
|
|