From 446ce475f947c978cafc58d6bd0cb725e2ead147 Mon Sep 17 00:00:00 2001 From: Mark Salter Date: Wed, 12 Dec 2012 15:36:38 +0000 Subject: [PATCH] --- yaml --- r: 340367 b: refs/heads/master c: 8d160027ff234bddea627ba54c2b85efa1884867 h: refs/heads/master i: 340365: eec846efe4d7829f206cafbf6d6a695bce2ebfe8 340363: 2e40533cebfb22b7715cc77a3d2b3ecc57d041c7 340359: a6a6de689cd246d634c74f3e6e7fcc0ca8827e9f 340351: 775b1e150cbcd11df6d55a9ce515a04a22f4eba9 v: v3 --- [refs] | 2 +- trunk/arch/mn10300/kernel/mn10300-serial.c | 34 +++++++++++++++++++--- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 8310614ac20f..ef036132012a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7d361cb754720d69695a3efc973e9a1a51e46b21 +refs/heads/master: 8d160027ff234bddea627ba54c2b85efa1884867 diff --git a/trunk/arch/mn10300/kernel/mn10300-serial.c b/trunk/arch/mn10300/kernel/mn10300-serial.c index 4968cfe66c06..cac0f0da9203 100644 --- a/trunk/arch/mn10300/kernel/mn10300-serial.c +++ b/trunk/arch/mn10300/kernel/mn10300-serial.c @@ -408,6 +408,34 @@ static struct irq_chip mn10300_serial_pic = { .irq_unmask = mn10300_serial_nop, }; +static void mn10300_serial_low_mask(struct irq_data *d) +{ + unsigned long flags; + u16 tmp; + + flags = arch_local_cli_save(); + GxICR(d->irq) = NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL); + tmp = GxICR(d->irq); /* flush write buffer */ + arch_local_irq_restore(flags); +} + +static void mn10300_serial_low_unmask(struct irq_data *d) +{ + unsigned long flags; + u16 tmp; + + flags = arch_local_cli_save(); + GxICR(d->irq) = + NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL) | GxICR_ENABLE; + tmp = GxICR(d->irq); /* flush write buffer */ + arch_local_irq_restore(flags); +} + +static struct irq_chip mn10300_serial_low_pic = { + .name = "mnserial-low", + .irq_mask = mn10300_serial_low_mask, + .irq_unmask = mn10300_serial_low_unmask, +}; /* * serial virtual DMA interrupt jump table @@ -929,10 +957,8 @@ static int mn10300_serial_startup(struct uart_port *_port) pint->port = port; pint->vdma = mn10300_serial_vdma_tx_handler; - set_intr_level(port->rx_irq, - NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL)); - set_intr_level(port->tx_irq, - NUM2GxICR_LEVEL(CONFIG_MN10300_SERIAL_IRQ_LEVEL)); + irq_set_chip(port->rx_irq, &mn10300_serial_low_pic); + irq_set_chip(port->tx_irq, &mn10300_serial_low_pic); irq_set_chip(port->tm_irq, &mn10300_serial_pic); if (request_irq(port->rx_irq, mn10300_serial_interrupt,