RE: [PATCH v2] serial: 8250: add IRQ trigger support

2009-06-25 Thread Pandita, Vikram

-Original Message-
From: Alan Cox [mailto:a...@lxorguk.ukuu.org.uk]
Subject: Re: [PATCH v2] serial: 8250: add IRQ trigger support

On Mon, 22 Jun 2009 18:15:19 -0500
Vikram Pandita vikram.pand...@ti.com wrote:

 There is currently no provision for passing IRQ trigger flags for
 serial IRQs with triggering requirements (such as GPIO IRQs)

 This patch adds irqflags to plat_serial8250_port that can be passed
 from board file to reqest_irq() of 8250 driver

Queued

Thanks Alan for queueuing up the 8250 irq trigger patch.
For OMAP Zoom2 board and some other boards needed this real bad.


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v2] serial: 8250: add IRQ trigger support

2009-06-23 Thread Tony Lindgren
* Vikram Pandita vikram.pand...@ti.com [090623 02:20]:
 There is currently no provision for passing IRQ trigger flags for
 serial IRQs with triggering requirements (such as GPIO IRQs)
 
 This patch adds irqflags to plat_serial8250_port that can be passed
 from board file to reqest_irq() of 8250 driver
 
 Changes are backward compatible with boards passing UPF_SHARE_IRQ flag

How about just fix all the instances of UPF_SHARE_IRQ and make them
use irqflags there are not too many instances of that?

Otherwise we're just piling more hacks to the driver..

Also, the irqflags may need to be initialized in some cases for
struct uart_port, so that should be checked.

Regards,

Tony 
 
 Tested on Zoom2 board that has IRQF_TRIGGER_RISING requirement for 8250 irq
 
 Signed-off-by: Vikram Pandita vikram.pand...@ti.com
 ---
  drivers/serial/8250.c   |   14 +-
  drivers/serial/8250.h   |1 +
  include/linux/serial_8250.h |1 +
  include/linux/serial_core.h |1 +
  4 files changed, 12 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
 index bab115e..d18a4c0 100644
 --- a/drivers/serial/8250.c
 +++ b/drivers/serial/8250.c
 @@ -1674,7 +1674,7 @@ static int serial_link_irq_chain(struct uart_8250_port 
 *up)
   INIT_LIST_HEAD(up-list);
   i-head = up-list;
   spin_unlock_irq(i-lock);
 -
 + irq_flags |= up-port.irqflags;
   ret = request_irq(up-port.irq, serial8250_interrupt,
 irq_flags, serial, i);
   if (ret  0)
 @@ -2023,7 +2023,7 @@ static int serial8250_startup(struct uart_port *port)
* allow register changes to become visible.
*/
   spin_lock_irqsave(up-port.lock, flags);
 - if (up-port.flags  UPF_SHARE_IRQ)
 + if (up-port.irqflags  IRQF_SHARED)
   disable_irq_nosync(up-port.irq);
  
   wait_for_xmitr(up, UART_LSR_THRE);
 @@ -2036,7 +2036,7 @@ static int serial8250_startup(struct uart_port *port)
   iir = serial_in(up, UART_IIR);
   serial_out(up, UART_IER, 0);
  
 - if (up-port.flags  UPF_SHARE_IRQ)
 + if (up-port.irqflags  IRQF_SHARED)
   enable_irq(up-port.irq);
   spin_unlock_irqrestore(up-port.lock, flags);
  
 @@ -2681,6 +2681,7 @@ static void __init serial8250_isa_init_ports(void)
i++, up++) {
   up-port.iobase   = old_serial_port[i].port;
   up-port.irq  = irq_canonicalize(old_serial_port[i].irq);
 + up-port.irqflags = old_serial_port[i].irqflags;
   up-port.uartclk  = old_serial_port[i].baud_base * 16;
   up-port.flags= old_serial_port[i].flags;
   up-port.hub6 = old_serial_port[i].hub6;
 @@ -2689,7 +2690,7 @@ static void __init serial8250_isa_init_ports(void)
   up-port.regshift = old_serial_port[i].iomem_reg_shift;
   set_io_from_upio(up-port);
   if (share_irqs)
 - up-port.flags |= UPF_SHARE_IRQ;
 + up-port.irqflags |= IRQF_SHARED;
   }
  }
  
 @@ -2879,6 +2880,7 @@ int __init early_serial_setup(struct uart_port *port)
   p-iobase   = port-iobase;
   p-membase  = port-membase;
   p-irq  = port-irq;
 + p-irqflags = port-irqflags;
   p-uartclk  = port-uartclk;
   p-fifosize = port-fifosize;
   p-regshift = port-regshift;
 @@ -2952,6 +2954,7 @@ static int __devinit serial8250_probe(struct 
 platform_device *dev)
   port.iobase = p-iobase;
   port.membase= p-membase;
   port.irq= p-irq;
 + port.irqflags   = p-irqflags;
   port.uartclk= p-uartclk;
   port.regshift   = p-regshift;
   port.iotype = p-iotype;
 @@ -2964,7 +2967,7 @@ static int __devinit serial8250_probe(struct 
 platform_device *dev)
   port.serial_out = p-serial_out;
   port.dev= dev-dev;
   if (share_irqs)
 - port.flags |= UPF_SHARE_IRQ;
 + port.irqflags |= IRQF_SHARED;
   ret = serial8250_register_port(port);
   if (ret  0) {
   dev_err(dev-dev, unable to register port at index %d 
 
 @@ -3106,6 +3109,7 @@ int serial8250_register_port(struct uart_port *port)
   uart-port.iobase   = port-iobase;
   uart-port.membase  = port-membase;
   uart-port.irq  = port-irq;
 + uart-port.irqflags = port-irqflags;
   uart-port.uartclk  = port-uartclk;
   uart-port.fifosize = port-fifosize;
   uart-port.regshift = port-regshift;
 diff --git a/drivers/serial/8250.h