mirror of
https://github.com/armbian/linux-cix.git
synced 2026-01-06 12:30:45 -08:00
Merge tag 'tty-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty / serial updates from Greg KH: "Here is the "big" set of tty/serial driver patches for 5.15-rc1 Nothing major in here at all, just some driver updates and more cleanups on old tty apis and code that needed it that includes: - tty.h cleanup of things that didn't belong in it - other tty cleanups by Jiri - driver cleanups - rs485 support added to amba-pl011 driver - dts updates - stm32 serial driver updates - other minor fixes and driver updates All have been in linux-next for a while with no reported problems" * tag 'tty-5.15-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (83 commits) tty: serial: uartlite: Use read_poll_timeout for a polling loop tty: serial: uartlite: Use constants in early_uartlite_putc tty: Fix data race between tiocsti() and flush_to_ldisc() serial: vt8500: Use of_device_get_match_data serial: tegra: Use of_device_get_match_data serial: 8250_ingenic: Use of_device_get_match_data tty: serial: linflexuart: Remove redundant check to simplify the code tty: serial: fsl_lpuart: do software reset for imx7ulp and imx8qxp tty: serial: fsl_lpuart: enable two stop bits for lpuart32 tty: serial: fsl_lpuart: fix the wrong mapbase value mxser: use semi-colons instead of commas tty: moxa: use semi-colons instead of commas tty: serial: fsl_lpuart: check dma_tx_in_progress in tx dma callback tty: replace in_irq() with in_hardirq() serial: sh-sci: fix break handling for sysrq serial: stm32: use devm_platform_get_and_ioremap_resource() serial: stm32: use the defined variable to simplify code Revert "arm pl011 serial: support multi-irq request" tty: serial: samsung: Add Exynos850 SoC data tty: serial: samsung: Fix driver data macros style ...
This commit is contained in:
@@ -64,6 +64,12 @@ properties:
|
||||
- const: nuvoton,npcm750-uart
|
||||
- const: nvidia,tegra20-uart
|
||||
- const: nxp,lpc3220-uart
|
||||
- items:
|
||||
- enum:
|
||||
- exar,xr16l2552
|
||||
- exar,xr16l2551
|
||||
- exar,xr16l2550
|
||||
- const: ns8250
|
||||
- items:
|
||||
- enum:
|
||||
- altr,16550-FIFO32
|
||||
|
||||
@@ -79,6 +79,7 @@ properties:
|
||||
power-domains: true
|
||||
clock-frequency: true
|
||||
current-speed: true
|
||||
overrun-throttle-ms: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
Binding for Cadence UART Controller
|
||||
|
||||
Required properties:
|
||||
- compatible :
|
||||
Use "xlnx,xuartps","cdns,uart-r1p8" for Zynq-7xxx SoC.
|
||||
Use "xlnx,zynqmp-uart","cdns,uart-r1p12" for Zynq Ultrascale+ MPSoC.
|
||||
- reg: Should contain UART controller registers location and length.
|
||||
- interrupts: Should contain UART controller interrupts.
|
||||
- clocks: Must contain phandles to the UART clocks
|
||||
See ../clocks/clock-bindings.txt for details.
|
||||
- clock-names: Tuple to identify input clocks, must contain "uart_clk" and "pclk"
|
||||
See ../clocks/clock-bindings.txt for details.
|
||||
|
||||
|
||||
Optional properties:
|
||||
- cts-override : Override the CTS modem status signal. This signal will
|
||||
always be reported as active instead of being obtained from the modem status
|
||||
register. Define this if your serial port does not use this pin
|
||||
|
||||
Example:
|
||||
uart@e0000000 {
|
||||
compatible = "cdns,uart-r1p8";
|
||||
clocks = <&clkc 23>, <&clkc 40>;
|
||||
clock-names = "uart_clk", "pclk";
|
||||
reg = <0xE0000000 0x1000>;
|
||||
interrupts = <0 27 4>;
|
||||
};
|
||||
66
Documentation/devicetree/bindings/serial/cdns,uart.yaml
Normal file
66
Documentation/devicetree/bindings/serial/cdns,uart.yaml
Normal file
@@ -0,0 +1,66 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/serial/cdns,uart.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Cadence UART Controller Device Tree Bindings
|
||||
|
||||
maintainers:
|
||||
- Michal Simek <michal.simek@xilinx.com>
|
||||
|
||||
allOf:
|
||||
- $ref: /schemas/serial.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
oneOf:
|
||||
- description: UART controller for Zynq-7xxx SoC
|
||||
items:
|
||||
- const: xlnx,xuartps
|
||||
- const: cdns,uart-r1p8
|
||||
- description: UART controller for Zynq Ultrascale+ MPSoC
|
||||
items:
|
||||
- const: xlnx,zynqmp-uart
|
||||
- const: cdns,uart-r1p12
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
clocks:
|
||||
maxItems: 2
|
||||
|
||||
clock-names:
|
||||
items:
|
||||
- const: uart_clk
|
||||
- const: pclk
|
||||
|
||||
cts-override:
|
||||
description: |
|
||||
Override the CTS modem status signal. This signal will
|
||||
always be reported as active instead of being obtained
|
||||
from the modem status register. Define this if your serial
|
||||
port does not use this pin.
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- clocks
|
||||
- clock-names
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
uart0: serial@e0000000 {
|
||||
compatible = "xlnx,xuartps", "cdns,uart-r1p8";
|
||||
clocks = <&clkc 23>, <&clkc 40>;
|
||||
clock-names = "uart_clk", "pclk";
|
||||
reg = <0xE0000000 0x1000>;
|
||||
interrupts = <0 27 4>;
|
||||
};
|
||||
@@ -15,6 +15,7 @@ Required properties:
|
||||
* "mediatek,mt7622-uart" for MT7622 compatible UARTS
|
||||
* "mediatek,mt7623-uart" for MT7623 compatible UARTS
|
||||
* "mediatek,mt7629-uart" for MT7629 compatible UARTS
|
||||
* "mediatek,mt7986-uart", "mediatek,mt6577-uart" for MT7986 compatible UARTS
|
||||
* "mediatek,mt8127-uart" for MT8127 compatible UARTS
|
||||
* "mediatek,mt8135-uart" for MT8135 compatible UARTS
|
||||
* "mediatek,mt8173-uart" for MT8173 compatible UARTS
|
||||
|
||||
@@ -204,9 +204,9 @@ srmcons_init(void)
|
||||
struct tty_driver *driver;
|
||||
int err;
|
||||
|
||||
driver = alloc_tty_driver(MAX_SRM_CONSOLE_DEVICES);
|
||||
if (!driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(MAX_SRM_CONSOLE_DEVICES, 0);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
tty_port_init(&srmcons_singleton.port);
|
||||
|
||||
@@ -221,7 +221,7 @@ srmcons_init(void)
|
||||
tty_port_link_device(&srmcons_singleton.port, driver, 0);
|
||||
err = tty_register_driver(driver);
|
||||
if (err) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
tty_port_destroy(&srmcons_singleton.port);
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -120,35 +120,37 @@ early_param("debug", nf_debug_setup);
|
||||
|
||||
static int __init nfcon_init(void)
|
||||
{
|
||||
struct tty_driver *driver;
|
||||
int res;
|
||||
|
||||
stderr_id = nf_get_id("NF_STDERR");
|
||||
if (!stderr_id)
|
||||
return -ENODEV;
|
||||
|
||||
nfcon_tty_driver = alloc_tty_driver(1);
|
||||
if (!nfcon_tty_driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(1, TTY_DRIVER_REAL_RAW);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
tty_port_init(&nfcon_tty_port);
|
||||
|
||||
nfcon_tty_driver->driver_name = "nfcon";
|
||||
nfcon_tty_driver->name = "nfcon";
|
||||
nfcon_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM;
|
||||
nfcon_tty_driver->subtype = SYSTEM_TYPE_TTY;
|
||||
nfcon_tty_driver->init_termios = tty_std_termios;
|
||||
nfcon_tty_driver->flags = TTY_DRIVER_REAL_RAW;
|
||||
driver->driver_name = "nfcon";
|
||||
driver->name = "nfcon";
|
||||
driver->type = TTY_DRIVER_TYPE_SYSTEM;
|
||||
driver->subtype = SYSTEM_TYPE_TTY;
|
||||
driver->init_termios = tty_std_termios;
|
||||
|
||||
tty_set_operations(nfcon_tty_driver, &nfcon_tty_ops);
|
||||
tty_port_link_device(&nfcon_tty_port, nfcon_tty_driver, 0);
|
||||
res = tty_register_driver(nfcon_tty_driver);
|
||||
tty_set_operations(driver, &nfcon_tty_ops);
|
||||
tty_port_link_device(&nfcon_tty_port, driver, 0);
|
||||
res = tty_register_driver(driver);
|
||||
if (res) {
|
||||
pr_err("failed to register nfcon tty driver\n");
|
||||
put_tty_driver(nfcon_tty_driver);
|
||||
tty_driver_kref_put(driver);
|
||||
tty_port_destroy(&nfcon_tty_port);
|
||||
return res;
|
||||
}
|
||||
|
||||
nfcon_tty_driver = driver;
|
||||
|
||||
if (!(nf_console.flags & CON_ENABLED))
|
||||
register_console(&nf_console);
|
||||
|
||||
@@ -159,7 +161,7 @@ static void __exit nfcon_exit(void)
|
||||
{
|
||||
unregister_console(&nf_console);
|
||||
tty_unregister_driver(nfcon_tty_driver);
|
||||
put_tty_driver(nfcon_tty_driver);
|
||||
tty_driver_kref_put(nfcon_tty_driver);
|
||||
tty_port_destroy(&nfcon_tty_port);
|
||||
}
|
||||
|
||||
|
||||
@@ -138,6 +138,7 @@ static struct tty_driver *pdc_console_tty_driver;
|
||||
|
||||
static int __init pdc_console_tty_driver_init(void)
|
||||
{
|
||||
struct tty_driver *driver;
|
||||
int err;
|
||||
|
||||
/* Check if the console driver is still registered.
|
||||
@@ -160,31 +161,32 @@ static int __init pdc_console_tty_driver_init(void)
|
||||
printk(KERN_INFO "The PDC console driver is still registered, removing CON_BOOT flag\n");
|
||||
pdc_cons.flags &= ~CON_BOOT;
|
||||
|
||||
pdc_console_tty_driver = alloc_tty_driver(1);
|
||||
|
||||
if (!pdc_console_tty_driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(1, TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_RESET_TERMIOS);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
tty_port_init(&tty_port);
|
||||
|
||||
pdc_console_tty_driver->driver_name = "pdc_cons";
|
||||
pdc_console_tty_driver->name = "ttyB";
|
||||
pdc_console_tty_driver->major = MUX_MAJOR;
|
||||
pdc_console_tty_driver->minor_start = 0;
|
||||
pdc_console_tty_driver->type = TTY_DRIVER_TYPE_SYSTEM;
|
||||
pdc_console_tty_driver->init_termios = tty_std_termios;
|
||||
pdc_console_tty_driver->flags = TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_RESET_TERMIOS;
|
||||
tty_set_operations(pdc_console_tty_driver, &pdc_console_tty_ops);
|
||||
tty_port_link_device(&tty_port, pdc_console_tty_driver, 0);
|
||||
driver->driver_name = "pdc_cons";
|
||||
driver->name = "ttyB";
|
||||
driver->major = MUX_MAJOR;
|
||||
driver->minor_start = 0;
|
||||
driver->type = TTY_DRIVER_TYPE_SYSTEM;
|
||||
driver->init_termios = tty_std_termios;
|
||||
tty_set_operations(driver, &pdc_console_tty_ops);
|
||||
tty_port_link_device(&tty_port, driver, 0);
|
||||
|
||||
err = tty_register_driver(pdc_console_tty_driver);
|
||||
err = tty_register_driver(driver);
|
||||
if (err) {
|
||||
printk(KERN_ERR "Unable to register the PDC console TTY driver\n");
|
||||
tty_port_destroy(&tty_port);
|
||||
tty_driver_kref_put(driver);
|
||||
return err;
|
||||
}
|
||||
|
||||
pdc_console_tty_driver = driver;
|
||||
|
||||
return 0;
|
||||
}
|
||||
device_initcall(pdc_console_tty_driver_init);
|
||||
|
||||
@@ -538,12 +538,14 @@ int register_lines(struct line_driver *line_driver,
|
||||
const struct tty_operations *ops,
|
||||
struct line *lines, int nlines)
|
||||
{
|
||||
struct tty_driver *driver = alloc_tty_driver(nlines);
|
||||
struct tty_driver *driver;
|
||||
int err;
|
||||
int i;
|
||||
|
||||
if (!driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(nlines, TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_DYNAMIC_DEV);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
driver->driver_name = line_driver->name;
|
||||
driver->name = line_driver->device_name;
|
||||
@@ -551,9 +553,8 @@ int register_lines(struct line_driver *line_driver,
|
||||
driver->minor_start = line_driver->minor_start;
|
||||
driver->type = line_driver->type;
|
||||
driver->subtype = line_driver->subtype;
|
||||
driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
|
||||
driver->init_termios = tty_std_termios;
|
||||
|
||||
|
||||
for (i = 0; i < nlines; i++) {
|
||||
tty_port_init(&lines[i].port);
|
||||
lines[i].port.ops = &line_port_ops;
|
||||
@@ -567,7 +568,7 @@ int register_lines(struct line_driver *line_driver,
|
||||
if (err) {
|
||||
printk(KERN_ERR "register_lines : can't register %s driver\n",
|
||||
line_driver->name);
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
for (i = 0; i < nlines; i++)
|
||||
tty_port_destroy(&lines[i].port);
|
||||
return err;
|
||||
|
||||
@@ -136,28 +136,41 @@ static const struct tty_operations serial_ops = {
|
||||
|
||||
static int __init rs_init(void)
|
||||
{
|
||||
tty_port_init(&serial_port);
|
||||
struct tty_driver *driver;
|
||||
int ret;
|
||||
|
||||
serial_driver = alloc_tty_driver(SERIAL_MAX_NUM_LINES);
|
||||
driver = tty_alloc_driver(SERIAL_MAX_NUM_LINES, TTY_DRIVER_REAL_RAW);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
tty_port_init(&serial_port);
|
||||
|
||||
/* Initialize the tty_driver structure */
|
||||
|
||||
serial_driver->driver_name = "iss_serial";
|
||||
serial_driver->name = "ttyS";
|
||||
serial_driver->major = TTY_MAJOR;
|
||||
serial_driver->minor_start = 64;
|
||||
serial_driver->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
serial_driver->subtype = SERIAL_TYPE_NORMAL;
|
||||
serial_driver->init_termios = tty_std_termios;
|
||||
serial_driver->init_termios.c_cflag =
|
||||
driver->driver_name = "iss_serial";
|
||||
driver->name = "ttyS";
|
||||
driver->major = TTY_MAJOR;
|
||||
driver->minor_start = 64;
|
||||
driver->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
driver->subtype = SERIAL_TYPE_NORMAL;
|
||||
driver->init_termios = tty_std_termios;
|
||||
driver->init_termios.c_cflag =
|
||||
B9600 | CS8 | CREAD | HUPCL | CLOCAL;
|
||||
serial_driver->flags = TTY_DRIVER_REAL_RAW;
|
||||
|
||||
tty_set_operations(serial_driver, &serial_ops);
|
||||
tty_port_link_device(&serial_port, serial_driver, 0);
|
||||
tty_set_operations(driver, &serial_ops);
|
||||
tty_port_link_device(&serial_port, driver, 0);
|
||||
|
||||
ret = tty_register_driver(driver);
|
||||
if (ret) {
|
||||
pr_err("Couldn't register serial driver\n");
|
||||
tty_driver_kref_put(driver);
|
||||
tty_port_destroy(&serial_port);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
serial_driver = driver;
|
||||
|
||||
if (tty_register_driver(serial_driver))
|
||||
panic("Couldn't register serial driver\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -165,7 +178,7 @@ static int __init rs_init(void)
|
||||
static __exit void rs_exit(void)
|
||||
{
|
||||
tty_unregister_driver(serial_driver);
|
||||
put_tty_driver(serial_driver);
|
||||
tty_driver_kref_put(serial_driver);
|
||||
tty_port_destroy(&serial_port);
|
||||
}
|
||||
|
||||
|
||||
@@ -2841,7 +2841,7 @@ static int __init synclink_cs_init(void)
|
||||
err_unreg_tty:
|
||||
tty_unregister_driver(serial_driver);
|
||||
err_put_tty:
|
||||
put_tty_driver(serial_driver);
|
||||
tty_driver_kref_put(serial_driver);
|
||||
err:
|
||||
return rc;
|
||||
}
|
||||
@@ -2850,7 +2850,7 @@ static void __exit synclink_cs_exit(void)
|
||||
{
|
||||
pcmcia_unregister_driver(&mgslpc_driver);
|
||||
tty_unregister_driver(serial_driver);
|
||||
put_tty_driver(serial_driver);
|
||||
tty_driver_kref_put(serial_driver);
|
||||
}
|
||||
|
||||
module_init(synclink_cs_init);
|
||||
|
||||
@@ -198,7 +198,7 @@ static int __init ttyprintk_init(void)
|
||||
return 0;
|
||||
|
||||
error:
|
||||
put_tty_driver(ttyprintk_driver);
|
||||
tty_driver_kref_put(ttyprintk_driver);
|
||||
tty_port_destroy(&tpk_port.port);
|
||||
return ret;
|
||||
}
|
||||
@@ -206,7 +206,7 @@ error:
|
||||
static void __exit ttyprintk_exit(void)
|
||||
{
|
||||
tty_unregister_driver(ttyprintk_driver);
|
||||
put_tty_driver(ttyprintk_driver);
|
||||
tty_driver_kref_put(ttyprintk_driver);
|
||||
tty_port_destroy(&tpk_port.port);
|
||||
}
|
||||
|
||||
|
||||
@@ -347,10 +347,10 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr,
|
||||
/* Register the TTY device */
|
||||
|
||||
/* Each IP-OCTAL channel is a TTY port */
|
||||
tty = alloc_tty_driver(NR_CHANNELS);
|
||||
|
||||
if (!tty)
|
||||
return -ENOMEM;
|
||||
tty = tty_alloc_driver(NR_CHANNELS, TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_DYNAMIC_DEV);
|
||||
if (IS_ERR(tty))
|
||||
return PTR_ERR(tty);
|
||||
|
||||
/* Fill struct tty_driver with ipoctal data */
|
||||
tty->owner = THIS_MODULE;
|
||||
@@ -362,7 +362,6 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr,
|
||||
tty->minor_start = 0;
|
||||
tty->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
tty->subtype = SERIAL_TYPE_NORMAL;
|
||||
tty->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
|
||||
tty->init_termios = tty_std_termios;
|
||||
tty->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
|
||||
tty->init_termios.c_ispeed = 9600;
|
||||
@@ -372,7 +371,7 @@ static int ipoctal_inst_slot(struct ipoctal *ipoctal, unsigned int bus_nr,
|
||||
res = tty_register_driver(tty);
|
||||
if (res) {
|
||||
dev_err(&ipoctal->dev->dev, "Can't register tty driver.\n");
|
||||
put_tty_driver(tty);
|
||||
tty_driver_kref_put(tty);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -697,7 +696,7 @@ static void __ipoctal_remove(struct ipoctal *ipoctal)
|
||||
}
|
||||
|
||||
tty_unregister_driver(ipoctal->tty_drv);
|
||||
put_tty_driver(ipoctal->tty_drv);
|
||||
tty_driver_kref_put(ipoctal->tty_drv);
|
||||
kfree(ipoctal);
|
||||
}
|
||||
|
||||
|
||||
@@ -1269,10 +1269,11 @@ static int __init capinc_tty_init(void)
|
||||
if (!capiminors)
|
||||
return -ENOMEM;
|
||||
|
||||
drv = alloc_tty_driver(capi_ttyminors);
|
||||
if (!drv) {
|
||||
drv = tty_alloc_driver(capi_ttyminors, TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_RESET_TERMIOS | TTY_DRIVER_DYNAMIC_DEV);
|
||||
if (IS_ERR(drv)) {
|
||||
kfree(capiminors);
|
||||
return -ENOMEM;
|
||||
return PTR_ERR(drv);
|
||||
}
|
||||
drv->driver_name = "capi_nc";
|
||||
drv->name = "capi!";
|
||||
@@ -1285,14 +1286,11 @@ static int __init capinc_tty_init(void)
|
||||
drv->init_termios.c_oflag = OPOST | ONLCR;
|
||||
drv->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
|
||||
drv->init_termios.c_lflag = 0;
|
||||
drv->flags =
|
||||
TTY_DRIVER_REAL_RAW | TTY_DRIVER_RESET_TERMIOS |
|
||||
TTY_DRIVER_DYNAMIC_DEV;
|
||||
tty_set_operations(drv, &capinc_ops);
|
||||
|
||||
err = tty_register_driver(drv);
|
||||
if (err) {
|
||||
put_tty_driver(drv);
|
||||
tty_driver_kref_put(drv);
|
||||
kfree(capiminors);
|
||||
printk(KERN_ERR "Couldn't register capi_nc driver\n");
|
||||
return err;
|
||||
@@ -1304,7 +1302,7 @@ static int __init capinc_tty_init(void)
|
||||
static void __exit capinc_tty_exit(void)
|
||||
{
|
||||
tty_unregister_driver(capinc_tty_driver);
|
||||
put_tty_driver(capinc_tty_driver);
|
||||
tty_driver_kref_put(capinc_tty_driver);
|
||||
kfree(capiminors);
|
||||
}
|
||||
|
||||
|
||||
@@ -249,7 +249,7 @@ int bcm_vk_tty_init(struct bcm_vk *vk, char *name)
|
||||
tty_drv->name = kstrdup(name, GFP_KERNEL);
|
||||
if (!tty_drv->name) {
|
||||
err = -ENOMEM;
|
||||
goto err_put_tty_driver;
|
||||
goto err_tty_driver_kref_put;
|
||||
}
|
||||
tty_drv->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
tty_drv->subtype = SERIAL_TYPE_NORMAL;
|
||||
@@ -295,8 +295,8 @@ err_kfree_tty_name:
|
||||
kfree(tty_drv->name);
|
||||
tty_drv->name = NULL;
|
||||
|
||||
err_put_tty_driver:
|
||||
put_tty_driver(tty_drv);
|
||||
err_tty_driver_kref_put:
|
||||
tty_driver_kref_put(tty_drv);
|
||||
|
||||
return err;
|
||||
}
|
||||
@@ -317,7 +317,7 @@ void bcm_vk_tty_exit(struct bcm_vk *vk)
|
||||
kfree(vk->tty_drv->name);
|
||||
vk->tty_drv->name = NULL;
|
||||
|
||||
put_tty_driver(vk->tty_drv);
|
||||
tty_driver_kref_put(vk->tty_drv);
|
||||
}
|
||||
|
||||
void bcm_vk_tty_terminate_tty_user(struct bcm_vk *vk)
|
||||
|
||||
@@ -1135,9 +1135,10 @@ static int __init sdio_uart_init(void)
|
||||
int ret;
|
||||
struct tty_driver *tty_drv;
|
||||
|
||||
sdio_uart_tty_driver = tty_drv = alloc_tty_driver(UART_NR);
|
||||
if (!tty_drv)
|
||||
return -ENOMEM;
|
||||
sdio_uart_tty_driver = tty_drv = tty_alloc_driver(UART_NR,
|
||||
TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV);
|
||||
if (IS_ERR(tty_drv))
|
||||
return PTR_ERR(tty_drv);
|
||||
|
||||
tty_drv->driver_name = "sdio_uart";
|
||||
tty_drv->name = "ttySDIO";
|
||||
@@ -1145,7 +1146,6 @@ static int __init sdio_uart_init(void)
|
||||
tty_drv->minor_start = 0;
|
||||
tty_drv->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
tty_drv->subtype = SERIAL_TYPE_NORMAL;
|
||||
tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
|
||||
tty_drv->init_termios = tty_std_termios;
|
||||
tty_drv->init_termios.c_cflag = B4800 | CS8 | CREAD | HUPCL | CLOCAL;
|
||||
tty_drv->init_termios.c_ispeed = 4800;
|
||||
@@ -1165,7 +1165,7 @@ static int __init sdio_uart_init(void)
|
||||
err2:
|
||||
tty_unregister_driver(tty_drv);
|
||||
err1:
|
||||
put_tty_driver(tty_drv);
|
||||
tty_driver_kref_put(tty_drv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1173,7 +1173,7 @@ static void __exit sdio_uart_exit(void)
|
||||
{
|
||||
sdio_unregister_driver(&sdio_uart_driver);
|
||||
tty_unregister_driver(sdio_uart_tty_driver);
|
||||
put_tty_driver(sdio_uart_tty_driver);
|
||||
tty_driver_kref_put(sdio_uart_tty_driver);
|
||||
}
|
||||
|
||||
module_init(sdio_uart_init);
|
||||
|
||||
@@ -3241,9 +3241,10 @@ static int __init hso_init(void)
|
||||
serial_table[i] = NULL;
|
||||
|
||||
/* allocate our driver using the proper amount of supported minors */
|
||||
tty_drv = alloc_tty_driver(HSO_SERIAL_TTY_MINORS);
|
||||
if (!tty_drv)
|
||||
return -ENOMEM;
|
||||
tty_drv = tty_alloc_driver(HSO_SERIAL_TTY_MINORS, TTY_DRIVER_REAL_RAW |
|
||||
TTY_DRIVER_DYNAMIC_DEV);
|
||||
if (IS_ERR(tty_drv))
|
||||
return PTR_ERR(tty_drv);
|
||||
|
||||
/* fill in all needed values */
|
||||
tty_drv->driver_name = driver_name;
|
||||
@@ -3256,7 +3257,6 @@ static int __init hso_init(void)
|
||||
tty_drv->minor_start = 0;
|
||||
tty_drv->type = TTY_DRIVER_TYPE_SERIAL;
|
||||
tty_drv->subtype = SERIAL_TYPE_NORMAL;
|
||||
tty_drv->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
|
||||
tty_drv->init_termios = tty_std_termios;
|
||||
hso_init_termios(&tty_drv->init_termios);
|
||||
tty_set_operations(tty_drv, &hso_serial_ops);
|
||||
@@ -3281,7 +3281,7 @@ static int __init hso_init(void)
|
||||
err_unreg_tty:
|
||||
tty_unregister_driver(tty_drv);
|
||||
err_free_tty:
|
||||
put_tty_driver(tty_drv);
|
||||
tty_driver_kref_put(tty_drv);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -3292,7 +3292,7 @@ static void __exit hso_exit(void)
|
||||
tty_unregister_driver(tty_drv);
|
||||
/* deregister the usb driver */
|
||||
usb_deregister(&hso_driver);
|
||||
put_tty_driver(tty_drv);
|
||||
tty_driver_kref_put(tty_drv);
|
||||
}
|
||||
|
||||
/* Module definitions */
|
||||
|
||||
@@ -301,20 +301,13 @@ static acpi_status ssam_serdev_setup_via_acpi_crs(struct acpi_resource *rsc,
|
||||
void *ctx)
|
||||
{
|
||||
struct serdev_device *serdev = ctx;
|
||||
struct acpi_resource_common_serialbus *serial;
|
||||
struct acpi_resource_uart_serialbus *uart;
|
||||
bool flow_control;
|
||||
int status = 0;
|
||||
|
||||
if (rsc->type != ACPI_RESOURCE_TYPE_SERIAL_BUS)
|
||||
if (!serdev_acpi_get_uart_resource(rsc, &uart))
|
||||
return AE_OK;
|
||||
|
||||
serial = &rsc->data.common_serial_bus;
|
||||
if (serial->type != ACPI_RESOURCE_SERIAL_TYPE_UART)
|
||||
return AE_OK;
|
||||
|
||||
uart = &rsc->data.uart_serial_bus;
|
||||
|
||||
/* Set up serdev device. */
|
||||
serdev_device_set_baudrate(serdev, uart->default_baud_rate);
|
||||
|
||||
|
||||
@@ -1076,13 +1076,13 @@ static int __init tty3215_init(void)
|
||||
if (!CONSOLE_IS_3215)
|
||||
return 0;
|
||||
|
||||
driver = alloc_tty_driver(NR_3215);
|
||||
if (!driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(NR_3215, TTY_DRIVER_REAL_RAW);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
ret = ccw_driver_register(&raw3215_ccw_driver);
|
||||
if (ret) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
return ret;
|
||||
}
|
||||
/*
|
||||
@@ -1101,11 +1101,10 @@ static int __init tty3215_init(void)
|
||||
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
||||
driver->init_termios.c_oflag = ONLCR;
|
||||
driver->init_termios.c_lflag = ISIG;
|
||||
driver->flags = TTY_DRIVER_REAL_RAW;
|
||||
tty_set_operations(driver, &tty3215_ops);
|
||||
ret = tty_register_driver(driver);
|
||||
if (ret) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
return ret;
|
||||
}
|
||||
tty3215_driver = driver;
|
||||
|
||||
@@ -503,20 +503,20 @@ sclp_tty_init(void)
|
||||
return 0;
|
||||
if (!sclp.has_linemode)
|
||||
return 0;
|
||||
driver = alloc_tty_driver(1);
|
||||
if (!driver)
|
||||
return -ENOMEM;
|
||||
driver = tty_alloc_driver(1, TTY_DRIVER_REAL_RAW);
|
||||
if (IS_ERR(driver))
|
||||
return PTR_ERR(driver);
|
||||
|
||||
rc = sclp_rw_init();
|
||||
if (rc) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
return rc;
|
||||
}
|
||||
/* Allocate pages for output buffering */
|
||||
for (i = 0; i < MAX_KMEM_PAGES; i++) {
|
||||
page = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA);
|
||||
if (page == NULL) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
return -ENOMEM;
|
||||
}
|
||||
list_add_tail((struct list_head *) page, &sclp_tty_pages);
|
||||
@@ -532,7 +532,7 @@ sclp_tty_init(void)
|
||||
|
||||
rc = sclp_register(&sclp_input_event);
|
||||
if (rc) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -548,12 +548,11 @@ sclp_tty_init(void)
|
||||
driver->init_termios.c_iflag = IGNBRK | IGNPAR;
|
||||
driver->init_termios.c_oflag = ONLCR;
|
||||
driver->init_termios.c_lflag = ISIG | ECHO;
|
||||
driver->flags = TTY_DRIVER_REAL_RAW;
|
||||
tty_set_operations(driver, &sclp_ops);
|
||||
tty_port_link_device(&sclp_port, driver, 0);
|
||||
rc = tty_register_driver(driver);
|
||||
if (rc) {
|
||||
put_tty_driver(driver);
|
||||
tty_driver_kref_put(driver);
|
||||
tty_port_destroy(&sclp_port);
|
||||
return rc;
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user