s3c_gpio_cfgpin(HdPhone_GpioPin, S3C_GPIO_SFN(2)); //配置GPIO11为外中断
s3c_gpio_setpull(HdPhone_GpioPin, S3C_GPIO_PULL_NONE); //不上拉也不下拉,硬件默认拉高
set_irq_type(HdPhone_EintPin, IRQ_TYPE_EDGE_BOTH); //插入跟拔出耳机都会触发中断
if(readl(S3C64XX_GPNDAT)&(1<<11)) //如果上电默认是喇叭,设置通道;否则设置耳机
{
ac97_write(codec, AC97_REC_GAIN, OUTPUT_VALUE_SPK);
}
else
{
ac97_write(codec, AC97_REC_GAIN, OUTPUT_VALUE_HP);
}
ret = request_irq(HdPhone_EintPin, s3c6400_9713HdSp_irq, //给EINT11注册中断和中断处理函数,参数包括中断方式,
IRQF_DISABLED, "HdphonSpeak", NULL); //中断名
三星的终端机制
全部使能,除了几个····
在init系统的时候有关于中断的设置。
64个vic中断
5个时钟中断
64+5后面的就叫S3C_IRQ_EINT_BASE S3C_IRQ(64+5)
S3C_EINT(0-11) 对应的叫Ext. Interrupt[0-11]
而其他的S3C_EINT_GROUPT则对应其他的,直接把定义后的中断脚写在request_irq中就可以了。
之后:我的代码如下:
#define CHG_DONE_EINT IRQ_EINT_GROUP(8, 8)
if (request_irq(CHG_DONE_EINT, chg_full_irq, IRQF_DISABLED|IRQF_TRIGGER_FALLING, "CHG FULL INT", NULL))
{
printk(KERN_CRIT "[charger_probe] request CHARGER FULL INT failed/n");
return -1;
}