Re: [PATCH 1/2] serdev: ttyport: enforce tty-driver open() requirement
From: Rob Herring <robh@kernel.org>
Date: 2017-10-17 16:07:44
Also in:
lkml
On Mon, Oct 16, 2017 at 8:06 AM, Johan Hovold [off-list ref] wrote:
The tty-driver open routine is mandatory, but the serdev tty-port-controller implementation did not treat it as such and would instead fall back to calling tty_port_open() directly.
The idea was to eventually get rid of the tty_struct dependency and only depend on tty_port. That's very invasive though and needs various pieces of tty_struct to move into tty_port. Of course, tty_port_open itself would have to change as well, so this change doesn't really matter. Rob
quoted hunk ↗ jump to hunk
Signed-off-by: Johan Hovold <johan@kernel.org> --- drivers/tty/serdev/serdev-ttyport.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-)diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c index 302018d67efa..404f3fd070a7 100644 --- a/drivers/tty/serdev/serdev-ttyport.c +++ b/drivers/tty/serdev/serdev-ttyport.c@@ -102,10 +102,10 @@ static int ttyport_open(struct serdev_controller *ctrl) return PTR_ERR(tty); serport->tty = tty; - if (tty->ops->open) - tty->ops->open(serport->tty, NULL); - else - tty_port_open(serport->port, tty, NULL); + if (!tty->ops->open) + goto err_unlock; + + tty->ops->open(serport->tty, NULL); /* Bring the UART into a known 8 bits no parity hw fc state */ ktermios = tty->termios;@@ -122,6 +122,12 @@ static int ttyport_open(struct serdev_controller *ctrl) tty_unlock(serport->tty); return 0; + +err_unlock: + tty_unlock(tty); + tty_release_struct(tty, serport->tty_idx); + + return -ENODEV; } static void ttyport_close(struct serdev_controller *ctrl) --2.14.2