From: Felipe Balbi <balbi@ti.com>
To: Tony Lindgren <tony@atomide.com>
Cc: Kevin Hilman <khilman@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Linus Walleij <linus.walleij@linaro.org>,
Felipe Balbi <balbi@ti.com>,
linux-serial@vger.kernel.org, linux-omap@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Roger Quadros <rogerq@ti.com>
Subject: Re: [PATCH] serial: omap: Add support for optional wake-up interrupt
Date: Fri, 18 Oct 2013 11:19:16 -0500 [thread overview]
Message-ID: <20131018161916.GF18921@gimli> (raw)
In-Reply-To: <20131017232820.GG15154@atomide.com>
[-- Attachment #1.1: Type: text/plain, Size: 3833 bytes --]
Hi,
On Thu, Oct 17, 2013 at 04:28:20PM -0700, Tony Lindgren wrote:
> With the recent pinctrl-single changes, omaps can treat
> wake-up events from deeper idle states as interrupts.
>
> There's a separate "io chain" controller on most omaps
> that stays enabled when the device hits off-idle and the
> regular interrupt controller is powered off.
>
> Let's add support for the optional second interrupt for
> wake-up events. And then serial-omap can manage the
> wake-up interrupt from it's runtime PM calls to avoid
> spurious interrupts during runtime.
>
> Note that the wake interrupt is board specific as it
> uses the UART RX pin, and for omap3, there are six pin
> options for UART3 RX pin.
>
> Also Note that the legacy platform based booting handles
> the wake-ups in the legacy mux driver and does not need to
> pass the wake-up interrupt to the driver.
>
> And finally, to pass the wake-up interrupt in the dts file,
> either interrupt-map or the pending interrupts-extended
> property needs to be passed. It's probably best to use
> interrupts-extended when it's available.
>
> Cc: Felipe Balbi <balbi@ti.com>
> Cc: Kevin Hilman <khilman@linaro.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Roger Quadros <rogerq@ti.com>
> Signed-off-by: Tony Lindgren <tony@atomide.com>
looks good, minor nits below
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -39,6 +39,7 @@
> #include <linux/irq.h>
> #include <linux/pm_runtime.h>
> #include <linux/of.h>
> +#include <linux/of_irq.h>
> #include <linux/gpio.h>
> #include <linux/of_gpio.h>
> #include <linux/platform_data/serial-omap.h>
> @@ -134,7 +135,7 @@ struct uart_omap_port {
> struct uart_port port;
> struct uart_omap_dma uart_dma;
> struct device *dev;
> -
> + int irqs[2];
> unsigned char ier;
> unsigned char lcr;
> unsigned char mcr;
> @@ -176,6 +177,8 @@ struct uart_omap_port {
> };
>
> #define to_uart_omap_port(p) ((container_of((p), struct uart_omap_port, port)))
> +#define omap_uartirq (up->irqs[0])
> +#define omap_wakeirq (up->irqs[1])
>
> static struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS];
>
> @@ -214,10 +217,23 @@ static int serial_omap_get_context_loss_count(struct uart_omap_port *up)
> return pdata->get_context_loss_count(up->dev);
> }
>
> +static inline void serial_omap_enable_wakeirq(struct uart_omap_port *up,
> + bool enable)
> +{
> + if (!omap_wakeirq)
> + return;
can we drop the pointless obfuscation ?
> @@ -689,15 +705,25 @@ static int serial_omap_startup(struct uart_port *port)
> {
> struct uart_omap_port *up = to_uart_omap_port(port);
> unsigned long flags = 0;
> - int retval;
> + int i, retval;
>
> /*
> - * Allocate the IRQ
> + * Allocate the IRQs, the second IRQ is the optional wakeirq
> */
> - retval = request_irq(up->port.irq, serial_omap_irq, up->port.irqflags,
> - up->name, up);
> - if (retval)
> - return retval;
> + for (i = 0; i < ARRAY_SIZE(up->irqs); i++) {
> + if (i == 1 && !omap_wakeirq) {
> + dev_info(up->port.dev, "no wakeirq for uart%d\n",
> + up->port.line);
> + break;
> + }
> + retval = devm_request_irq(up->port.dev, up->irqs[i],
> + serial_omap_irq, up->port.irqflags,
> + up->name, up);
conversion to devm_* should be done as another patch, it seems.
> @@ -786,7 +813,10 @@ static void serial_omap_shutdown(struct uart_port *port)
>
> pm_runtime_mark_last_busy(up->dev);
> pm_runtime_put_autosuspend(up->dev);
> - free_irq(up->port.irq, up);
> +
> + for (i = 0; i < ARRAY_SIZE(up->irqs); i++)
> + if (up->irqs[i])
> + devm_free_irq(up->port.dev, up->irqs[i], up);
do you need this at all if you're using devm_* ?
--
balbi
[-- Attachment #1.2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
[-- Attachment #2: Type: text/plain, Size: 176 bytes --]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: balbi@ti.com (Felipe Balbi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] serial: omap: Add support for optional wake-up interrupt
Date: Fri, 18 Oct 2013 11:19:16 -0500 [thread overview]
Message-ID: <20131018161916.GF18921@gimli> (raw)
In-Reply-To: <20131017232820.GG15154@atomide.com>
Hi,
On Thu, Oct 17, 2013 at 04:28:20PM -0700, Tony Lindgren wrote:
> With the recent pinctrl-single changes, omaps can treat
> wake-up events from deeper idle states as interrupts.
>
> There's a separate "io chain" controller on most omaps
> that stays enabled when the device hits off-idle and the
> regular interrupt controller is powered off.
>
> Let's add support for the optional second interrupt for
> wake-up events. And then serial-omap can manage the
> wake-up interrupt from it's runtime PM calls to avoid
> spurious interrupts during runtime.
>
> Note that the wake interrupt is board specific as it
> uses the UART RX pin, and for omap3, there are six pin
> options for UART3 RX pin.
>
> Also Note that the legacy platform based booting handles
> the wake-ups in the legacy mux driver and does not need to
> pass the wake-up interrupt to the driver.
>
> And finally, to pass the wake-up interrupt in the dts file,
> either interrupt-map or the pending interrupts-extended
> property needs to be passed. It's probably best to use
> interrupts-extended when it's available.
>
> Cc: Felipe Balbi <balbi@ti.com>
> Cc: Kevin Hilman <khilman@linaro.org>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Roger Quadros <rogerq@ti.com>
> Signed-off-by: Tony Lindgren <tony@atomide.com>
looks good, minor nits below
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -39,6 +39,7 @@
> #include <linux/irq.h>
> #include <linux/pm_runtime.h>
> #include <linux/of.h>
> +#include <linux/of_irq.h>
> #include <linux/gpio.h>
> #include <linux/of_gpio.h>
> #include <linux/platform_data/serial-omap.h>
> @@ -134,7 +135,7 @@ struct uart_omap_port {
> struct uart_port port;
> struct uart_omap_dma uart_dma;
> struct device *dev;
> -
> + int irqs[2];
> unsigned char ier;
> unsigned char lcr;
> unsigned char mcr;
> @@ -176,6 +177,8 @@ struct uart_omap_port {
> };
>
> #define to_uart_omap_port(p) ((container_of((p), struct uart_omap_port, port)))
> +#define omap_uartirq (up->irqs[0])
> +#define omap_wakeirq (up->irqs[1])
>
> static struct uart_omap_port *ui[OMAP_MAX_HSUART_PORTS];
>
> @@ -214,10 +217,23 @@ static int serial_omap_get_context_loss_count(struct uart_omap_port *up)
> return pdata->get_context_loss_count(up->dev);
> }
>
> +static inline void serial_omap_enable_wakeirq(struct uart_omap_port *up,
> + bool enable)
> +{
> + if (!omap_wakeirq)
> + return;
can we drop the pointless obfuscation ?
> @@ -689,15 +705,25 @@ static int serial_omap_startup(struct uart_port *port)
> {
> struct uart_omap_port *up = to_uart_omap_port(port);
> unsigned long flags = 0;
> - int retval;
> + int i, retval;
>
> /*
> - * Allocate the IRQ
> + * Allocate the IRQs, the second IRQ is the optional wakeirq
> */
> - retval = request_irq(up->port.irq, serial_omap_irq, up->port.irqflags,
> - up->name, up);
> - if (retval)
> - return retval;
> + for (i = 0; i < ARRAY_SIZE(up->irqs); i++) {
> + if (i == 1 && !omap_wakeirq) {
> + dev_info(up->port.dev, "no wakeirq for uart%d\n",
> + up->port.line);
> + break;
> + }
> + retval = devm_request_irq(up->port.dev, up->irqs[i],
> + serial_omap_irq, up->port.irqflags,
> + up->name, up);
conversion to devm_* should be done as another patch, it seems.
> @@ -786,7 +813,10 @@ static void serial_omap_shutdown(struct uart_port *port)
>
> pm_runtime_mark_last_busy(up->dev);
> pm_runtime_put_autosuspend(up->dev);
> - free_irq(up->port.irq, up);
> +
> + for (i = 0; i < ARRAY_SIZE(up->irqs); i++)
> + if (up->irqs[i])
> + devm_free_irq(up->port.dev, up->irqs[i], up);
do you need this at all if you're using devm_* ?
--
balbi
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20131018/f6a8e99a/attachment-0001.sig>
next prev parent reply other threads:[~2013-10-18 16:19 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-17 23:28 [PATCH] serial: omap: Add support for optional wake-up interrupt Tony Lindgren
2013-10-17 23:28 ` Tony Lindgren
2013-10-18 16:19 ` Felipe Balbi [this message]
2013-10-18 16:19 ` Felipe Balbi
2013-10-18 16:37 ` Tony Lindgren
2013-10-18 16:37 ` Tony Lindgren
2013-10-18 16:45 ` Tony Lindgren
2013-10-18 16:45 ` Tony Lindgren
2013-10-18 22:56 ` Tony Lindgren
2013-10-18 22:56 ` Tony Lindgren
2013-10-21 9:07 ` Roger Quadros
2013-10-21 9:07 ` Roger Quadros
2013-10-21 12:21 ` Felipe Balbi
2013-10-21 12:21 ` Felipe Balbi
2013-10-22 13:49 ` Tony Lindgren
2013-10-22 13:49 ` Tony Lindgren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131018161916.GF18921@gimli \
--to=balbi@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=khilman@linaro.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=rogerq@ti.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.