mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 15:04:27 +08:00
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: Akash Asthana <akashast@codeaurora.org> Link: https://lore.kernel.org/r/1570700763-17319-1-git-send-email-akashast@codeaurora.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7726fb53e7
commit
3e4aaea7a0
@ -9,6 +9,7 @@
|
||||
#include <linux/console.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/iopoll.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
@ -830,7 +831,7 @@ static void qcom_geni_serial_shutdown(struct uart_port *uport)
|
||||
if (uart_console(uport))
|
||||
console_stop(uport->cons);
|
||||
|
||||
free_irq(uport->irq, uport);
|
||||
disable_irq(uport->irq);
|
||||
spin_lock_irqsave(&uport->lock, flags);
|
||||
qcom_geni_serial_stop_tx(uport);
|
||||
qcom_geni_serial_stop_rx(uport);
|
||||
@ -890,21 +891,14 @@ static int qcom_geni_serial_startup(struct uart_port *uport)
|
||||
int ret;
|
||||
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) {
|
||||
ret = qcom_geni_serial_port_setup(uport);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
enable_irq(uport->irq);
|
||||
|
||||
ret = request_irq(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;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long get_clk_cfg(unsigned long clk_freq)
|
||||
@ -1297,11 +1291,21 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
|
||||
port->rx_fifo_depth = DEF_FIFO_DEPTH_WORDS;
|
||||
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);
|
||||
if (irq < 0)
|
||||
return 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;
|
||||
platform_set_drvdata(pdev, port);
|
||||
port->handle_rx = console ? handle_rx_console : handle_rx_uart;
|
||||
|
Loading…
Reference in New Issue
Block a user