mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	put_tty_driver() is an alias for tty_driver_kref_put(). There is no need for two exported identical functions, therefore switch all users of old put_tty_driver() to new tty_driver_kref_put() and remove the former for good. Cc: Richard Henderson <rth@twiddle.net> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Matt Turner <mattst88@gmail.com> Cc: Geert Uytterhoeven <geert@linux-m68k.org> Cc: Jeff Dike <jdike@addtoit.com> Cc: Richard Weinberger <richard@nod.at> Cc: Anton Ivanov <anton.ivanov@cambridgegreys.com> Cc: Chris Zankel <chris@zankel.net> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Samuel Iglesias Gonsalvez <siglesias@igalia.com> Cc: Jens Taprogge <jens.taprogge@taprogge.org> Cc: Karsten Keil <isdn@linux-pingi.de> Cc: Scott Branden <scott.branden@broadcom.com> Cc: Ulf Hansson <ulf.hansson@linaro.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Cc: David Lin <dtwlin@gmail.com> Cc: Johan Hovold <johan@kernel.org> Cc: Alex Elder <elder@kernel.org> Cc: Jiri Slaby <jirislaby@kernel.org> Cc: Laurentiu Tudor <laurentiu.tudor@nxp.com> Cc: Jiri Kosina <jikos@kernel.org> Cc: David Sterba <dsterba@suse.com> Cc: Shawn Guo <shawnguo@kernel.org> Cc: Sascha Hauer <s.hauer@pengutronix.de> Cc: Pengutronix Kernel Team <kernel@pengutronix.de> Cc: Fabio Estevam <festevam@gmail.com> Cc: NXP Linux Team <linux-imx@nxp.com> Cc: Oliver Neukum <oneukum@suse.com> Cc: Felipe Balbi <balbi@kernel.org> Cc: Mathias Nyman <mathias.nyman@intel.com> Cc: Marcel Holtmann <marcel@holtmann.org> Cc: Johan Hedberg <johan.hedberg@gmail.com> Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com> Acked-by: Alex Elder <elder@linaro.org> Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> Acked-by: Max Filippov <jcmvbkbc@gmail.com> Acked-by: David Sterba <dsterba@suse.com> Acked-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com> Signed-off-by: Jiri Slaby <jslaby@suse.cz> Link: https://lore.kernel.org/r/20210723074317.32690-8-jslaby@suse.cz Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SPDX-License-Identifier: GPL-2.0
 | 
						|
/*
 | 
						|
 * Copyright (C) 2019 Axis Communications AB
 | 
						|
 *
 | 
						|
 * Based on ttyprintk.c:
 | 
						|
 *  Copyright (C) 2010 Samo Pogacnik
 | 
						|
 */
 | 
						|
 | 
						|
#include <linux/console.h>
 | 
						|
#include <linux/module.h>
 | 
						|
#include <linux/tty.h>
 | 
						|
 | 
						|
static const struct tty_port_operations ttynull_port_ops;
 | 
						|
static struct tty_driver *ttynull_driver;
 | 
						|
static struct tty_port ttynull_port;
 | 
						|
 | 
						|
static int ttynull_open(struct tty_struct *tty, struct file *filp)
 | 
						|
{
 | 
						|
	return tty_port_open(&ttynull_port, tty, filp);
 | 
						|
}
 | 
						|
 | 
						|
static void ttynull_close(struct tty_struct *tty, struct file *filp)
 | 
						|
{
 | 
						|
	tty_port_close(&ttynull_port, tty, filp);
 | 
						|
}
 | 
						|
 | 
						|
static void ttynull_hangup(struct tty_struct *tty)
 | 
						|
{
 | 
						|
	tty_port_hangup(&ttynull_port);
 | 
						|
}
 | 
						|
 | 
						|
static int ttynull_write(struct tty_struct *tty, const unsigned char *buf,
 | 
						|
			 int count)
 | 
						|
{
 | 
						|
	return count;
 | 
						|
}
 | 
						|
 | 
						|
static unsigned int ttynull_write_room(struct tty_struct *tty)
 | 
						|
{
 | 
						|
	return 65536;
 | 
						|
}
 | 
						|
 | 
						|
static const struct tty_operations ttynull_ops = {
 | 
						|
	.open = ttynull_open,
 | 
						|
	.close = ttynull_close,
 | 
						|
	.hangup = ttynull_hangup,
 | 
						|
	.write = ttynull_write,
 | 
						|
	.write_room = ttynull_write_room,
 | 
						|
};
 | 
						|
 | 
						|
static struct tty_driver *ttynull_device(struct console *c, int *index)
 | 
						|
{
 | 
						|
	*index = 0;
 | 
						|
	return ttynull_driver;
 | 
						|
}
 | 
						|
 | 
						|
static struct console ttynull_console = {
 | 
						|
	.name = "ttynull",
 | 
						|
	.device = ttynull_device,
 | 
						|
};
 | 
						|
 | 
						|
static int __init ttynull_init(void)
 | 
						|
{
 | 
						|
	struct tty_driver *driver;
 | 
						|
	int ret;
 | 
						|
 | 
						|
	driver = tty_alloc_driver(1,
 | 
						|
		TTY_DRIVER_RESET_TERMIOS |
 | 
						|
		TTY_DRIVER_REAL_RAW |
 | 
						|
		TTY_DRIVER_UNNUMBERED_NODE);
 | 
						|
	if (IS_ERR(driver))
 | 
						|
		return PTR_ERR(driver);
 | 
						|
 | 
						|
	tty_port_init(&ttynull_port);
 | 
						|
	ttynull_port.ops = &ttynull_port_ops;
 | 
						|
 | 
						|
	driver->driver_name = "ttynull";
 | 
						|
	driver->name = "ttynull";
 | 
						|
	driver->type = TTY_DRIVER_TYPE_CONSOLE;
 | 
						|
	driver->init_termios = tty_std_termios;
 | 
						|
	driver->init_termios.c_oflag = OPOST | OCRNL | ONOCR | ONLRET;
 | 
						|
	tty_set_operations(driver, &ttynull_ops);
 | 
						|
	tty_port_link_device(&ttynull_port, driver, 0);
 | 
						|
 | 
						|
	ret = tty_register_driver(driver);
 | 
						|
	if (ret < 0) {
 | 
						|
		tty_driver_kref_put(driver);
 | 
						|
		tty_port_destroy(&ttynull_port);
 | 
						|
		return ret;
 | 
						|
	}
 | 
						|
 | 
						|
	ttynull_driver = driver;
 | 
						|
	register_console(&ttynull_console);
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
static void __exit ttynull_exit(void)
 | 
						|
{
 | 
						|
	unregister_console(&ttynull_console);
 | 
						|
	tty_unregister_driver(ttynull_driver);
 | 
						|
	tty_driver_kref_put(ttynull_driver);
 | 
						|
	tty_port_destroy(&ttynull_port);
 | 
						|
}
 | 
						|
 | 
						|
module_init(ttynull_init);
 | 
						|
module_exit(ttynull_exit);
 | 
						|
 | 
						|
MODULE_LICENSE("GPL v2");
 |