Re: [PATCH v5 2/3] tty: serial: qcom_geni_serial: Wakeup over UART RX

Stephen Boyd
2019-11-14T17:40:48Z

Quoting Akash Asthana (2019-11-13 02:48:56)
> Add system wakeup capability over UART RX line for wakeup capable UART.
> When system is suspended, RX line act as an interrupt to wakeup system
> for any communication requests from peer.

How does the RX line get remuxed as a GPIO interrupt here? Is that
through some pinctrl magic in DT or just via enabling/disabling the
interrupt?

>
> diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qcom_geni_serial.c
> index 634054a..56dad67 100644
> --- a/drivers/tty/serial/qcom_geni_serial.c
> +++ b/drivers/tty/serial/qcom_geni_serial.c
> @@ -1321,6 +1327,23 @@ static int qcom_geni_serial_probe(struct platform_device *pdev)
> return ret;
> }
>
> + if (port->wakeup_irq > 0) {
> + /*
> + * Set pm_runtime status as ACTIVE so that wakeup_irq gets
> + * enabled/disabled from dev_pm_arm_wake_irq during system
> + * suspend/resume respectively.
> + */
> + pm_runtime_set_active(&pdev->dev);

We can always set this device as active regardless of wakeup interrupt,
right? Can we move this call outside of this if?

> + device_init_wakeup(&pdev->dev, true);
> + ret = dev_pm_set_dedicated_wake_irq(&pdev->dev,
> + port->wakeup_irq);
> + if (ret) {
> + device_init_wakeup(&pdev->dev, false);
> + uart_remove_one_port(drv, uport);
> + return ret;
> + }
> + }
> +
> return ret;
> }
>