Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

TTY: use tty_port_register_device

Currently we have no way to assign tty->port while performing tty
installation. There are two ways to provide the link tty_struct =>
tty_port. Either by calling tty_port_install from tty->ops->install or
tty_port_register_device called instead of tty_register_device when
the device is being set up after connected.

In this patch we modify most of the drivers to do the latter. When the
drivers use tty_register_device and we have tty_port already, we
switch to tty_port_register_device. So we have the tty_struct =>
tty_port link for free for those.

Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Jiri Slaby and committed by
Greg Kroah-Hartman
734cc178 7e73eca6

+58 -40
+2 -1
arch/um/drivers/line.c
··· 409 409 line->valid = 1; 410 410 err = parse_chan_pair(new, line, n, opts, error_out); 411 411 if (!err) { 412 - struct device *d = tty_register_device(driver, n, NULL); 412 + struct device *d = tty_port_register_device(&line->port, 413 + driver, n, NULL); 413 414 if (IS_ERR(d)) { 414 415 *error_out = "Failed to register device"; 415 416 err = PTR_ERR(d);
+2 -1
drivers/isdn/capi/capi.c
··· 234 234 235 235 mp->minor = minor; 236 236 237 - dev = tty_register_device(capinc_tty_driver, minor, NULL); 237 + dev = tty_port_register_device(&mp->port, capinc_tty_driver, minor, 238 + NULL); 238 239 if (IS_ERR(dev)) 239 240 goto err_out2; 240 241
+2 -1
drivers/isdn/gigaset/interface.c
··· 524 524 tasklet_init(&cs->if_wake_tasklet, if_wake, (unsigned long) cs); 525 525 526 526 mutex_lock(&cs->mutex); 527 - cs->tty_dev = tty_register_device(drv->tty, cs->minor_index, NULL); 527 + cs->tty_dev = tty_port_register_device(&cs->port, drv->tty, 528 + cs->minor_index, NULL); 528 529 529 530 if (!IS_ERR(cs->tty_dev)) 530 531 dev_set_drvdata(cs->tty_dev, cs);
+2 -2
drivers/mmc/card/sdio_uart.c
··· 1132 1132 kfree(port); 1133 1133 } else { 1134 1134 struct device *dev; 1135 - dev = tty_register_device(sdio_uart_tty_driver, 1136 - port->index, &func->dev); 1135 + dev = tty_port_register_device(&port->port, 1136 + sdio_uart_tty_driver, port->index, &func->dev); 1137 1137 if (IS_ERR(dev)) { 1138 1138 sdio_uart_port_remove(port); 1139 1139 ret = PTR_ERR(dev);
+4 -3
drivers/net/usb/hso.c
··· 2287 2287 if (minor < 0) 2288 2288 goto exit; 2289 2289 2290 + tty_port_init(&serial->port); 2291 + 2290 2292 /* register our minor number */ 2291 - serial->parent->dev = tty_register_device(tty_drv, minor, 2292 - &serial->parent->interface->dev); 2293 + serial->parent->dev = tty_port_register_device(&serial->port, tty_drv, 2294 + minor, &serial->parent->interface->dev); 2293 2295 dev = serial->parent->dev; 2294 2296 dev_set_drvdata(dev, serial->parent); 2295 2297 i = device_create_file(dev, &dev_attr_hsotype); ··· 2300 2298 serial->minor = minor; 2301 2299 serial->magic = HSO_SERIAL_MAGIC; 2302 2300 spin_lock_init(&serial->serial_lock); 2303 - tty_port_init(&serial->port); 2304 2301 serial->num_rx_urbs = num_urbs; 2305 2302 2306 2303 /* RX, allocate urb and initialize */
+1 -1
drivers/staging/ipack/devices/ipoctal.c
··· 502 502 ipoctal->pointer_read[i] = 0; 503 503 ipoctal->pointer_write[i] = 0; 504 504 ipoctal->nb_bytes[i] = 0; 505 - tty_register_device(tty, i, NULL); 505 + tty_port_register_device(&ipoctal->tty_port[i], tty, i, NULL); 506 506 507 507 /* 508 508 * Enable again the RX. TX will be enabled when
+9 -7
drivers/tty/cyclades.c
··· 3289 3289 struct cyclades_card *card; 3290 3290 unsigned short cy_isa_irq, nboard; 3291 3291 void __iomem *cy_isa_address; 3292 - unsigned short i, j, cy_isa_nchan; 3292 + unsigned short i, j, k, cy_isa_nchan; 3293 3293 int isparam = 0; 3294 3294 3295 3295 nboard = 0; ··· 3392 3392 (unsigned long)(cy_isa_address + (CyISA_Ywin - 1)), 3393 3393 cy_isa_irq, cy_isa_nchan, cy_next_channel); 3394 3394 3395 - for (j = cy_next_channel; 3396 - j < cy_next_channel + cy_isa_nchan; j++) 3397 - tty_register_device(cy_serial_driver, j, NULL); 3395 + for (k = 0, j = cy_next_channel; 3396 + j < cy_next_channel + cy_isa_nchan; j++, k++) 3397 + tty_port_register_device(&card->ports[k].port, 3398 + cy_serial_driver, j, NULL); 3398 3399 cy_next_channel += cy_isa_nchan; 3399 3400 } 3400 3401 return nboard; ··· 3699 3698 void __iomem *addr0 = NULL, *addr2 = NULL; 3700 3699 char *card_name = NULL; 3701 3700 u32 uninitialized_var(mailbox); 3702 - unsigned int device_id, nchan = 0, card_no, i; 3701 + unsigned int device_id, nchan = 0, card_no, i, j; 3703 3702 unsigned char plx_ver; 3704 3703 int retval, irq; 3705 3704 ··· 3910 3909 3911 3910 dev_info(&pdev->dev, "%s/PCI #%d found: %d channels starting from " 3912 3911 "port %d.\n", card_name, card_no + 1, nchan, cy_next_channel); 3913 - for (i = cy_next_channel; i < cy_next_channel + nchan; i++) 3914 - tty_register_device(cy_serial_driver, i, &pdev->dev); 3912 + for (j = 0, i = cy_next_channel; i < cy_next_channel + nchan; i++, j++) 3913 + tty_port_register_device(&card->ports[j].port, 3914 + cy_serial_driver, i, &pdev->dev); 3915 3915 cy_next_channel += nchan; 3916 3916 3917 3917 return 0;
+5 -4
drivers/tty/ehv_bytechan.c
··· 738 738 goto error; 739 739 } 740 740 741 - bc->dev = tty_register_device(ehv_bc_driver, i, &pdev->dev); 741 + tty_port_init(&bc->port); 742 + bc->port.ops = &ehv_bc_tty_port_ops; 743 + 744 + bc->dev = tty_port_register_device(&bc->port, ehv_bc_driver, i, 745 + &pdev->dev); 742 746 if (IS_ERR(bc->dev)) { 743 747 ret = PTR_ERR(bc->dev); 744 748 dev_err(&pdev->dev, "could not register tty (ret=%i)\n", ret); 745 749 goto error; 746 750 } 747 - 748 - tty_port_init(&bc->port); 749 - bc->port.ops = &ehv_bc_tty_port_ops; 750 751 751 752 dev_set_drvdata(&pdev->dev, bc); 752 753
+1 -1
drivers/tty/ipwireless/tty.c
··· 476 476 mutex_init(&ttys[j]->ipw_tty_mutex); 477 477 tty_port_init(&ttys[j]->port); 478 478 479 - tty_register_device(ipw_tty_driver, j, NULL); 479 + tty_port_register_device(&ttys[j]->port, ipw_tty_driver, j, NULL); 480 480 ipwireless_associate_network_tty(network, channel_idx, ttys[j]); 481 481 482 482 if (secondary_channel_idx != -1)
+2 -1
drivers/tty/isicom.c
··· 1611 1611 goto errunri; 1612 1612 1613 1613 for (index = 0; index < board->port_count; index++) 1614 - tty_register_device(isicom_normal, board->index * 16 + index, 1614 + tty_port_register_device(&board->ports[index].port, 1615 + isicom_normal, board->index * 16 + index, 1615 1616 &pdev->dev); 1616 1617 1617 1618 return 0;
+4 -2
drivers/tty/mxser.c
··· 2625 2625 goto err_rel3; 2626 2626 2627 2627 for (i = 0; i < brd->info->nports; i++) 2628 - tty_register_device(mxvar_sdriver, brd->idx + i, &pdev->dev); 2628 + tty_port_register_device(&brd->ports[i].port, mxvar_sdriver, 2629 + brd->idx + i, &pdev->dev); 2629 2630 2630 2631 pci_set_drvdata(pdev, brd); 2631 2632 ··· 2723 2722 2724 2723 brd->idx = m * MXSER_PORTS_PER_BOARD; 2725 2724 for (i = 0; i < brd->info->nports; i++) 2726 - tty_register_device(mxvar_sdriver, brd->idx + i, NULL); 2725 + tty_port_register_device(&brd->ports[i].port, 2726 + mxvar_sdriver, brd->idx + i, NULL); 2727 2727 2728 2728 m++; 2729 2729 }
+2 -2
drivers/tty/nozomi.c
··· 1473 1473 port->dc = dc; 1474 1474 tty_port_init(&port->port); 1475 1475 port->port.ops = &noz_tty_port_ops; 1476 - tty_dev = tty_register_device(ntty_driver, dc->index_start + i, 1477 - &pdev->dev); 1476 + tty_dev = tty_port_register_device(&port->port, ntty_driver, 1477 + dc->index_start + i, &pdev->dev); 1478 1478 1479 1479 if (IS_ERR(tty_dev)) { 1480 1480 ret = PTR_ERR(tty_dev);
+2 -2
drivers/tty/rocket.c
··· 704 704 spin_lock_init(&info->slock); 705 705 mutex_init(&info->write_mtx); 706 706 rp_table[line] = info; 707 - tty_register_device(rocket_driver, line, pci_dev ? &pci_dev->dev : 708 - NULL); 707 + tty_port_register_device(&info->port, rocket_driver, line, 708 + pci_dev ? &pci_dev->dev : NULL); 709 709 } 710 710 711 711 /*
+2 -2
drivers/tty/serial/ifx6x60.c
··· 800 800 tty_port_init(pport); 801 801 pport->ops = &ifx_tty_port_ops; 802 802 ifx_dev->minor = IFX_SPI_TTY_ID; 803 - ifx_dev->tty_dev = tty_register_device(tty_drv, ifx_dev->minor, 804 - &ifx_dev->spi_dev->dev); 803 + ifx_dev->tty_dev = tty_port_register_device(pport, tty_drv, 804 + ifx_dev->minor, &ifx_dev->spi_dev->dev); 805 805 if (IS_ERR(ifx_dev->tty_dev)) { 806 806 dev_dbg(&ifx_dev->spi_dev->dev, 807 807 "%s: registering tty device failed", __func__);
+5 -3
drivers/tty/serial/msm_smd_tty.c
··· 223 223 return ret; 224 224 225 225 for (i = 0; i < smd_tty_channels_len; i++) { 226 - tty_port_init(&smd_tty[smd_tty_channels[i].id].port); 227 - smd_tty[smd_tty_channels[i].id].port.ops = &smd_tty_port_ops; 228 - tty_register_device(smd_tty_driver, smd_tty_channels[i].id, 0); 226 + struct tty_port *port = &smd_tty[smd_tty_channels[i].id].port; 227 + tty_port_init(port); 228 + port->ops = &smd_tty_port_ops; 229 + tty_port_register_device(port, smd_tty_driver, 230 + smd_tty_channels[i].id, NULL); 229 231 } 230 232 231 233 return 0;
+2 -1
drivers/tty/serial/serial_core.c
··· 2346 2346 * Register the port whether it's detected or not. This allows 2347 2347 * setserial to be used to alter this ports parameters. 2348 2348 */ 2349 - tty_dev = tty_register_device(drv->tty_driver, uport->line, uport->dev); 2349 + tty_dev = tty_port_register_device(port, drv->tty_driver, uport->line, 2350 + uport->dev); 2350 2351 if (likely(!IS_ERR(tty_dev))) { 2351 2352 device_set_wakeup_capable(tty_dev, 1); 2352 2353 } else {
+2 -1
drivers/usb/class/cdc-acm.c
··· 1298 1298 usb_set_intfdata(data_interface, acm); 1299 1299 1300 1300 usb_get_intf(control_interface); 1301 - tty_register_device(acm_tty_driver, minor, &control_interface->dev); 1301 + tty_port_register_device(&acm->port, acm_tty_driver, minor, 1302 + &control_interface->dev); 1302 1303 1303 1304 return 0; 1304 1305 alloc_fail7:
+2 -1
drivers/usb/gadget/u_serial.c
··· 1129 1129 for (i = 0; i < count; i++) { 1130 1130 struct device *tty_dev; 1131 1131 1132 - tty_dev = tty_register_device(gs_tty_driver, i, &g->dev); 1132 + tty_dev = tty_port_register_device(&ports[i].port->port, 1133 + gs_tty_driver, i, &g->dev); 1133 1134 if (IS_ERR(tty_dev)) 1134 1135 pr_warning("%s: no classdev for port %d, err %ld\n", 1135 1136 __func__, i, PTR_ERR(tty_dev));
+2 -2
net/bluetooth/rfcomm/tty.c
··· 278 278 if (err < 0) 279 279 goto free; 280 280 281 - dev->tty_dev = tty_register_device(rfcomm_tty_driver, dev->id, NULL); 282 - 281 + dev->tty_dev = tty_port_register_device(&dev->port, rfcomm_tty_driver, 282 + dev->id, NULL); 283 283 if (IS_ERR(dev->tty_dev)) { 284 284 err = PTR_ERR(dev->tty_dev); 285 285 list_del(&dev->list);