#define NR_PORTS (3)
 #endif
 
-/* port irq numbers */
-
-#define TX_IRQ(port) ((port)->irq + 1)
-#define RX_IRQ(port) ((port)->irq)
-
 /* macros to change one thing to another */
 
 #define tx_enabled(port) ((port)->unused[0])
 
 static void s3c24xx_serial_stop_tx(struct uart_port *port)
 {
+       struct s3c24xx_uart_port *ourport = to_ourport(port);
+
        if (tx_enabled(port)) {
-               disable_irq(TX_IRQ(port));
+               disable_irq(ourport->tx_irq);
                tx_enabled(port) = 0;
                if (port->flags & UPF_CONS_FLOW)
                        s3c24xx_serial_rx_enable(port);
 
 static void s3c24xx_serial_start_tx(struct uart_port *port)
 {
+       struct s3c24xx_uart_port *ourport = to_ourport(port);
+
        if (!tx_enabled(port)) {
                if (port->flags & UPF_CONS_FLOW)
                        s3c24xx_serial_rx_disable(port);
 
-               enable_irq(TX_IRQ(port));
+               enable_irq(ourport->tx_irq);
                tx_enabled(port) = 1;
        }
 }
 
 static void s3c24xx_serial_stop_rx(struct uart_port *port)
 {
+       struct s3c24xx_uart_port *ourport = to_ourport(port);
+
        if (rx_enabled(port)) {
                dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
-               disable_irq(RX_IRQ(port));
+               disable_irq(ourport->rx_irq);
                rx_enabled(port) = 0;
        }
 }
        struct s3c24xx_uart_port *ourport = to_ourport(port);
 
        if (ourport->tx_claimed) {
-               free_irq(TX_IRQ(port), ourport);
+               free_irq(ourport->tx_irq, ourport);
                tx_enabled(port) = 0;
                ourport->tx_claimed = 0;
        }
 
        if (ourport->rx_claimed) {
-               free_irq(RX_IRQ(port), ourport);
+               free_irq(ourport->rx_irq, ourport);
                ourport->rx_claimed = 0;
                rx_enabled(port) = 0;
        }
 
        rx_enabled(port) = 1;
 
-       ret = request_irq(RX_IRQ(port),
-                         s3c24xx_serial_rx_chars, 0,
+       ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
                          s3c24xx_serial_portname(port), ourport);
 
        if (ret != 0) {
-               printk(KERN_ERR "cannot get irq %d\n", RX_IRQ(port));
+               printk(KERN_ERR "cannot get irq %d\n", ourport->rx_irq);
                return ret;
        }
 
 
        tx_enabled(port) = 1;
 
-       ret = request_irq(TX_IRQ(port),
-                         s3c24xx_serial_tx_chars, 0,
+       ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
                          s3c24xx_serial_portname(port), ourport);
 
        if (ret) {
-               printk(KERN_ERR "cannot get irq %d\n", TX_IRQ(port));
+               printk(KERN_ERR "cannot get irq %d\n", ourport->tx_irq);
                goto err;
        }
 
        ret = platform_get_irq(platdev, 0);
        if (ret < 0)
                port->irq = 0;
-       else
+       else {
                port->irq = ret;
+               ourport->rx_irq = ret;
+               ourport->tx_irq = ret + 1;
+       }
+       
+       ret = platform_get_irq(platdev, 1);
+       if (ret > 0)
+               ourport->tx_irq = ret;
 
        ourport->clk    = clk_get(&platdev->dev, "uart");
 
-       dbg("port: map=%08x, mem=%08x, irq=%d, clock=%ld\n",
-           port->mapbase, port->membase, port->irq, port->uartclk);
+       dbg("port: map=%08x, mem=%08x, irq=%d (%d,%d), clock=%ld\n",
+           port->mapbase, port->membase, port->irq,
+           ourport->rx_irq, ourport->tx_irq, port->uartclk);
 
        /* reset the fifos (and setup the uart) */
        s3c24xx_serial_resetport(port, cfg);