因项目需求远程遥控,准备在OK6410上使用红外线控制板子。由于板子上自带的红外所接引脚GPE1几乎等同于摆设,故需要外加红外头。在写驱动的时候发现中断组1~9无法request_irq成功,咨询官方技术支持和论坛没有任何答复,只好自己改内核了。仔细看源码,飞凌居然没初始化19组的中断,我和我的小伙伴都惊呆了
以下代码加入到irq-eint.c中
static inline void s3c_irq_eint_group_78_mask(struct irq_data *data)
{
u32 mask;
mask = __raw_readl(S3C64XX_EINT78MASK);
mask |= (u32)data->chip_data;
__raw_writel(mask, S3C64XX_EINT78MASK);
}
static void s3c_irq_eint_group_78_unmask(struct irq_data *data)
{
u32 mask;
mask = __raw_readl(S3C64XX_EINT78MASK);
mask &= ~((u32)data->chip_data);
__raw_writel(mask, S3C64XX_EINT78MASK);
}
static inline void s3c_irq_eint_group_78_ack(struct irq_data *data)
{
//__raw_writel(__raw_readl(S3C64XX_EINT78PEND)&~((u32)data->chip_data), S3C64XX_EINT78PEND);
__raw_writel((u32)data->chip_data, S3C64XX_EINT78PEND);//此处不知为何
}
static vo