From 63dffacec4d267d239f789d4812ba390ac1784f5 Mon Sep 17 00:00:00 2001 From: Mike Turquette Date: Wed, 5 Aug 2009 09:11:10 -0500 Subject: linux-omap3-pm: OMAP3 kernel recipe to build Kevin Hilman's linux-omap-pm tree Currently tested on Zoom2 and Beagle board. Please test if you have an OMAP3 board! The source tree for this recipe is the latest and greatest power management code for OMAP3. You can find it at http://git.kernel.org/?p=linux/kernel/git/khilman/linux-omap-pm.git;a=summary Signed-off-by: Mike Turquette --- .../0004-serial-8250-add-IRQ-trigger-support.patch | 143 +++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 meta/packages/linux/linux-omap3-pm-git/zoom2/0004-serial-8250-add-IRQ-trigger-support.patch (limited to 'meta/packages/linux/linux-omap3-pm-git/zoom2/0004-serial-8250-add-IRQ-trigger-support.patch') diff --git a/meta/packages/linux/linux-omap3-pm-git/zoom2/0004-serial-8250-add-IRQ-trigger-support.patch b/meta/packages/linux/linux-omap3-pm-git/zoom2/0004-serial-8250-add-IRQ-trigger-support.patch new file mode 100644 index 000000000..05ca90512 --- /dev/null +++ b/meta/packages/linux/linux-omap3-pm-git/zoom2/0004-serial-8250-add-IRQ-trigger-support.patch @@ -0,0 +1,143 @@ +From 3f819713f3c7ccfd56146f4c007155bc47a170ac Mon Sep 17 00:00:00 2001 +From: Vikram Pandita +Date: Mon, 22 Jun 2009 17:58:47 -0500 +Subject: [PATCH 4/8] serial: 8250: add IRQ trigger support + +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 + +Tested on Zoom2 board that has IRQF_TRIGGER_RISING requirement for 8250 irq + +Signed-off-by: Vikram Pandita +--- + 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 606fabb..6474fe4 100644 +--- a/drivers/serial/8250.c ++++ b/drivers/serial/8250.c +@@ -1681,7 +1681,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) +@@ -2030,7 +2030,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); +@@ -2043,7 +2043,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); + +@@ -2688,6 +2688,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; +@@ -2696,7 +2697,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; + } + } + +@@ -2886,6 +2887,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; +@@ -2959,6 +2961,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; +@@ -2971,7 +2974,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 " +@@ -3113,6 +3116,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 b/drivers/serial/8250.h +index 5202603..9b34b04 100644 +--- a/drivers/serial/8250.h ++++ b/drivers/serial/8250.h +@@ -20,6 +20,7 @@ struct old_serial_port { + unsigned int baud_base; + unsigned int port; + unsigned int irq; ++ unsigned long irqflags; + unsigned int flags; + unsigned char hub6; + unsigned char io_type; +diff --git a/include/linux/serial_8250.h b/include/linux/serial_8250.h +index d4d2a78..fb46aba 100644 +--- a/include/linux/serial_8250.h ++++ b/include/linux/serial_8250.h +@@ -22,6 +22,7 @@ struct plat_serial8250_port { + void __iomem *membase; /* ioremap cookie or NULL */ + resource_size_t mapbase; /* resource base */ + unsigned int irq; /* interrupt number */ ++ unsigned long irqflags; /* request_irq flags */ + unsigned int uartclk; /* UART clock rate */ + void *private_data; + unsigned char regshift; /* register shift */ +diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h +index 23d2fb0..3cd255f 100644 +--- a/include/linux/serial_core.h ++++ b/include/linux/serial_core.h +@@ -265,6 +265,7 @@ struct uart_port { + unsigned int (*serial_in)(struct uart_port *, int); + void (*serial_out)(struct uart_port *, int, int); + unsigned int irq; /* irq number */ ++ unsigned long irqflags; /* irq flags */ + unsigned int uartclk; /* base uart clock */ + unsigned int fifosize; /* tx fifo size */ + unsigned char x_char; /* xon/xoff char */ +-- +1.6.3.2 + -- cgit v1.2.3