From f95ad78c72e72bcc922e75b80b35c6e9549b9d72 Mon Sep 17 00:00:00 2001 From: Bryan O'Donoghue Date: Tue, 2 Jun 2015 13:40:47 +0100 Subject: [PATCH] greybus: uart: Update uart.c to register tty ports For each new UART connection we need to do a tty_port_init else we'll crash when trying to access the tty mutex later on. Base the TTY major/minor numbers on non-zero values. Supply an empty operations structure for the newly regitered port. Signed-off-by: Bryan O'Donoghue Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/uart.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/staging/greybus/uart.c b/drivers/staging/greybus/uart.c index 4cad629e3cb2..c47667d0bec5 100644 --- a/drivers/staging/greybus/uart.c +++ b/drivers/staging/greybus/uart.c @@ -522,6 +522,7 @@ static const struct tty_operations gb_ops = { .tiocmset = gb_tty_tiocmset, }; +static struct tty_port_operations null_ops = { }; static int gb_tty_init(void); static void gb_tty_exit(void); @@ -545,6 +546,7 @@ static int gb_uart_connection_init(struct gb_connection *connection) gb_tty = kzalloc(sizeof(*gb_tty), GFP_KERNEL); if (!gb_tty) return -ENOMEM; + gb_tty->connection = connection; connection->private = gb_tty; @@ -571,6 +573,9 @@ static int gb_uart_connection_init(struct gb_connection *connection) init_waitqueue_head(&gb_tty->wioctl); mutex_init(&gb_tty->mutex); + tty_port_init(&gb_tty->port); + gb_tty->port.ops = &null_ops; + send_control(gb_tty, gb_tty->ctrlout); /* initialize the uart to be 9600n81 */ @@ -589,6 +594,7 @@ static int gb_uart_connection_init(struct gb_connection *connection) return 0; error: + tty_port_destroy(&gb_tty->port); release_minor(gb_tty); error_version: connection->private = NULL; @@ -623,7 +629,7 @@ static void gb_uart_connection_exit(struct gb_connection *connection) /* FIXME - free transmit / receive buffers */ tty_port_put(&gb_tty->port); - + tty_port_destroy(&gb_tty->port); kfree(gb_tty); /* If last device is gone, tear down the tty structures */ -- 2.20.1