Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6fd69d3c authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Linus Torvalds
Browse files

proc tty: switch usb-serial to ->proc_fops



Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent d196a949
Loading
Loading
Loading
Loading
+27 −31
Original line number Original line Diff line number Diff line
@@ -26,6 +26,7 @@
#include <linux/tty_flip.h>
#include <linux/tty_flip.h>
#include <linux/module.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/moduleparam.h>
#include <linux/seq_file.h>
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/mutex.h>
#include <linux/mutex.h>
#include <linux/list.h>
#include <linux/list.h>
@@ -421,57 +422,52 @@ static int serial_break(struct tty_struct *tty, int break_state)
	return 0;
	return 0;
}
}


static int serial_read_proc(char *page, char **start, off_t off, int count,
static int serial_proc_show(struct seq_file *m, void *v)
							int *eof, void *data)
{
{
	struct usb_serial *serial;
	struct usb_serial *serial;
	int length = 0;
	int i;
	int i;
	off_t begin = 0;
	char tmp[40];
	char tmp[40];


	dbg("%s", __func__);
	dbg("%s", __func__);
	length += sprintf(page, "usbserinfo:1.0 driver:2.0\n");
	seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
	for (i = 0; i < SERIAL_TTY_MINORS && length < PAGE_SIZE; ++i) {
	for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
		serial = usb_serial_get_by_index(i);
		serial = usb_serial_get_by_index(i);
		if (serial == NULL)
		if (serial == NULL)
			continue;
			continue;


		length += sprintf(page+length, "%d:", i);
		seq_printf(m, "%d:", i);
		if (serial->type->driver.owner)
		if (serial->type->driver.owner)
			length += sprintf(page+length, " module:%s",
			seq_printf(m, " module:%s",
				module_name(serial->type->driver.owner));
				module_name(serial->type->driver.owner));
		length += sprintf(page+length, " name:\"%s\"",
		seq_printf(m, " name:\"%s\"",
				serial->type->description);
				serial->type->description);
		length += sprintf(page+length, " vendor:%04x product:%04x",
		seq_printf(m, " vendor:%04x product:%04x",
			le16_to_cpu(serial->dev->descriptor.idVendor),
			le16_to_cpu(serial->dev->descriptor.idVendor),
			le16_to_cpu(serial->dev->descriptor.idProduct));
			le16_to_cpu(serial->dev->descriptor.idProduct));
		length += sprintf(page+length, " num_ports:%d",
		seq_printf(m, " num_ports:%d", serial->num_ports);
							serial->num_ports);
		seq_printf(m, " port:%d", i - serial->minor + 1);
		length += sprintf(page+length, " port:%d",
							i - serial->minor + 1);
		usb_make_path(serial->dev, tmp, sizeof(tmp));
		usb_make_path(serial->dev, tmp, sizeof(tmp));
		length += sprintf(page+length, " path:%s", tmp);
		seq_printf(m, " path:%s", tmp);


		length += sprintf(page+length, "\n");
		seq_putc(m, '\n');
		if ((length + begin) > (off + count)) {
		usb_serial_put(serial);
		usb_serial_put(serial);
			goto done;
		}
		if ((length + begin) < off) {
			begin += length;
			length = 0;
	}
	}
		usb_serial_put(serial);
	}
	*eof = 1;
done:
	if (off >= (length + begin))
	return 0;
	return 0;
	*start = page + (off-begin);
	return (count < begin+length-off) ? count : begin+length-off;
}
}


static int serial_proc_open(struct inode *inode, struct file *file)
{
	return single_open(file, serial_proc_show, NULL);
}

static const struct file_operations serial_proc_fops = {
	.owner		= THIS_MODULE,
	.open		= serial_proc_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

static int serial_tiocmget(struct tty_struct *tty, struct file *file)
static int serial_tiocmget(struct tty_struct *tty, struct file *file)
{
{
	struct usb_serial_port *port = tty->driver_data;
	struct usb_serial_port *port = tty->driver_data;
@@ -1113,9 +1109,9 @@ static const struct tty_operations serial_ops = {
	.unthrottle =		serial_unthrottle,
	.unthrottle =		serial_unthrottle,
	.break_ctl =		serial_break,
	.break_ctl =		serial_break,
	.chars_in_buffer =	serial_chars_in_buffer,
	.chars_in_buffer =	serial_chars_in_buffer,
	.read_proc =		serial_read_proc,
	.tiocmget =		serial_tiocmget,
	.tiocmget =		serial_tiocmget,
	.tiocmset =		serial_tiocmset,
	.tiocmset =		serial_tiocmset,
	.proc_fops =		&serial_proc_fops,
};
};


struct tty_driver *usb_serial_tty_driver;
struct tty_driver *usb_serial_tty_driver;