Commit 3e4aaea7 authored by Akash Asthana's avatar Akash Asthana Committed by Greg Kroah-Hartman

tty: serial: qcom_geni_serial: IRQ cleanup

Move ISR registration from startup to probe function to avoid registering
it everytime when the port open is called for driver.
Signed-off-by: default avatarAkash Asthana <akashast@codeaurora.org>
Link: https://lore.kernel.org/r/1570700763-17319-1-git-send-email-akashast@codeaurora.orgSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7726fb53
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include <linux/console.h> #include <linux/console.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/iopoll.h> #include <linux/iopoll.h>
#include <linux/irq.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/of_device.h> #include <linux/of_device.h>
...@@ -830,7 +831,7 @@ static void qcom_geni_serial_shutdown(struct uart_port *uport) ...@@ -830,7 +831,7 @@ static void qcom_geni_serial_shutdown(struct uart_port *uport)
if (uart_console(uport)) if (uart_console(uport))
console_stop(uport->cons); console_stop(uport->cons);
free_irq(uport->irq, uport); disable_irq(uport->irq);
spin_lock_irqsave(&uport->lock, flags); spin_lock_irqsave(&uport->lock, flags);
qcom_geni_serial_stop_tx(uport); qcom_geni_serial_stop_tx(uport);
qcom_geni_serial_stop_rx(uport); qcom_geni_serial_stop_rx(uport);
...@@ -890,21 +891,14 @@ static int qcom_geni_serial_startup(struct uart_port *uport) ...@@ -890,21 +891,14 @@ static int qcom_geni_serial_startup(struct uart_port *uport)
int ret; int ret;
struct qcom_geni_serial_port *port = to_dev_port(uport, uport); struct qcom_geni_serial_port *port = to_dev_port(uport, uport);
scnprintf(port->name, sizeof(port->name),
"qcom_serial_%s%d",
(uart_console(uport) ? "console" : "uart"), uport->line);
if (!port->setup) { if (!port->setup) {
ret = qcom_geni_serial_port_setup(uport); ret = qcom_geni_serial_port_setup(uport);
if (ret) if (ret)
return ret; return ret;
} }
enable_irq(uport->irq);
ret = request_irq(uport->irq, qcom_geni_serial_isr, IRQF_TRIGGER_HIGH, return 0;
port->name, uport);
if (ret)
dev_err(uport->dev, "Failed to get IRQ ret %d\n", ret);
return ret;
} }
static unsigned long get_clk_cfg(unsigned long clk_freq) static unsigned long get_clk_cfg(unsigned long clk_freq)
...@@ -1297,11 +1291,21 @@ static int qcom_geni_serial_probe(struct platform_device *pdev) ...@@ -1297,11 +1291,21 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
port->rx_fifo_depth = DEF_FIFO_DEPTH_WORDS; port->rx_fifo_depth = DEF_FIFO_DEPTH_WORDS;
port->tx_fifo_width = DEF_FIFO_WIDTH_BITS; port->tx_fifo_width = DEF_FIFO_WIDTH_BITS;
scnprintf(port->name, sizeof(port->name), "qcom_geni_serial_%s%d",
(uart_console(uport) ? "console" : "uart"), uport->line);
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
if (irq < 0) if (irq < 0)
return irq; return irq;
uport->irq = irq; uport->irq = irq;
irq_set_status_flags(uport->irq, IRQ_NOAUTOEN);
ret = devm_request_irq(uport->dev, uport->irq, qcom_geni_serial_isr,
IRQF_TRIGGER_HIGH, port->name, uport);
if (ret) {
dev_err(uport->dev, "Failed to get IRQ ret %d\n", ret);
return ret;
}
uport->private_data = drv; uport->private_data = drv;
platform_set_drvdata(pdev, port); platform_set_drvdata(pdev, port);
port->handle_rx = console ? handle_rx_console : handle_rx_uart; port->handle_rx = console ? handle_rx_console : handle_rx_uart;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment