안녕하세요..

여러개의 인터럽트에 하나의 인터럽트 함수를 사용하는것은 가능합니다..
이 경우 인터럽트 함수등록의 frags 매개 변수를 SA_SHIRQ로 설정하여 인터럽트함수를 공유한다고 알려 줘야 합니다. 그리고 dev_id에 인터럽트 서비스 함수를 수행할때 필요한 정보를 넣어 주셔야 합니다..

참고할 곳은 EZ-X5 커널의 driver/char/serial.c

#if defined(CONFIG_SERIAL_EZ_X5)
        switch( state->irq )
        {
        case IRQ_GPIO(0) ... IRQ_GPIO(1)  :
            set_GPIO_IRQ_edge ( state->irq - IRQ_GPIO(0),     GPIO_RISING_EDGE );
            break;
        case IRQ_GPIO(2) ... IRQ_GPIO(80) :
            set_GPIO_IRQ_edge ( IRQ_TO_GPIO_2_80(state->irq), GPIO_RISING_EDGE );
            break;
        }
#endif
        retval = request_irq(state->irq, handler, SA_SHIRQ,
                     "serial", &IRQ_ports[state->irq]);


를 참조하세요..

시리얼 부분의 디바이스는 상당히 복잡한것으로 알고 있습니다.
디바이스를 만들실 거라면 이것을 어느정도 분석을 해보셔야 합니다.

그럼 수고하세요.





>제가 작성하는것이 맞는것인지 답변좀 부탁 드림니다.
>4port UART의 인터럽트 신호를 GP6,GP7,GP8,GP9 에 각각 연결하였습니다)
>
>아래와 같이 4개의 인터럽트를 등록 합니다(인터럽트를 등록하고, 하나의 인터럽트 함수를 사용합니다.
>이런것 가능한가요?)
>
>   set_GPIO_IRQ_edge ( IO_SAMPLE_COM0_IRQ, GPIO_FALLING_EDGE );
>    set_GPIO_IRQ_edge ( IO_SAMPLE_COM1_IRQ, GPIO_FALLING_EDGE );
>    set_GPIO_IRQ_edge ( IO_SAMPLE_COM2_IRQ, GPIO_FALLING_EDGE );
>    set_GPIO_IRQ_edge ( IO_SAMPLE_COM3_IRQ, GPIO_FALLING_EDGE );
>
>    // IRQ를 등록한다. =============================================
>    if( request_irq( IO_COM0_IRQ, io_interrupt0, 0, COM_NAME, NULL ) )
>    {
>        printk( " unable to get IRQ %dn", IO_SAMPLE_COM0_IRQ );
>        return -EBUSY;
>    }
>    
>    if( request_irq( IO_COM1_IRQ, io_interrupt0, 0, COM_NAME, NULL ) )
>    {
>        printk( " unable to get IRQ %dn", IO_SAMPLE_COM1_IRQ );
>        return -EBUSY;
>    }
>    
>    if( request_irq( IO_COM2_IRQ, io_interrupt0, 0, COM_NAME, NULL ) )
>    {
>        printk( " unable to get IRQ %dn", IO_SAMPLE_COM2_IRQ );
>        return -EBUSY;
>    }
>    
>    if( request_irq( IO_COM3_IRQ, io_interrupt0, 0, COM_NAME, NULL ) )
>    {
>        printk( " unable to get IRQ %dn", IO_SAMPLE_COM3_IRQ );
>        return -EBUSY;
>    }
>
>
>다음 으로 인터럽트 처리 함수에서,, irq를 이용해 4개의 UART 인터럽트를 처리하려고 합니다. 이것이 가능한지요,,,,,
>여기에서 irq 가 request_irq( IO_COM0_IRQ, io_interrupt0, 0, COM_NAME, NULL )
>
>void io_interrupt0(int irq, void *dev_id, struct pt_regs *regs)
>{
>    
>    int irq_num;
>    irq_num = irq;
>..................
>}