aboutsummaryrefslogtreecommitdiffstats
diff options
-rw-r--r--cdc-acm.patch115
-rw-r--r--series4
-rw-r--r--usb-serial-idr.patch597
-rw-r--r--usb-serial-increase-the-number-of-devices-we-support.patch76
-rw-r--r--usb-serial-ports-add-minor-and-port-number.patch1136
5 files changed, 0 insertions, 1928 deletions
diff --git a/cdc-acm.patch b/cdc-acm.patch
deleted file mode 100644
index 80573ccb2ea33e..00000000000000
--- a/cdc-acm.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From foo@baz Fri Jun 7 11:21:41 PDT 2013
-Date: Fri, 07 Jun 2013 11:21:41 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: [PATCH] USB: cdc-acm: remove unneeded spinlock call on write path
-
-When writing data we were:
- lock
- do some work
- unlock
- call function
- lock
- do some work
- unlock
- return
- return
-
-It turns out, that "function" was only ever called in the one place, so
-instead of locking/unlocking for no good reason, just inline the
-function and only grab the lock once.
-
-This has sped up the pathological case of sending 1 byte packets to a
-loop-back cdc-acm device from 49600 bytes per second to 50100 bytes a
-second on my workstation. A tiny increase yes, but noticable, and now
-the spinlock isn't the hottest thing on the perf graph anymore. Yes, we
-are still waiting for the hardware for the most part, but getting rid of
-a spinlock_irq_save() call for every packet is still a good thing.
-
-And we end up deleting lines of code, always a win overall.
-
-This was found by using a Teensy 3.0 device and the test program and
-firmware located at:
- http://www.pjrc.com/teensy/benchmark_usb_serial_receive.html
-
-Reported-by: Paul Stoffregen <paul@pjrc.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/usb/class/cdc-acm.c | 52 ++++++++++++++++----------------------------
- 1 file changed, 19 insertions(+), 33 deletions(-)
-
---- a/drivers/usb/class/cdc-acm.c
-+++ b/drivers/usb/class/cdc-acm.c
-@@ -216,38 +216,6 @@ static int acm_start_wb(struct acm *acm,
- return rc;
- }
-
--static int acm_write_start(struct acm *acm, int wbn)
--{
-- unsigned long flags;
-- struct acm_wb *wb = &acm->wb[wbn];
-- int rc;
--
-- spin_lock_irqsave(&acm->write_lock, flags);
-- if (!acm->dev) {
-- wb->use = 0;
-- spin_unlock_irqrestore(&acm->write_lock, flags);
-- return -ENODEV;
-- }
--
-- dev_vdbg(&acm->data->dev, "%s - susp_count %d\n", __func__,
-- acm->susp_count);
-- usb_autopm_get_interface_async(acm->control);
-- if (acm->susp_count) {
-- if (!acm->delayed_wb)
-- acm->delayed_wb = wb;
-- else
-- usb_autopm_put_interface_async(acm->control);
-- spin_unlock_irqrestore(&acm->write_lock, flags);
-- return 0; /* A white lie */
-- }
-- usb_mark_last_busy(acm->dev);
--
-- rc = acm_start_wb(acm, wb);
-- spin_unlock_irqrestore(&acm->write_lock, flags);
--
-- return rc;
--
--}
- /*
- * attributes exported through sysfs
- */
-@@ -653,13 +621,31 @@ static int acm_tty_write(struct tty_stru
- }
- wb = &acm->wb[wbn];
-
-+ if (!acm->dev) {
-+ wb->use = 0;
-+ spin_unlock_irqrestore(&acm->write_lock, flags);
-+ return -ENODEV;
-+ }
-+
- count = (count > acm->writesize) ? acm->writesize : count;
- dev_vdbg(&acm->data->dev, "%s - write %d\n", __func__, count);
- memcpy(wb->buf, buf, count);
- wb->len = count;
-+
-+ usb_autopm_get_interface_async(acm->control);
-+ if (acm->susp_count) {
-+ if (!acm->delayed_wb)
-+ acm->delayed_wb = wb;
-+ else
-+ usb_autopm_put_interface_async(acm->control);
-+ spin_unlock_irqrestore(&acm->write_lock, flags);
-+ return count; /* A white lie */
-+ }
-+ usb_mark_last_busy(acm->dev);
-+
-+ stat = acm_start_wb(acm, wb);
- spin_unlock_irqrestore(&acm->write_lock, flags);
-
-- stat = acm_write_start(acm, wbn);
- if (stat < 0)
- return stat;
- return count;
diff --git a/series b/series
index 64986066db4b23..ad90e8cd574a9a 100644
--- a/series
+++ b/series
@@ -29,10 +29,6 @@ usb-remove-unneeded-idr.h-include.patch
usb-sl811-move-debug-files-from-proc-to-debugfs.patch
usb-isp1362-move-debug-files-from-proc-to-debugfs.patch
-cdc-acm.patch
-usb-serial-ports-add-minor-and-port-number.patch
-usb-serial-idr.patch
-usb-serial-increase-the-number-of-devices-we-support.patch
0001-Simulate-fake-Fn-key-on-PS-2-keyboards-w-o-one-eg.-C.patch
diff --git a/usb-serial-idr.patch b/usb-serial-idr.patch
deleted file mode 100644
index 1769d13bbab824..00000000000000
--- a/usb-serial-idr.patch
+++ /dev/null
@@ -1,597 +0,0 @@
-From foo@baz Tue Jun 4 12:06:11 PDT 2013
-Date: Tue, 04 Jun 2013 12:06:11 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: [PATCH v3 2/3] USB: serial: make minor allocation dynamic
-
-This moves the allocation of minor device numbers from a static array to
-be dynamic, using the idr interface. This means that you could
-potentially get "gaps" in a minor number range for a single USB serial
-device with multiple ports, but all should still work properly.
-
-We remove the 'minor' field from the usb_serial structure, as it no
-longer makes any sense for it (use the field in the usb_serial_port
-structure if you really want to know this number), and take the fact
-that we were overloading a number in this field to determine if we had
-initialized the minor numbers or not, and just use a flag variable
-instead.
-
-Note, we still have the limitation of 255 USB to serial devices in the
-system, as that is all we are registering with the TTY layer at this
-point in time.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
-Changes v2 - v3:
- - fixed up comments about usb_serial_get_by_minor()
- - fixed error case in usb_serial_get_by_minor()
- - folded get_free_port() into get_free_serial()
- - renamed get_free_serial() to allocate_minors()
- - fixed console.c build breakage
- - properly pass in minor port number to usb_serial_console_init()
-
-
- drivers/staging/serqt_usb2/serqt_usb2.c | 15 +---
- drivers/usb/serial/ark3116.c | 2
- drivers/usb/serial/console.c | 6 -
- drivers/usb/serial/f81232.c | 2
- drivers/usb/serial/io_edgeport.c | 2
- drivers/usb/serial/io_ti.c | 2
- drivers/usb/serial/mos7720.c | 2
- drivers/usb/serial/mos7840.c | 7 -
- drivers/usb/serial/opticon.c | 2
- drivers/usb/serial/pl2303.c | 2
- drivers/usb/serial/quatech2.c | 2
- drivers/usb/serial/ssu100.c | 2
- drivers/usb/serial/ti_usb_3410_5052.c | 2
- drivers/usb/serial/usb-serial.c | 119 ++++++++++++++------------------
- drivers/usb/serial/usb_wwan.c | 2
- drivers/usb/serial/whiteheat.c | 2
- include/linux/usb/serial.h | 6 -
- 17 files changed, 80 insertions(+), 97 deletions(-)
-
---- a/drivers/staging/serqt_usb2/serqt_usb2.c
-+++ b/drivers/staging/serqt_usb2/serqt_usb2.c
-@@ -906,7 +906,7 @@ static int qt_open(struct tty_struct *tt
- qt_submit_urb_from_open(serial, port);
- }
-
-- dev_dbg(&port->dev, "serial number is %d\n", port->serial->minor);
-+ dev_dbg(&port->dev, "minor number is %d\n", port->minor);
- dev_dbg(&port->dev,
- "Bulkin endpoint is %d\n", port->bulk_in_endpointAddress);
- dev_dbg(&port->dev,
-@@ -1002,7 +1002,7 @@ static void qt_close(struct usb_serial_p
- status = 0;
-
- tty = tty_port_tty_get(&port->port);
-- index = tty->index - serial->minor;
-+ index = port->port_number;
-
- qt_port = qt_get_port_private(port);
- port0 = qt_get_port_private(serial->port[0]);
-@@ -1129,12 +1129,11 @@ static int qt_ioctl(struct tty_struct *t
- {
- struct usb_serial_port *port = tty->driver_data;
- struct quatech_port *qt_port = qt_get_port_private(port);
-- struct usb_serial *serial = get_usb_serial(port, __func__);
- unsigned int index;
-
- dev_dbg(&port->dev, "%s cmd 0x%04x\n", __func__, cmd);
-
-- index = tty->index - serial->minor;
-+ index = port->port_number;
-
- if (cmd == TIOCMIWAIT) {
- while (qt_port != NULL) {
-@@ -1180,7 +1179,7 @@ static void qt_set_termios(struct tty_st
- int baud, divisor, remainder;
- int status;
-
-- index = tty->index - port->serial->minor;
-+ index = port->port_number;
-
- switch (cflag & CSIZE) {
- case CS5:
-@@ -1296,7 +1295,7 @@ static void qt_break(struct tty_struct *
- u16 index, onoff;
- unsigned int result;
-
-- index = tty->index - serial->minor;
-+ index = port->port_number;
-
- qt_port = qt_get_port_private(port);
-
-@@ -1325,7 +1324,7 @@ static inline int qt_real_tiocmget(struc
- int status;
- unsigned int index;
-
-- index = tty->index - serial->minor;
-+ index = port->port_number;
- status =
- BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr);
- if (status >= 0) {
-@@ -1364,7 +1363,7 @@ static inline int qt_real_tiocmset(struc
- int status;
- unsigned int index;
-
-- index = tty->index - serial->minor;
-+ index = port->port_number;
- status =
- BoxGetRegister(port->serial, index, MODEM_CONTROL_REGISTER, &mcr);
- if (status < 0)
---- a/drivers/usb/serial/ark3116.c
-+++ b/drivers/usb/serial/ark3116.c
-@@ -413,7 +413,7 @@ static int ark3116_ioctl(struct tty_stru
- /* XXX: Some of these values are probably wrong. */
- memset(&serstruct, 0, sizeof(serstruct));
- serstruct.type = PORT_16654;
-- serstruct.line = port->serial->minor;
-+ serstruct.line = port->minor;
- serstruct.port = port->port_number;
- serstruct.custom_divisor = 0;
- serstruct.baud_base = 460800;
---- a/drivers/usb/serial/console.c
-+++ b/drivers/usb/serial/console.c
-@@ -108,18 +108,18 @@ static int usb_console_setup(struct cons
- * no need to check the index here: if the index is wrong, console
- * code won't call us
- */
-- serial = usb_serial_get_by_index(co->index);
-- if (serial == NULL) {
-+ port = usb_serial_port_get_by_minor(co->index);
-+ if (port == NULL) {
- /* no device is connected yet, sorry :( */
- pr_err("No USB device connected to ttyUSB%i\n", co->index);
- return -ENODEV;
- }
-+ serial = port->serial;
-
- retval = usb_autopm_get_interface(serial->interface);
- if (retval)
- goto error_get_interface;
-
-- port = serial->port[co->index - serial->minor];
- tty_port_tty_set(&port->port, NULL);
-
- info->port = port;
---- a/drivers/usb/serial/f81232.c
-+++ b/drivers/usb/serial/f81232.c
-@@ -294,7 +294,7 @@ static int f81232_ioctl(struct tty_struc
- case TIOCGSERIAL:
- memset(&ser, 0, sizeof ser);
- ser.type = PORT_16654;
-- ser.line = port->serial->minor;
-+ ser.line = port->minor;
- ser.port = port->port_number;
- ser.baud_base = 460800;
-
---- a/drivers/usb/serial/io_edgeport.c
-+++ b/drivers/usb/serial/io_edgeport.c
-@@ -1569,7 +1569,7 @@ static int get_serial_info(struct edgepo
- memset(&tmp, 0, sizeof(tmp));
-
- tmp.type = PORT_16550A;
-- tmp.line = edge_port->port->serial->minor;
-+ tmp.line = edge_port->port->minor;
- tmp.port = edge_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/io_ti.c
-+++ b/drivers/usb/serial/io_ti.c
-@@ -2363,7 +2363,7 @@ static int get_serial_info(struct edgepo
- memset(&tmp, 0, sizeof(tmp));
-
- tmp.type = PORT_16550A;
-- tmp.line = edge_port->port->serial->minor;
-+ tmp.line = edge_port->port->minor;
- tmp.port = edge_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/mos7720.c
-+++ b/drivers/usb/serial/mos7720.c
-@@ -1854,7 +1854,7 @@ static int get_serial_info(struct moschi
- memset(&tmp, 0, sizeof(tmp));
-
- tmp.type = PORT_16550A;
-- tmp.line = mos7720_port->port->serial->minor;
-+ tmp.line = mos7720_port->port->minor;
- tmp.port = mos7720_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/mos7840.c
-+++ b/drivers/usb/serial/mos7840.c
-@@ -1057,7 +1057,7 @@ static int mos7840_open(struct tty_struc
- * structures were not set up at that time.) */
-
- dev_dbg(&port->dev, "port number is %d\n", port->port_number);
-- dev_dbg(&port->dev, "minor number is %d\n", port->serial->minor);
-+ dev_dbg(&port->dev, "minor number is %d\n", port->minor);
- dev_dbg(&port->dev, "Bulkin endpoint is %d\n", port->bulk_in_endpointAddress);
- dev_dbg(&port->dev, "BulkOut endpoint is %d\n", port->bulk_out_endpointAddress);
- dev_dbg(&port->dev, "Interrupt endpoint is %d\n", port->interrupt_in_endpointAddress);
-@@ -2068,7 +2068,7 @@ static int mos7840_get_serial_info(struc
- memset(&tmp, 0, sizeof(tmp));
-
- tmp.type = PORT_16550A;
-- tmp.line = mos7840_port->port->serial->minor;
-+ tmp.line = mos7840_port->port->minor;
- tmp.port = mos7840_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
-@@ -2246,9 +2246,8 @@ static int mos7840_port_probe(struct usb
- * usb-serial.c:get_free_serial() and cannot therefore be used
- * to index device instances */
- mos7840_port->port_num = pnum + 1;
-- dev_dbg(&port->dev, "port->serial->minor = %d\n", port->serial->minor);
-+ dev_dbg(&port->dev, "port->minor = %d\n", port->minor);
- dev_dbg(&port->dev, "mos7840_port->port_num = %d\n", mos7840_port->port_num);
-- dev_dbg(&port->dev, "serial->minor = %d\n", serial->minor);
-
- if (mos7840_port->port_num == 1) {
- mos7840_port->SpRegOffset = 0x0;
---- a/drivers/usb/serial/opticon.c
-+++ b/drivers/usb/serial/opticon.c
-@@ -348,7 +348,7 @@ static int get_serial_info(struct usb_se
-
- /* fake emulate a 16550 uart to make userspace code happy */
- tmp.type = PORT_16550A;
-- tmp.line = port->serial->minor;
-+ tmp.line = port->minor;
- tmp.port = 0;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/pl2303.c
-+++ b/drivers/usb/serial/pl2303.c
-@@ -641,7 +641,7 @@ static int pl2303_ioctl(struct tty_struc
- case TIOCGSERIAL:
- memset(&ser, 0, sizeof ser);
- ser.type = PORT_16654;
-- ser.line = port->serial->minor;
-+ ser.line = port->minor;
- ser.port = port->port_number;
- ser.baud_base = 460800;
-
---- a/drivers/usb/serial/quatech2.c
-+++ b/drivers/usb/serial/quatech2.c
-@@ -465,7 +465,7 @@ static int get_serial_info(struct usb_se
- return -EFAULT;
-
- memset(&tmp, 0, sizeof(tmp));
-- tmp.line = port->serial->minor;
-+ tmp.line = port->minor;
- tmp.port = 0;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/ssu100.c
-+++ b/drivers/usb/serial/ssu100.c
-@@ -323,7 +323,7 @@ static int get_serial_info(struct usb_se
- return -EFAULT;
-
- memset(&tmp, 0, sizeof(tmp));
-- tmp.line = port->serial->minor;
-+ tmp.line = port->minor;
- tmp.port = 0;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
---- a/drivers/usb/serial/ti_usb_3410_5052.c
-+++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -1309,7 +1309,7 @@ static int ti_get_serial_info(struct ti_
- memset(&ret_serial, 0, sizeof(ret_serial));
-
- ret_serial.type = PORT_16550A;
-- ret_serial.line = port->serial->minor;
-+ ret_serial.line = port->minor;
- ret_serial.port = port->port_number;
- ret_serial.flags = tport->tp_flags;
- ret_serial.xmit_fifo_size = TI_WRITE_BUF_SIZE;
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -37,6 +37,7 @@
- #include <linux/usb.h>
- #include <linux/usb/serial.h>
- #include <linux/kfifo.h>
-+#include <linux/idr.h>
- #include "pl2303.h"
-
- #define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
-@@ -49,72 +50,64 @@
- drivers depend on it.
- */
-
--static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
-+static DEFINE_IDR(serial_minors);
- static DEFINE_MUTEX(table_lock);
- static LIST_HEAD(usb_serial_driver_list);
-
- /*
-- * Look up the serial structure. If it is found and it hasn't been
-- * disconnected, return with its disc_mutex held and its refcount
-- * incremented. Otherwise return NULL.
-+ * Look up the serial port structure. If it is found and it hasn't been
-+ * disconnected, return with the parent usb_serial structure's disc_mutex held
-+ * and its refcount incremented. Otherwise return NULL.
- */
--struct usb_serial *usb_serial_get_by_index(unsigned index)
-+struct usb_serial_port *usb_serial_port_get_by_minor(unsigned minor)
- {
-- struct usb_serial *serial;
-+ struct usb_serial *serial = NULL;
-+ struct usb_serial_port *port;
-
- mutex_lock(&table_lock);
-- serial = serial_table[index];
-+ port = idr_find(&serial_minors, minor);
-+ if (!port)
-+ goto exit;
-
-- if (serial) {
-- mutex_lock(&serial->disc_mutex);
-- if (serial->disconnected) {
-- mutex_unlock(&serial->disc_mutex);
-- serial = NULL;
-- } else {
-- kref_get(&serial->kref);
-- }
-+ serial = port->serial;
-+ mutex_lock(&serial->disc_mutex);
-+ if (serial->disconnected) {
-+ mutex_unlock(&serial->disc_mutex);
-+ port = NULL;
-+ } else {
-+ kref_get(&serial->kref);
- }
-+exit:
- mutex_unlock(&table_lock);
-- return serial;
-+ return port;
- }
-
--static struct usb_serial *get_free_serial(struct usb_serial *serial,
-- int num_ports, unsigned int *minor)
-+static int allocate_minors(struct usb_serial *serial, int num_ports)
- {
-+ struct usb_serial_port *port;
- unsigned int i, j;
-- int good_spot;
-+ int minor;
-
- dev_dbg(&serial->interface->dev, "%s %d\n", __func__, num_ports);
-
-- *minor = 0;
- mutex_lock(&table_lock);
-- for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
-- if (serial_table[i])
-- continue;
--
-- good_spot = 1;
-- for (j = 1; j <= num_ports-1; ++j)
-- if ((i+j >= SERIAL_TTY_MINORS) || (serial_table[i+j])) {
-- good_spot = 0;
-- i += j;
-- break;
-- }
-- if (good_spot == 0)
-- continue;
--
-- *minor = i;
-- j = 0;
-- dev_dbg(&serial->interface->dev, "%s - minor base = %d\n", __func__, *minor);
-- for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i, ++j) {
-- serial_table[i] = serial;
-- serial->port[j]->minor = i;
-- serial->port[j]->port_number = i - *minor;
-- }
-- mutex_unlock(&table_lock);
-- return serial;
-+ for (i = 0; i < num_ports; ++i) {
-+ port = serial->port[i];
-+ minor = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL);
-+ if (minor < 0)
-+ goto error;
-+ port->minor = minor;
-+ port->port_number = i;
- }
-+ serial->minors_reserved = 1;
- mutex_unlock(&table_lock);
-- return NULL;
-+ return 0;
-+error:
-+ /* unwind the already allocated minors */
-+ for (j = 0; j < i; ++j)
-+ idr_remove(&serial_minors, serial->port[j]->minor);
-+ mutex_unlock(&table_lock);
-+ return minor;
- }
-
- static void return_serial(struct usb_serial *serial)
-@@ -123,8 +116,9 @@ static void return_serial(struct usb_ser
-
- mutex_lock(&table_lock);
- for (i = 0; i < serial->num_ports; ++i)
-- serial_table[serial->minor + i] = NULL;
-+ idr_remove(&serial_minors, serial->port[i]->minor);
- mutex_unlock(&table_lock);
-+ serial->minors_reserved = 0;
- }
-
- static void destroy_serial(struct kref *kref)
-@@ -136,7 +130,7 @@ static void destroy_serial(struct kref *
- serial = to_usb_serial(kref);
-
- /* return the minor range that this device had */
-- if (serial->minor != SERIAL_TTY_NO_MINOR)
-+ if (serial->minors_reserved)
- return_serial(serial);
-
- if (serial->attached && serial->type->release)
-@@ -186,13 +180,11 @@ static int serial_install(struct tty_dri
- struct usb_serial_port *port;
- int retval = -ENODEV;
-
-- serial = usb_serial_get_by_index(idx);
-- if (!serial)
-+ port = usb_serial_port_get_by_minor(idx);
-+ if (!port)
- return retval;
-
-- port = serial->port[idx - serial->minor];
-- if (!port)
-- goto error_no_port;
-+ serial = port->serial;
- if (!try_module_get(serial->type->driver.owner))
- goto error_module_get;
-
-@@ -219,7 +211,6 @@ static int serial_install(struct tty_dri
- error_get_interface:
- module_put(serial->type->driver.owner);
- error_module_get:
-- error_no_port:
- usb_serial_put(serial);
- mutex_unlock(&serial->disc_mutex);
- return retval;
-@@ -453,14 +444,16 @@ static int serial_break(struct tty_struc
- static int serial_proc_show(struct seq_file *m, void *v)
- {
- struct usb_serial *serial;
-+ struct usb_serial_port *port;
- int i;
- char tmp[40];
-
- seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
- for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
-- serial = usb_serial_get_by_index(i);
-- if (serial == NULL)
-+ port = usb_serial_port_get_by_minor(i);
-+ if (port == NULL)
- continue;
-+ serial = port->serial;
-
- seq_printf(m, "%d:", i);
- if (serial->type->driver.owner)
-@@ -472,7 +465,7 @@ static int serial_proc_show(struct seq_f
- le16_to_cpu(serial->dev->descriptor.idVendor),
- le16_to_cpu(serial->dev->descriptor.idProduct));
- seq_printf(m, " num_ports:%d", serial->num_ports);
-- seq_printf(m, " port:%d", i - serial->minor + 1);
-+ seq_printf(m, " port:%d", port->port_number);
- usb_make_path(serial->dev, tmp, sizeof(tmp));
- seq_printf(m, " path:%s", tmp);
-
-@@ -614,7 +607,7 @@ static struct usb_serial *create_serial(
- serial->interface = usb_get_intf(interface);
- kref_init(&serial->kref);
- mutex_init(&serial->disc_mutex);
-- serial->minor = SERIAL_TTY_NO_MINOR;
-+ serial->minors_reserved = 0;
-
- return serial;
- }
-@@ -723,7 +716,6 @@ static int usb_serial_probe(struct usb_i
- struct usb_endpoint_descriptor *bulk_out_endpoint[MAX_NUM_PORTS];
- struct usb_serial_driver *type = NULL;
- int retval;
-- unsigned int minor;
- int buffer_size;
- int i;
- int j;
-@@ -1040,11 +1032,10 @@ static int usb_serial_probe(struct usb_i
- */
- serial->disconnected = 1;
-
-- if (get_free_serial(serial, num_ports, &minor) == NULL) {
-- dev_err(ddev, "No more free serial devices\n");
-+ if (allocate_minors(serial, num_ports)) {
-+ dev_err(ddev, "No more free serial minor numbers\n");
- goto probe_error;
- }
-- serial->minor = minor;
-
- /* register all of the individual ports with the driver core */
- for (i = 0; i < num_ports; ++i) {
-@@ -1060,7 +1051,7 @@ static int usb_serial_probe(struct usb_i
-
- serial->disconnected = 0;
-
-- usb_serial_console_init(minor);
-+ usb_serial_console_init(serial->port[0]->minor);
- exit:
- module_put(type->driver.owner);
- return 0;
-@@ -1224,7 +1215,6 @@ static struct usb_driver usb_serial_driv
-
- static int __init usb_serial_init(void)
- {
-- int i;
- int result;
-
- usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
-@@ -1232,9 +1222,6 @@ static int __init usb_serial_init(void)
- return -ENOMEM;
-
- /* Initialize our global data */
-- for (i = 0; i < SERIAL_TTY_MINORS; ++i)
-- serial_table[i] = NULL;
--
- result = bus_register(&usb_serial_bus_type);
- if (result) {
- pr_err("%s - registering bus driver failed\n", __func__);
---- a/drivers/usb/serial/usb_wwan.c
-+++ b/drivers/usb/serial/usb_wwan.c
-@@ -124,7 +124,7 @@ static int get_serial_info(struct usb_se
- return -EFAULT;
-
- memset(&tmp, 0, sizeof(tmp));
-- tmp.line = port->serial->minor;
-+ tmp.line = port->minor;
- tmp.port = port->port_number;
- tmp.baud_base = tty_get_baud_rate(port->port.tty);
- tmp.close_delay = port->port.close_delay / 10;
---- a/drivers/usb/serial/whiteheat.c
-+++ b/drivers/usb/serial/whiteheat.c
-@@ -461,7 +461,7 @@ static int whiteheat_ioctl(struct tty_st
- case TIOCGSERIAL:
- memset(&serstruct, 0, sizeof(serstruct));
- serstruct.type = PORT_16654;
-- serstruct.line = port->serial->minor;
-+ serstruct.line = port->minor;
- serstruct.port = port->port_number;
- serstruct.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- serstruct.xmit_fifo_size = kfifo_size(&port->write_fifo);
---- a/include/linux/usb/serial.h
-+++ b/include/linux/usb/serial.h
-@@ -21,7 +21,6 @@
-
- #define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
- #define SERIAL_TTY_MINORS 254 /* loads of devices :) */
--#define SERIAL_TTY_NO_MINOR 255 /* No minor was assigned */
-
- /* The maximum number of ports one device can grab at once */
- #define MAX_NUM_PORTS 8
-@@ -142,7 +141,6 @@ static inline void usb_set_serial_port_d
- * @dev: pointer to the struct usb_device for this device
- * @type: pointer to the struct usb_serial_driver for this device
- * @interface: pointer to the struct usb_interface for this device
-- * @minor: the starting minor number for this device
- * @num_ports: the number of ports this device has
- * @num_interrupt_in: number of interrupt in endpoints we have
- * @num_interrupt_out: number of interrupt out endpoints we have
-@@ -161,7 +159,7 @@ struct usb_serial {
- unsigned char disconnected:1;
- unsigned char suspending:1;
- unsigned char attached:1;
-- unsigned char minor;
-+ unsigned char minors_reserved:1;
- unsigned char num_ports;
- unsigned char num_port_pointers;
- char num_interrupt_in;
-@@ -321,7 +319,7 @@ static inline void usb_serial_console_di
- #endif
-
- /* Functions needed by other parts of the usbserial core */
--extern struct usb_serial *usb_serial_get_by_index(unsigned int minor);
-+extern struct usb_serial_port *usb_serial_port_get_by_minor(unsigned int minor);
- extern void usb_serial_put(struct usb_serial *serial);
- extern int usb_serial_generic_open(struct tty_struct *tty,
- struct usb_serial_port *port);
diff --git a/usb-serial-increase-the-number-of-devices-we-support.patch b/usb-serial-increase-the-number-of-devices-we-support.patch
deleted file mode 100644
index c41f28993467e1..00000000000000
--- a/usb-serial-increase-the-number-of-devices-we-support.patch
+++ /dev/null
@@ -1,76 +0,0 @@
-From foo@baz Wed Jun 5 10:45:16 PDT 2013
-Date: Wed, 05 Jun 2013 10:45:16 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: [PATCH v2 3/3] USB: serial: increase the number of devices we support
-
-We had the limit of 255 USB to serial devices on one system for almost
-15 years, with no complaints. But now it's time to move on from these
-tiny "baby" systems, and bump the number up to 512, which should last
-us a few more years:
- "512 is a nice number" -- Tobias Winter
-
-Note, this is still a static value, and uses up tty core memory with
-this many tty devices allocated. Converting the driver to use
-TTY_DRIVER_DYNAMIC_DEV is the next thing to do in order to remove this
-limitation.
-
-Reported-by: Tobias Winter <tobias@linuxdingsda.de>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
----
- drivers/usb/serial/usb-serial.c | 9 ++++++---
- include/linux/usb/serial.h | 3 ---
- 2 files changed, 6 insertions(+), 6 deletions(-)
-
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -43,6 +43,9 @@
- #define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@linuxfoundation.org>"
- #define DRIVER_DESC "USB Serial Driver core"
-
-+#define USB_SERIAL_TTY_MAJOR 188
-+#define USB_SERIAL_TTY_MINORS 512 /* should be enough for a while */
-+
- /* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
- the MODULE_DEVICE_TABLE declarations in each serial driver
- cause the "hotplug" program to pull in whatever module is necessary
-@@ -449,7 +452,7 @@ static int serial_proc_show(struct seq_f
- char tmp[40];
-
- seq_puts(m, "usbserinfo:1.0 driver:2.0\n");
-- for (i = 0; i < SERIAL_TTY_MINORS; ++i) {
-+ for (i = 0; i < USB_SERIAL_TTY_MINORS; ++i) {
- port = usb_serial_port_get_by_minor(i);
- if (port == NULL)
- continue;
-@@ -1217,7 +1220,7 @@ static int __init usb_serial_init(void)
- {
- int result;
-
-- usb_serial_tty_driver = alloc_tty_driver(SERIAL_TTY_MINORS);
-+ usb_serial_tty_driver = alloc_tty_driver(USB_SERIAL_TTY_MINORS);
- if (!usb_serial_tty_driver)
- return -ENOMEM;
-
-@@ -1230,7 +1233,7 @@ static int __init usb_serial_init(void)
-
- usb_serial_tty_driver->driver_name = "usbserial";
- usb_serial_tty_driver->name = "ttyUSB";
-- usb_serial_tty_driver->major = SERIAL_TTY_MAJOR;
-+ usb_serial_tty_driver->major = USB_SERIAL_TTY_MAJOR;
- usb_serial_tty_driver->minor_start = 0;
- usb_serial_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
- usb_serial_tty_driver->subtype = SERIAL_TYPE_NORMAL;
---- a/include/linux/usb/serial.h
-+++ b/include/linux/usb/serial.h
-@@ -19,9 +19,6 @@
- #include <linux/sysrq.h>
- #include <linux/kfifo.h>
-
--#define SERIAL_TTY_MAJOR 188 /* Nice legal number now */
--#define SERIAL_TTY_MINORS 254 /* loads of devices :) */
--
- /* The maximum number of ports one device can grab at once */
- #define MAX_NUM_PORTS 8
-
diff --git a/usb-serial-ports-add-minor-and-port-number.patch b/usb-serial-ports-add-minor-and-port-number.patch
deleted file mode 100644
index 7b106cdf249b11..00000000000000
--- a/usb-serial-ports-add-minor-and-port-number.patch
+++ /dev/null
@@ -1,1136 +0,0 @@
-From foo@baz Tue Jun 4 11:51:13 PDT 2013
-Date: Tue, 04 Jun 2013 11:51:13 -0700
-To: Greg KH <gregkh@linuxfoundation.org>
-From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-Subject: [PATCH v2 1/3] USB: serial: ports: add minor and port number
-
-The usb_serial_port structure had the number field, which was the minor
-number for the port, which almost no one really cared about. They
-really wanted the number of the port within the device, which you had to
-subtract from the minor of the parent usb_serial_device structure. To
-clean this up, provide the real minor number of the port, and the number
-of the port within the serial device separately, as these numbers might
-not be related in the future.
-
-Bonus is that this cleans up a lot of logic in the drivers, and saves
-lines overall.
-
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-
---
- drivers/staging/serqt_usb2/serqt_usb2.c | 21 +++--------
- drivers/usb/serial/ark3116.c | 2 -
- drivers/usb/serial/bus.c | 6 +--
- drivers/usb/serial/console.c | 2 -
- drivers/usb/serial/cp210x.c | 2 -
- drivers/usb/serial/cypress_m8.c | 4 +-
- drivers/usb/serial/digi_acceleport.c | 6 ---
- drivers/usb/serial/f81232.c | 5 +-
- drivers/usb/serial/garmin_gps.c | 6 +--
- drivers/usb/serial/io_edgeport.c | 58 ++++++++++++--------------------
- drivers/usb/serial/io_ti.c | 21 ++++-------
- drivers/usb/serial/keyspan.c | 29 +++++++---------
- drivers/usb/serial/metro-usb.c | 4 +-
- drivers/usb/serial/mos7720.c | 37 +++++++++-----------
- drivers/usb/serial/mos7840.c | 52 +++++++++-------------------
- drivers/usb/serial/opticon.c | 2 -
- drivers/usb/serial/pl2303.c | 2 -
- drivers/usb/serial/quatech2.c | 7 +--
- drivers/usb/serial/sierra.c | 2 -
- drivers/usb/serial/ti_usb_3410_5052.c | 10 ++---
- drivers/usb/serial/usb-serial.c | 7 ++-
- drivers/usb/serial/usb_wwan.c | 2 -
- drivers/usb/serial/whiteheat.c | 20 +++++------
- include/linux/usb/serial.h | 6 ++-
- 24 files changed, 133 insertions(+), 180 deletions(-)
-
---- a/drivers/staging/serqt_usb2/serqt_usb2.c
-+++ b/drivers/staging/serqt_usb2/serqt_usb2.c
-@@ -873,7 +873,7 @@ static int qt_open(struct tty_struct *tt
- result = qt_get_device(serial, &port0->DeviceData);
-
- /* Port specific setups */
-- result = qt_open_channel(serial, port->number, &ChannelData);
-+ result = qt_open_channel(serial, port->port_number, &ChannelData);
- if (result < 0) {
- dev_dbg(&port->dev, "qt_open_channel failed\n");
- return result;
-@@ -888,7 +888,7 @@ static int qt_open(struct tty_struct *tt
- (SERIAL_MSR_CTS | SERIAL_MSR_DSR | SERIAL_MSR_RI | SERIAL_MSR_CD);
-
- /* Set Baud rate to default and turn off (default)flow control here */
-- result = qt_setuart(serial, port->number, DEFAULT_DIVISOR, DEFAULT_LCR);
-+ result = qt_setuart(serial, port->port_number, DEFAULT_DIVISOR, DEFAULT_LCR);
- if (result < 0) {
- dev_dbg(&port->dev, "qt_setuart failed\n");
- return result;
-@@ -906,7 +906,6 @@ static int qt_open(struct tty_struct *tt
- qt_submit_urb_from_open(serial, port);
- }
-
-- dev_dbg(&port->dev, "port number is %d\n", port->number);
- dev_dbg(&port->dev, "serial number is %d\n", port->serial->minor);
- dev_dbg(&port->dev,
- "Bulkin endpoint is %d\n", port->bulk_in_endpointAddress);
-@@ -1022,14 +1021,11 @@ static void qt_close(struct usb_serial_p
- /* Close uart channel */
- status = qt_close_channel(serial, index);
- if (status < 0)
-- dev_dbg(&port->dev,
-- "%s - port %d qt_close_channel failed.\n",
-- __func__, port->number);
-+ dev_dbg(&port->dev, "%s - qt_close_channel failed.\n", __func__);
-
- port0->open_ports--;
-
-- dev_dbg(&port->dev, "qt_num_open_ports in close%d:in port%d\n",
-- port0->open_ports, port->number);
-+ dev_dbg(&port->dev, "qt_num_open_ports in close%d\n", port0->open_ports);
-
- if (port0->open_ports == 0) {
- if (serial->port[0]->interrupt_in_urb) {
-@@ -1169,8 +1165,7 @@ static int qt_ioctl(struct tty_struct *t
- return 0;
- }
-
-- dev_dbg(&port->dev, "%s -No ioctl for that one. port = %d\n",
-- __func__, port->number);
-+ dev_dbg(&port->dev, "%s -No ioctl for that one.\n", __func__);
- return -ENOIOCTLCMD;
- }
-
-@@ -1245,8 +1240,7 @@ static void qt_set_termios(struct tty_st
-
- /* Now determine flow control */
- if (cflag & CRTSCTS) {
-- dev_dbg(&port->dev, "%s - Enabling HW flow control port %d\n",
-- __func__, port->number);
-+ dev_dbg(&port->dev, "%s - Enabling HW flow control\n", __func__);
-
- /* Enable RTS/CTS flow control */
- status = BoxSetHW_FlowCtrl(port->serial, index, 1);
-@@ -1258,8 +1252,7 @@ static void qt_set_termios(struct tty_st
- } else {
- /* Disable RTS/CTS flow control */
- dev_dbg(&port->dev,
-- "%s - disabling HW flow control port %d\n",
-- __func__, port->number);
-+ "%s - disabling HW flow control\n", __func__);
-
- status = BoxSetHW_FlowCtrl(port->serial, index, 0);
- if (status < 0) {
---- a/drivers/usb/serial/ark3116.c
-+++ b/drivers/usb/serial/ark3116.c
-@@ -414,7 +414,7 @@ static int ark3116_ioctl(struct tty_stru
- memset(&serstruct, 0, sizeof(serstruct));
- serstruct.type = PORT_16654;
- serstruct.line = port->serial->minor;
-- serstruct.port = port->number;
-+ serstruct.port = port->port_number;
- serstruct.custom_divisor = 0;
- serstruct.baud_base = 460800;
-
---- a/drivers/usb/serial/bus.c
-+++ b/drivers/usb/serial/bus.c
-@@ -43,7 +43,7 @@ static ssize_t show_port_number(struct d
- {
- struct usb_serial_port *port = to_usb_serial_port(dev);
-
-- return sprintf(buf, "%d\n", port->number - port->serial->minor);
-+ return sprintf(buf, "%d\n", port->port_number);
- }
-
- static DEVICE_ATTR(port_number, S_IRUGO, show_port_number, NULL);
-@@ -80,7 +80,7 @@ static int usb_serial_device_probe(struc
- goto exit_with_autopm;
- }
-
-- minor = port->number;
-+ minor = port->minor;
- tty_register_device(usb_serial_tty_driver, minor, dev);
- dev_info(&port->serial->dev->dev,
- "%s converter now attached to ttyUSB%d\n",
-@@ -106,7 +106,7 @@ static int usb_serial_device_remove(stru
- /* make sure suspend/resume doesn't race against port_remove */
- usb_autopm_get_interface(port->serial->interface);
-
-- minor = port->number;
-+ minor = port->minor;
- tty_unregister_device(usb_serial_tty_driver, minor);
-
- device_remove_file(&port->dev, &dev_attr_port_number);
---- a/drivers/usb/serial/console.c
-+++ b/drivers/usb/serial/console.c
-@@ -210,7 +210,7 @@ static void usb_console_write(struct con
- if (count == 0)
- return;
-
-- pr_debug("%s - port %d, %d byte(s)\n", __func__, port->number, count);
-+ pr_debug("%s - minor %d, %d byte(s)\n", __func__, port->minor, count);
-
- if (!port->port.console) {
- pr_debug("%s - port not opened\n", __func__);
---- a/drivers/usb/serial/cp210x.c
-+++ b/drivers/usb/serial/cp210x.c
-@@ -666,8 +666,6 @@ static void cp210x_set_termios(struct tt
- unsigned int bits;
- unsigned int modem_ctl[4];
-
-- dev_dbg(dev, "%s - port %d\n", __func__, port->number);
--
- if (!tty)
- return;
-
---- a/drivers/usb/serial/cypress_m8.c
-+++ b/drivers/usb/serial/cypress_m8.c
-@@ -435,7 +435,7 @@ static void cypress_set_dead(struct usb_
- spin_unlock_irqrestore(&priv->lock, flags);
-
- dev_err(&port->dev, "cypress_m8 suspending failing port %d - "
-- "interval might be too short\n", port->number);
-+ "interval might be too short\n", port->port_number);
- }
-
-
-@@ -667,7 +667,7 @@ static int cypress_write(struct tty_stru
- {
- struct cypress_private *priv = usb_get_serial_port_data(port);
-
-- dev_dbg(&port->dev, "%s - port %d, %d bytes\n", __func__, port->number, count);
-+ dev_dbg(&port->dev, "%s - %d bytes\n", __func__, count);
-
- /* line control commands, which need to be executed immediately,
- are not put into the buffer for obvious reasons.
---- a/drivers/usb/serial/digi_acceleport.c
-+++ b/drivers/usb/serial/digi_acceleport.c
-@@ -1304,11 +1304,7 @@ static void digi_release(struct usb_seri
-
- static int digi_port_probe(struct usb_serial_port *port)
- {
-- unsigned port_num;
--
-- port_num = port->number - port->serial->minor;
--
-- return digi_port_init(port, port_num);
-+ return digi_port_init(port, port->port_number);
- }
-
- static int digi_port_remove(struct usb_serial_port *port)
---- a/drivers/usb/serial/f81232.c
-+++ b/drivers/usb/serial/f81232.c
-@@ -288,15 +288,14 @@ static int f81232_ioctl(struct tty_struc
- struct serial_struct ser;
- struct usb_serial_port *port = tty->driver_data;
-
-- dev_dbg(&port->dev, "%s (%d) cmd = 0x%04x\n", __func__,
-- port->number, cmd);
-+ dev_dbg(&port->dev, "%s cmd = 0x%04x\n", __func__, cmd);
-
- switch (cmd) {
- case TIOCGSERIAL:
- memset(&ser, 0, sizeof ser);
- ser.type = PORT_16654;
- ser.line = port->serial->minor;
-- ser.port = port->number;
-+ ser.port = port->port_number;
- ser.baud_base = 460800;
-
- if (copy_to_user((void __user *)arg, &ser, sizeof ser))
---- a/drivers/usb/serial/garmin_gps.c
-+++ b/drivers/usb/serial/garmin_gps.c
-@@ -948,9 +948,9 @@ static void garmin_close(struct usb_seri
- {
- struct garmin_data *garmin_data_p = usb_get_serial_port_data(port);
-
-- dev_dbg(&port->dev, "%s - port %d - mode=%d state=%d flags=0x%X\n",
-- __func__, port->number, garmin_data_p->mode,
-- garmin_data_p->state, garmin_data_p->flags);
-+ dev_dbg(&port->dev, "%s - mode=%d state=%d flags=0x%X\n",
-+ __func__, garmin_data_p->mode, garmin_data_p->state,
-+ garmin_data_p->flags);
-
- garmin_clear(garmin_data_p);
-
---- a/drivers/usb/serial/io_edgeport.c
-+++ b/drivers/usb/serial/io_edgeport.c
-@@ -915,8 +915,8 @@ static int edge_open(struct tty_struct *
- return -ENOMEM;
- }
-
-- dev_dbg(dev, "%s(%d) - Initialize TX fifo to %d bytes\n",
-- __func__, port->number, edge_port->maxTxCredits);
-+ dev_dbg(dev, "%s - Initialize TX fifo to %d bytes\n",
-+ __func__, edge_port->maxTxCredits);
-
- return 0;
- }
-@@ -1122,9 +1122,8 @@ static int edge_write(struct tty_struct
- copySize = min((unsigned int)count,
- (edge_port->txCredits - fifo->count));
-
-- dev_dbg(&port->dev, "%s(%d) of %d byte(s) Fifo room %d -- will copy %d bytes\n",
-- __func__, port->number, count,
-- edge_port->txCredits - fifo->count, copySize);
-+ dev_dbg(&port->dev, "%s of %d byte(s) Fifo room %d -- will copy %d bytes\n",
-+ __func__, count, edge_port->txCredits - fifo->count, copySize);
-
- /* catch writes of 0 bytes which the tty driver likes to give us,
- and when txCredits is empty */
-@@ -1216,9 +1215,8 @@ static void send_more_port_data(struct e
- if (edge_port->write_in_progress ||
- !edge_port->open ||
- (fifo->count == 0)) {
-- dev_dbg(dev, "%s(%d) EXIT - fifo %d, PendingWrite = %d\n",
-- __func__, edge_port->port->number,
-- fifo->count, edge_port->write_in_progress);
-+ dev_dbg(dev, "%s EXIT - fifo %d, PendingWrite = %d\n",
-+ __func__, fifo->count, edge_port->write_in_progress);
- goto exit_send;
- }
-
-@@ -1230,9 +1228,8 @@ static void send_more_port_data(struct e
- * it's better to wait for more credits so we can do a larger write.
- */
- if (edge_port->txCredits < EDGE_FW_GET_TX_CREDITS_SEND_THRESHOLD(edge_port->maxTxCredits, EDGE_FW_BULK_MAX_PACKET_SIZE)) {
-- dev_dbg(dev, "%s(%d) Not enough credit - fifo %d TxCredit %d\n",
-- __func__, edge_port->port->number, fifo->count,
-- edge_port->txCredits);
-+ dev_dbg(dev, "%s Not enough credit - fifo %d TxCredit %d\n",
-+ __func__, fifo->count, edge_port->txCredits);
- goto exit_send;
- }
-
-@@ -1256,10 +1253,8 @@ static void send_more_port_data(struct e
- edge_port->write_in_progress = false;
- goto exit_send;
- }
-- buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->number
-- - edge_port->port->serial->minor, count);
-- buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->number
-- - edge_port->port->serial->minor, count);
-+ buffer[0] = IOSP_BUILD_DATA_HDR1(edge_port->port->port_number, count);
-+ buffer[1] = IOSP_BUILD_DATA_HDR2(edge_port->port->port_number, count);
-
- /* now copy our data */
- bytesleft = fifo->size - fifo->tail;
-@@ -1377,8 +1372,7 @@ static int edge_chars_in_buffer(struct t
- edge_port->txfifo.count;
- spin_unlock_irqrestore(&edge_port->ep_lock, flags);
- if (num_chars) {
-- dev_dbg(&port->dev, "%s(port %d) - returns %d\n", __func__,
-- port->number, num_chars);
-+ dev_dbg(&port->dev, "%s - returns %d\n", __func__, num_chars);
- }
-
- return num_chars;
-@@ -1576,7 +1570,7 @@ static int get_serial_info(struct edgepo
-
- tmp.type = PORT_16550A;
- tmp.line = edge_port->port->serial->minor;
-- tmp.port = edge_port->port->number;
-+ tmp.port = edge_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- tmp.xmit_fifo_size = edge_port->maxTxCredits;
-@@ -1601,15 +1595,15 @@ static int edge_ioctl(struct tty_struct
- DEFINE_WAIT(wait);
- struct edgeport_port *edge_port = usb_get_serial_port_data(port);
-
-- dev_dbg(&port->dev, "%s - port %d, cmd = 0x%x\n", __func__, port->number, cmd);
-+ dev_dbg(&port->dev, "%s - cmd = 0x%x\n", __func__, cmd);
-
- switch (cmd) {
- case TIOCSERGETLSR:
-- dev_dbg(&port->dev, "%s (%d) TIOCSERGETLSR\n", __func__, port->number);
-+ dev_dbg(&port->dev, "%s TIOCSERGETLSR\n", __func__);
- return get_lsr_info(edge_port, (unsigned int __user *) arg);
-
- case TIOCGSERIAL:
-- dev_dbg(&port->dev, "%s (%d) TIOCGSERIAL\n", __func__, port->number);
-+ dev_dbg(&port->dev, "%s TIOCGSERIAL\n", __func__);
- return get_serial_info(edge_port, (struct serial_struct __user *) arg);
- }
- return -ENOIOCTLCMD;
-@@ -2181,9 +2175,8 @@ static int send_iosp_ext_cmd(struct edge
-
- currentCommand = buffer;
-
-- MAKE_CMD_EXT_CMD(&currentCommand, &length,
-- edge_port->port->number - edge_port->port->serial->minor,
-- command, param);
-+ MAKE_CMD_EXT_CMD(&currentCommand, &length, edge_port->port->port_number,
-+ command, param);
-
- status = write_cmd_usb(edge_port, buffer, length);
- if (status) {
-@@ -2266,18 +2259,16 @@ static int send_cmd_write_baud_rate(stru
- int cmdLen = 0;
- int divisor;
- int status;
-- unsigned char number =
-- edge_port->port->number - edge_port->port->serial->minor;
-+ u32 number = edge_port->port->port_number;
-
- if (edge_serial->is_epic &&
- !edge_serial->epic_descriptor.Supports.IOSPSetBaudRate) {
-- dev_dbg(dev, "SendCmdWriteBaudRate - NOT Setting baud rate for port = %d, baud = %d\n",
-- edge_port->port->number, baudRate);
-+ dev_dbg(dev, "SendCmdWriteBaudRate - NOT Setting baud rate for port, baud = %d\n",
-+ baudRate);
- return 0;
- }
-
-- dev_dbg(dev, "%s - port = %d, baud = %d\n", __func__,
-- edge_port->port->number, baudRate);
-+ dev_dbg(dev, "%s - baud = %d\n", __func__, baudRate);
-
- status = calc_baud_rate_divisor(dev, baudRate, &divisor);
- if (status) {
-@@ -2388,9 +2379,8 @@ static int send_cmd_write_uart_register(
- currCmd = cmdBuffer;
-
- /* Build a cmd in the buffer to write the given register */
-- MAKE_CMD_WRITE_REG(&currCmd, &cmdLen,
-- edge_port->port->number - edge_port->port->serial->minor,
-- regNum, regValue);
-+ MAKE_CMD_WRITE_REG(&currCmd, &cmdLen, edge_port->port->port_number,
-+ regNum, regValue);
-
- status = write_cmd_usb(edge_port, cmdBuffer, cmdLen);
- if (status) {
-@@ -2424,8 +2414,6 @@ static void change_port_settings(struct
- __u8 txFlow;
- int status;
-
-- dev_dbg(dev, "%s - port %d\n", __func__, edge_port->port->number);
--
- if (!edge_port->open &&
- !edge_port->openPending) {
- dev_dbg(dev, "%s - port not opened\n", __func__);
---- a/drivers/usb/serial/io_ti.c
-+++ b/drivers/usb/serial/io_ti.c
-@@ -259,7 +259,7 @@ static int send_cmd(struct usb_device *d
- /* clear tx/rx buffers and fifo in TI UMP */
- static int purge_port(struct usb_serial_port *port, __u16 mask)
- {
-- int port_number = port->number - port->serial->minor;
-+ int port_number = port->port_number;
-
- dev_dbg(&port->dev, "%s - port %d, mask %x\n", __func__, port_number, mask);
-
-@@ -1392,7 +1392,8 @@ stayinbootmode:
-
- static int ti_do_config(struct edgeport_port *port, int feature, int on)
- {
-- int port_number = port->port->number - port->port->serial->minor;
-+ int port_number = port->port->port_number;
-+
- on = !!on; /* 1 or 0 not bitmask */
- return send_cmd(port->port->serial->dev,
- feature, (__u8)(UMPM_UART1_PORT + port_number),
-@@ -1637,7 +1638,7 @@ static void edge_bulk_in_callback(struct
- return;
- }
-
-- port_number = edge_port->port->number - edge_port->port->serial->minor;
-+ port_number = edge_port->port->port_number;
-
- if (edge_port->lsr_event) {
- edge_port->lsr_event = 0;
-@@ -1730,7 +1731,7 @@ static int edge_open(struct tty_struct *
- if (edge_port == NULL)
- return -ENODEV;
-
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
- switch (port_number) {
- case 0:
- edge_port->uart_base = UMPMEM_BASE_UART1;
-@@ -1908,7 +1909,7 @@ static void edge_close(struct usb_serial
- spin_unlock_irqrestore(&edge_port->ep_lock, flags);
-
- dev_dbg(&port->dev, "%s - send umpc_close_port\n", __func__);
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
- send_cmd(serial->dev, UMPC_CLOSE_PORT,
- (__u8)(UMPM_UART1_PORT + port_number), 0, NULL, 0);
-
-@@ -2137,10 +2138,7 @@ static void change_port_settings(struct
- int baud;
- unsigned cflag;
- int status;
-- int port_number = edge_port->port->number -
-- edge_port->port->serial->minor;
--
-- dev_dbg(dev, "%s - port %d\n", __func__, edge_port->port->number);
-+ int port_number = edge_port->port->port_number;
-
- config = kmalloc (sizeof (*config), GFP_KERNEL);
- if (!config) {
-@@ -2284,7 +2282,6 @@ static void edge_set_termios(struct tty_
- tty->termios.c_cflag, tty->termios.c_iflag);
- dev_dbg(&port->dev, "%s - old clfag %08x old iflag %08x\n", __func__,
- old_termios->c_cflag, old_termios->c_iflag);
-- dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
-
- if (edge_port == NULL)
- return;
-@@ -2367,7 +2364,7 @@ static int get_serial_info(struct edgepo
-
- tmp.type = PORT_16550A;
- tmp.line = edge_port->port->serial->minor;
-- tmp.port = edge_port->port->number;
-+ tmp.port = edge_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- tmp.xmit_fifo_size = edge_port->port->bulk_out_size;
-@@ -2386,7 +2383,7 @@ static int edge_ioctl(struct tty_struct
- struct usb_serial_port *port = tty->driver_data;
- struct edgeport_port *edge_port = usb_get_serial_port_data(port);
-
-- dev_dbg(&port->dev, "%s - port %d, cmd = 0x%x\n", __func__, port->number, cmd);
-+ dev_dbg(&port->dev, "%s - cmd = 0x%x\n", __func__, cmd);
-
- switch (cmd) {
- case TIOCGSERIAL:
---- a/drivers/usb/serial/keyspan.c
-+++ b/drivers/usb/serial/keyspan.c
-@@ -152,7 +152,7 @@ static void keyspan_set_termios(struct t
- p_priv = usb_get_serial_port_data(port);
- d_details = p_priv->device_details;
- cflag = tty->termios.c_cflag;
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
-
- /* Baud rate calculation takes baud rate as an integer
- so other rates can be generated if desired. */
-@@ -234,8 +234,8 @@ static int keyspan_write(struct tty_stru
- dataOffset = 1;
- }
-
-- dev_dbg(&port->dev, "%s - for port %d (%d chars), flip=%d\n",
-- __func__, port->number, count, p_priv->out_flip);
-+ dev_dbg(&port->dev, "%s - %d chars, flip=%d\n", __func__, count,
-+ p_priv->out_flip);
-
- for (left = count; left > 0; left -= todo) {
- todo = left;
-@@ -1050,7 +1050,7 @@ static int keyspan_open(struct tty_struc
- /* get the terminal config for the setup message now so we don't
- * need to send 2 of them */
-
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
- if (tty) {
- cflag = tty->termios.c_cflag;
- /* Baud rate calculation takes baud rate as an integer
-@@ -1556,7 +1556,7 @@ static int keyspan_usa26_send_setup(stru
- s_priv = usb_get_serial_data(serial);
- p_priv = usb_get_serial_port_data(port);
- d_details = s_priv->device_details;
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
-
- this_urb = p_priv->outcont_urb;
-
-@@ -1700,7 +1700,7 @@ static int keyspan_usa28_send_setup(stru
- s_priv = usb_get_serial_data(serial);
- p_priv = usb_get_serial_port_data(port);
- d_details = s_priv->device_details;
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
-
- /* only do something if we have a bulk out endpoint */
- this_urb = p_priv->outcont_urb;
-@@ -1830,17 +1830,16 @@ static int keyspan_usa49_send_setup(stru
- this_urb = s_priv->glocont_urb;
-
- /* Work out which port within the device is being setup */
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
-
- /* Make sure we have an urb then send the message */
- if (this_urb == NULL) {
-- dev_dbg(&port->dev, "%s - oops no urb for port %d.\n", __func__, port->number);
-+ dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
- return -1;
- }
-
-- dev_dbg(&port->dev, "%s - endpoint %d port %d (%d)\n",
-- __func__, usb_pipeendpoint(this_urb->pipe),
-- port->number, device_port);
-+ dev_dbg(&port->dev, "%s - endpoint %d (%d)\n",
-+ __func__, usb_pipeendpoint(this_urb->pipe), device_port);
-
- /* Save reset port val for resend.
- Don't overwrite resend for open/close condition. */
-@@ -1855,7 +1854,6 @@ static int keyspan_usa49_send_setup(stru
-
- memset(&msg, 0, sizeof(struct keyspan_usa49_portControlMessage));
-
-- /*msg.portNumber = port->number;*/
- msg.portNumber = device_port;
-
- /* Only set baud rate if it's changed */
-@@ -2145,12 +2143,11 @@ static int keyspan_usa67_send_setup(stru
- this_urb = s_priv->glocont_urb;
-
- /* Work out which port within the device is being setup */
-- device_port = port->number - port->serial->minor;
-+ device_port = port->port_number;
-
- /* Make sure we have an urb then send the message */
- if (this_urb == NULL) {
-- dev_dbg(&port->dev, "%s - oops no urb for port %d.\n", __func__,
-- port->number);
-+ dev_dbg(&port->dev, "%s - oops no urb for port.\n", __func__);
- return -1;
- }
-
-@@ -2391,7 +2388,7 @@ static int keyspan_port_probe(struct usb
- /* Setup values for the various callback routines */
- cback = &keyspan_callbacks[d_details->msg_format];
-
-- port_num = port->number - port->serial->minor;
-+ port_num = port->port_number;
-
- /* Do indat endpoints first, once for each flip */
- endp = d_details->indat_endpoints[port_num];
---- a/drivers/usb/serial/metro-usb.c
-+++ b/drivers/usb/serial/metro-usb.c
-@@ -224,8 +224,8 @@ static int metrousb_open(struct tty_stru
- result = metrousb_send_unidirectional_cmd(UNI_CMD_OPEN, port);
- if (result) {
- dev_err(&port->dev,
-- "%s - failed to configure device for port number=%d, error code=%d\n",
-- __func__, port->number, result);
-+ "%s - failed to configure device, error code=%d\n",
-+ __func__, result);
- goto exit;
- }
-
---- a/drivers/usb/serial/mos7720.c
-+++ b/drivers/usb/serial/mos7720.c
-@@ -1047,7 +1047,7 @@ static int mos7720_open(struct tty_struc
- *
- * 0x08 : SP1/2 Control Reg
- */
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
- read_mos_reg(serial, port_number, LSR, &data);
-
- dev_dbg(&port->dev, "SS::%p LSR:%x\n", mos7720_port, data);
-@@ -1066,7 +1066,7 @@ static int mos7720_open(struct tty_struc
-
- write_mos_reg(serial, port_number, SP_CONTROL_REG, 0x00);
- read_mos_reg(serial, dummy, SP_CONTROL_REG, &data);
-- data = data | (port->number - port->serial->minor + 1);
-+ data = data | (port->port_number + 1);
- write_mos_reg(serial, dummy, SP_CONTROL_REG, data);
- mos7720_port->shadowLCR = 0x83;
- write_mos_reg(serial, port_number, LCR, mos7720_port->shadowLCR);
-@@ -1147,8 +1147,8 @@ static void mos7720_close(struct usb_ser
- usb_kill_urb(port->write_urb);
- usb_kill_urb(port->read_urb);
-
-- write_mos_reg(serial, port->number - port->serial->minor, MCR, 0x00);
-- write_mos_reg(serial, port->number - port->serial->minor, IER, 0x00);
-+ write_mos_reg(serial, port->port_number, MCR, 0x00);
-+ write_mos_reg(serial, port->port_number, IER, 0x00);
-
- mos7720_port->open = 0;
- }
-@@ -1172,8 +1172,7 @@ static void mos7720_break(struct tty_str
- data = mos7720_port->shadowLCR & ~UART_LCR_SBC;
-
- mos7720_port->shadowLCR = data;
-- write_mos_reg(serial, port->number - port->serial->minor,
-- LCR, mos7720_port->shadowLCR);
-+ write_mos_reg(serial, port->port_number, LCR, mos7720_port->shadowLCR);
- }
-
- /*
-@@ -1304,8 +1303,8 @@ static void mos7720_throttle(struct tty_
- /* if we are implementing RTS/CTS, toggle that line */
- if (tty->termios.c_cflag & CRTSCTS) {
- mos7720_port->shadowMCR &= ~UART_MCR_RTS;
-- write_mos_reg(port->serial, port->number - port->serial->minor,
-- MCR, mos7720_port->shadowMCR);
-+ write_mos_reg(port->serial, port->port_number, MCR,
-+ mos7720_port->shadowMCR);
- if (status != 0)
- return;
- }
-@@ -1336,8 +1335,8 @@ static void mos7720_unthrottle(struct tt
- /* if we are implementing RTS/CTS, toggle that line */
- if (tty->termios.c_cflag & CRTSCTS) {
- mos7720_port->shadowMCR |= UART_MCR_RTS;
-- write_mos_reg(port->serial, port->number - port->serial->minor,
-- MCR, mos7720_port->shadowMCR);
-+ write_mos_reg(port->serial, port->port_number, MCR,
-+ mos7720_port->shadowMCR);
- if (status != 0)
- return;
- }
-@@ -1361,7 +1360,7 @@ static int set_higher_rates(struct mosch
- * Init Sequence for higher rates
- ***********************************************/
- dev_dbg(&port->dev, "Sending Setting Commands ..........\n");
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
-
- write_mos_reg(serial, port_number, IER, 0x00);
- write_mos_reg(serial, port_number, FCR, 0x00);
-@@ -1487,7 +1486,7 @@ static int send_cmd_write_baud_rate(stru
- port = mos7720_port->port;
- serial = port->serial;
-
-- number = port->number - port->serial->minor;
-+ number = port->port_number;
- dev_dbg(&port->dev, "%s - baud = %d\n", __func__, baudrate);
-
- /* Calculate the Divisor */
-@@ -1538,7 +1537,7 @@ static void change_port_settings(struct
-
- port = mos7720_port->port;
- serial = port->serial;
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
-
- if (!mos7720_port->open) {
- dev_dbg(&port->dev, "%s - port not opened\n", __func__);
-@@ -1731,7 +1730,7 @@ static int get_lsr_info(struct tty_struc
- struct usb_serial_port *port = tty->driver_data;
- unsigned int result = 0;
- unsigned char data = 0;
-- int port_number = port->number - port->serial->minor;
-+ int port_number = port->port_number;
- int count;
-
- count = mos7720_chars_in_buffer(tty);
-@@ -1793,8 +1792,8 @@ static int mos7720_tiocmset(struct tty_s
- mcr &= ~UART_MCR_LOOP;
-
- mos7720_port->shadowMCR = mcr;
-- write_mos_reg(port->serial, port->number - port->serial->minor,
-- MCR, mos7720_port->shadowMCR);
-+ write_mos_reg(port->serial, port->port_number, MCR,
-+ mos7720_port->shadowMCR);
-
- return 0;
- }
-@@ -1838,8 +1837,8 @@ static int set_modem_info(struct moschip
- }
-
- mos7720_port->shadowMCR = mcr;
-- write_mos_reg(port->serial, port->number - port->serial->minor,
-- MCR, mos7720_port->shadowMCR);
-+ write_mos_reg(port->serial, port->port_number, MCR,
-+ mos7720_port->shadowMCR);
-
- return 0;
- }
-@@ -1856,7 +1855,7 @@ static int get_serial_info(struct moschi
-
- tmp.type = PORT_16550A;
- tmp.line = mos7720_port->port->serial->minor;
-- tmp.port = mos7720_port->port->number;
-+ tmp.port = mos7720_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- tmp.xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE;
---- a/drivers/usb/serial/mos7840.c
-+++ b/drivers/usb/serial/mos7840.c
-@@ -303,15 +303,12 @@ static int mos7840_set_uart_reg(struct u
- /* For the UART control registers, the application number need
- to be Or'ed */
- if (port->serial->num_ports == 4) {
-- val |= (((__u16) port->number -
-- (__u16) (port->serial->minor)) + 1) << 8;
-+ val |= ((__u16)port->port_number + 1) << 8;
- } else {
-- if (((__u16) port->number - (__u16) (port->serial->minor)) == 0) {
-- val |= (((__u16) port->number -
-- (__u16) (port->serial->minor)) + 1) << 8;
-+ if (port->port_number == 0) {
-+ val |= ((__u16)port->port_number + 1) << 8;
- } else {
-- val |= (((__u16) port->number -
-- (__u16) (port->serial->minor)) + 2) << 8;
-+ val |= ((__u16)port->port_number + 2) << 8;
- }
- }
- dev_dbg(&port->dev, "%s application number is %x\n", __func__, val);
-@@ -340,16 +337,12 @@ static int mos7840_get_uart_reg(struct u
-
- /* Wval is same as application number */
- if (port->serial->num_ports == 4) {
-- Wval =
-- (((__u16) port->number - (__u16) (port->serial->minor)) +
-- 1) << 8;
-+ Wval = ((__u16)port->port_number + 1) << 8;
- } else {
-- if (((__u16) port->number - (__u16) (port->serial->minor)) == 0) {
-- Wval = (((__u16) port->number -
-- (__u16) (port->serial->minor)) + 1) << 8;
-+ if (port->port_number == 0) {
-+ Wval = ((__u16)port->port_number + 1) << 8;
- } else {
-- Wval = (((__u16) port->number -
-- (__u16) (port->serial->minor)) + 2) << 8;
-+ Wval = ((__u16)port->port_number + 2) << 8;
- }
- }
- dev_dbg(&port->dev, "%s application number is %x\n", __func__, Wval);
-@@ -631,9 +624,7 @@ static void mos7840_interrupt_callback(s
-
- for (i = 0; i < serial->num_ports; i++) {
- mos7840_port = mos7840_get_port_private(serial->port[i]);
-- wval =
-- (((__u16) serial->port[i]->number -
-- (__u16) (serial->minor)) + 1) << 8;
-+ wval = ((__u16)serial->port[i]->port_number + 1) << 8;
- if (mos7840_port->open) {
- if (sp[i] & 0x01) {
- dev_dbg(&urb->dev->dev, "SP%d No Interrupt !!!\n", i);
-@@ -1065,8 +1056,8 @@ static int mos7840_open(struct tty_struc
- * (can't set it up in mos7840_startup as the *
- * structures were not set up at that time.) */
-
-- dev_dbg(&port->dev, "port number is %d\n", port->number);
-- dev_dbg(&port->dev, "serial number is %d\n", port->serial->minor);
-+ dev_dbg(&port->dev, "port number is %d\n", port->port_number);
-+ dev_dbg(&port->dev, "minor number is %d\n", port->serial->minor);
- dev_dbg(&port->dev, "Bulkin endpoint is %d\n", port->bulk_in_endpointAddress);
- dev_dbg(&port->dev, "BulkOut endpoint is %d\n", port->bulk_out_endpointAddress);
- dev_dbg(&port->dev, "Interrupt endpoint is %d\n", port->interrupt_in_endpointAddress);
-@@ -1074,9 +1065,7 @@ static int mos7840_open(struct tty_struc
- mos7840_port->read_urb = port->read_urb;
-
- /* set up our bulk in urb */
-- if ((serial->num_ports == 2)
-- && ((((__u16)port->number -
-- (__u16)(port->serial->minor)) % 2) != 0)) {
-+ if ((serial->num_ports == 2) && (((__u16)port->port_number % 2) != 0)) {
- usb_fill_bulk_urb(mos7840_port->read_urb,
- serial->dev,
- usb_rcvbulkpipe(serial->dev,
-@@ -1199,7 +1188,7 @@ static void mos7840_close(struct usb_ser
- mos7840_port->read_urb_busy = false;
-
- port0->open_ports--;
-- dev_dbg(&port->dev, "%s in close%d:in port%d\n", __func__, port0->open_ports, port->number);
-+ dev_dbg(&port->dev, "%s in close%d\n", __func__, port0->open_ports);
- if (port0->open_ports == 0) {
- if (serial->port[0]->interrupt_in_urb) {
- dev_dbg(&port->dev, "Shutdown interrupt_in_urb\n");
-@@ -1435,9 +1424,7 @@ static int mos7840_write(struct tty_stru
- memcpy(urb->transfer_buffer, current_position, transfer_size);
-
- /* fill urb with data and submit */
-- if ((serial->num_ports == 2)
-- && ((((__u16)port->number -
-- (__u16)(port->serial->minor)) % 2) != 0)) {
-+ if ((serial->num_ports == 2) && (((__u16)port->port_number % 2) != 0)) {
- usb_fill_bulk_urb(urb,
- serial->dev,
- usb_sndbulkpipe(serial->dev,
-@@ -1732,10 +1719,9 @@ static int mos7840_send_cmd_write_baud_r
- if (mos7840_serial_paranoia_check(port->serial, __func__))
- return -1;
-
-- number = mos7840_port->port->number - mos7840_port->port->serial->minor;
-+ number = mos7840_port->port->port_number;
-
-- dev_dbg(&port->dev, "%s - port = %d, baud = %d\n", __func__,
-- mos7840_port->port->number, baudRate);
-+ dev_dbg(&port->dev, "%s - baud = %d\n", __func__, baudRate);
- /* reset clk_uart_sel in spregOffset */
- if (baudRate > 115200) {
- #ifdef HW_flow_control
-@@ -2016,7 +2002,6 @@ static void mos7840_set_termios(struct t
- tty->termios.c_cflag, RELEVANT_IFLAG(tty->termios.c_iflag));
- dev_dbg(&port->dev, "%s - old clfag %08x old iflag %08x\n", __func__,
- old_termios->c_cflag, RELEVANT_IFLAG(old_termios->c_iflag));
-- dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
-
- /* change the port settings to the new ones specified */
-
-@@ -2084,7 +2069,7 @@ static int mos7840_get_serial_info(struc
-
- tmp.type = PORT_16550A;
- tmp.line = mos7840_port->port->serial->minor;
-- tmp.port = mos7840_port->port->number;
-+ tmp.port = mos7840_port->port->port_number;
- tmp.irq = 0;
- tmp.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- tmp.xmit_fifo_size = NUM_URBS * URB_TRANSFER_BUFFER_SIZE;
-@@ -2240,7 +2225,7 @@ static int mos7840_port_probe(struct usb
- /* we set up the pointers to the endpoints in the mos7840_open *
- * function, as the structures aren't created yet. */
-
-- pnum = port->number - serial->minor;
-+ pnum = port->port_number;
-
- dev_dbg(&port->dev, "mos7840_startup: configuring port %d\n", pnum);
- mos7840_port = kzalloc(sizeof(struct moschip_port), GFP_KERNEL);
-@@ -2261,7 +2246,6 @@ static int mos7840_port_probe(struct usb
- * usb-serial.c:get_free_serial() and cannot therefore be used
- * to index device instances */
- mos7840_port->port_num = pnum + 1;
-- dev_dbg(&port->dev, "port->number = %d\n", port->number);
- dev_dbg(&port->dev, "port->serial->minor = %d\n", port->serial->minor);
- dev_dbg(&port->dev, "mos7840_port->port_num = %d\n", mos7840_port->port_num);
- dev_dbg(&port->dev, "serial->minor = %d\n", serial->minor);
---- a/drivers/usb/serial/opticon.c
-+++ b/drivers/usb/serial/opticon.c
-@@ -367,7 +367,7 @@ static int opticon_ioctl(struct tty_stru
- {
- struct usb_serial_port *port = tty->driver_data;
-
-- dev_dbg(&port->dev, "%s - port %d, cmd = 0x%x\n", __func__, port->number, cmd);
-+ dev_dbg(&port->dev, "%s - cmd = 0x%x\n", __func__, cmd);
-
- switch (cmd) {
- case TIOCGSERIAL:
---- a/drivers/usb/serial/pl2303.c
-+++ b/drivers/usb/serial/pl2303.c
-@@ -642,7 +642,7 @@ static int pl2303_ioctl(struct tty_struc
- memset(&ser, 0, sizeof ser);
- ser.type = PORT_16654;
- ser.line = port->serial->minor;
-- ser.port = port->number;
-+ ser.port = port->port_number;
- ser.baud_base = 460800;
-
- if (copy_to_user((void __user *)arg, &ser, sizeof ser))
---- a/drivers/usb/serial/quatech2.c
-+++ b/drivers/usb/serial/quatech2.c
-@@ -343,7 +343,7 @@ static int qt2_open(struct tty_struct *t
- int status;
- unsigned long flags;
-
-- device_port = (u16) (port->number - port->serial->minor);
-+ device_port = port->port_number;
-
- serial = port->serial;
-
-@@ -388,9 +388,8 @@ static int qt2_open(struct tty_struct *t
- status = qt2_set_port_config(serial->dev, device_port,
- DEFAULT_BAUD_RATE, UART_LCR_WLEN8);
- if (status < 0) {
-- dev_err(&port->dev,
-- "%s - initial setup failed for port %i (%i)\n",
-- __func__, port->number, device_port);
-+ dev_err(&port->dev, "%s - initial setup failed (%i)\n",
-+ __func__, device_port);
- return status;
- }
-
---- a/drivers/usb/serial/sierra.c
-+++ b/drivers/usb/serial/sierra.c
-@@ -914,7 +914,7 @@ static int sierra_port_probe(struct usb_
- /* This is really the usb-serial port number of the interface
- * rather than the interface number.
- */
-- ifnum = port->number - serial->minor;
-+ ifnum = port->port_number;
- himemoryp = &typeA_interface_list;
- }
-
---- a/drivers/usb/serial/ti_usb_3410_5052.c
-+++ b/drivers/usb/serial/ti_usb_3410_5052.c
-@@ -477,7 +477,7 @@ static int ti_open(struct tty_struct *tt
- if (mutex_lock_interruptible(&tdev->td_open_close_lock))
- return -ERESTARTSYS;
-
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
-
- tport->tp_msr = 0;
- tport->tp_shadow_mcr |= (TI_MCR_RTS | TI_MCR_DTR);
-@@ -619,7 +619,7 @@ static void ti_close(struct usb_serial_p
- kfifo_reset_out(&tport->write_fifo);
- spin_unlock_irqrestore(&tport->tp_lock, flags);
-
-- port_number = port->number - port->serial->minor;
-+ port_number = port->port_number;
-
- dev_dbg(&port->dev, "%s - sending TI_CLOSE_PORT\n", __func__);
- status = ti_command_out_sync(tdev, TI_CLOSE_PORT,
-@@ -777,7 +777,7 @@ static void ti_set_termios(struct tty_st
- tcflag_t cflag, iflag;
- int baud;
- int status;
-- int port_number = port->number - port->serial->minor;
-+ int port_number = port->port_number;
- unsigned int mcr;
-
- cflag = tty->termios.c_cflag;
-@@ -1263,7 +1263,7 @@ static int ti_get_lsr(struct ti_port *tp
- int size, status;
- struct ti_device *tdev = tport->tp_tdev;
- struct usb_serial_port *port = tport->tp_port;
-- int port_number = port->number - port->serial->minor;
-+ int port_number = port->port_number;
- struct ti_port_status *data;
-
- size = sizeof(struct ti_port_status);
-@@ -1310,7 +1310,7 @@ static int ti_get_serial_info(struct ti_
-
- ret_serial.type = PORT_16550A;
- ret_serial.line = port->serial->minor;
-- ret_serial.port = port->number - port->serial->minor;
-+ ret_serial.port = port->port_number;
- ret_serial.flags = tport->tp_flags;
- ret_serial.xmit_fifo_size = TI_WRITE_BUF_SIZE;
- ret_serial.baud_base = tport->tp_tdev->td_is_3410 ? 921600 : 460800;
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -105,9 +105,10 @@ static struct usb_serial *get_free_seria
- *minor = i;
- j = 0;
- dev_dbg(&serial->interface->dev, "%s - minor base = %d\n", __func__, *minor);
-- for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i) {
-+ for (i = *minor; (i < (*minor + num_ports)) && (i < SERIAL_TTY_MINORS); ++i, ++j) {
- serial_table[i] = serial;
-- serial->port[j++]->number = i;
-+ serial->port[j]->minor = i;
-+ serial->port[j]->port_number = i - *minor;
- }
- mutex_unlock(&table_lock);
- return serial;
-@@ -1048,7 +1049,7 @@ static int usb_serial_probe(struct usb_i
- /* register all of the individual ports with the driver core */
- for (i = 0; i < num_ports; ++i) {
- port = serial->port[i];
-- dev_set_name(&port->dev, "ttyUSB%d", port->number);
-+ dev_set_name(&port->dev, "ttyUSB%d", port->minor);
- dev_dbg(ddev, "registering %s", dev_name(&port->dev));
- device_enable_async_suspend(&port->dev);
-
---- a/drivers/usb/serial/usb_wwan.c
-+++ b/drivers/usb/serial/usb_wwan.c
-@@ -125,7 +125,7 @@ static int get_serial_info(struct usb_se
-
- memset(&tmp, 0, sizeof(tmp));
- tmp.line = port->serial->minor;
-- tmp.port = port->number;
-+ tmp.port = port->port_number;
- tmp.baud_base = tty_get_baud_rate(port->port.tty);
- tmp.close_delay = port->port.close_delay / 10;
- tmp.closing_wait = port->port.closing_wait == ASYNC_CLOSING_WAIT_NONE ?
---- a/drivers/usb/serial/whiteheat.c
-+++ b/drivers/usb/serial/whiteheat.c
-@@ -462,7 +462,7 @@ static int whiteheat_ioctl(struct tty_st
- memset(&serstruct, 0, sizeof(serstruct));
- serstruct.type = PORT_16654;
- serstruct.line = port->serial->minor;
-- serstruct.port = port->number;
-+ serstruct.port = port->port_number;
- serstruct.flags = ASYNC_SKIP_TEST | ASYNC_AUTO_IRQ;
- serstruct.xmit_fifo_size = kfifo_size(&port->write_fifo);
- serstruct.custom_divisor = 0;
-@@ -626,7 +626,7 @@ static int firm_open(struct usb_serial_p
- {
- struct whiteheat_simple open_command;
-
-- open_command.port = port->number - port->serial->minor + 1;
-+ open_command.port = port->port_number + 1;
- return firm_send_command(port, WHITEHEAT_OPEN,
- (__u8 *)&open_command, sizeof(open_command));
- }
-@@ -636,7 +636,7 @@ static int firm_close(struct usb_serial_
- {
- struct whiteheat_simple close_command;
-
-- close_command.port = port->number - port->serial->minor + 1;
-+ close_command.port = port->port_number + 1;
- return firm_send_command(port, WHITEHEAT_CLOSE,
- (__u8 *)&close_command, sizeof(close_command));
- }
-@@ -649,7 +649,7 @@ static void firm_setup_port(struct tty_s
- struct whiteheat_port_settings port_settings;
- unsigned int cflag = tty->termios.c_cflag;
-
-- port_settings.port = port->number - port->serial->minor + 1;
-+ port_settings.port = port->port_number + 1;
-
- /* get the byte size */
- switch (cflag & CSIZE) {
-@@ -726,7 +726,7 @@ static int firm_set_rts(struct usb_seria
- {
- struct whiteheat_set_rdb rts_command;
-
-- rts_command.port = port->number - port->serial->minor + 1;
-+ rts_command.port = port->port_number + 1;
- rts_command.state = onoff;
- return firm_send_command(port, WHITEHEAT_SET_RTS,
- (__u8 *)&rts_command, sizeof(rts_command));
-@@ -737,7 +737,7 @@ static int firm_set_dtr(struct usb_seria
- {
- struct whiteheat_set_rdb dtr_command;
-
-- dtr_command.port = port->number - port->serial->minor + 1;
-+ dtr_command.port = port->port_number + 1;
- dtr_command.state = onoff;
- return firm_send_command(port, WHITEHEAT_SET_DTR,
- (__u8 *)&dtr_command, sizeof(dtr_command));
-@@ -748,7 +748,7 @@ static int firm_set_break(struct usb_ser
- {
- struct whiteheat_set_rdb break_command;
-
-- break_command.port = port->number - port->serial->minor + 1;
-+ break_command.port = port->port_number + 1;
- break_command.state = onoff;
- return firm_send_command(port, WHITEHEAT_SET_BREAK,
- (__u8 *)&break_command, sizeof(break_command));
-@@ -759,7 +759,7 @@ static int firm_purge(struct usb_serial_
- {
- struct whiteheat_purge purge_command;
-
-- purge_command.port = port->number - port->serial->minor + 1;
-+ purge_command.port = port->port_number + 1;
- purge_command.what = rxtx;
- return firm_send_command(port, WHITEHEAT_PURGE,
- (__u8 *)&purge_command, sizeof(purge_command));
-@@ -770,7 +770,7 @@ static int firm_get_dtr_rts(struct usb_s
- {
- struct whiteheat_simple get_dr_command;
-
-- get_dr_command.port = port->number - port->serial->minor + 1;
-+ get_dr_command.port = port->port_number + 1;
- return firm_send_command(port, WHITEHEAT_GET_DTR_RTS,
- (__u8 *)&get_dr_command, sizeof(get_dr_command));
- }
-@@ -780,7 +780,7 @@ static int firm_report_tx_done(struct us
- {
- struct whiteheat_simple close_command;
-
-- close_command.port = port->number - port->serial->minor + 1;
-+ close_command.port = port->port_number + 1;
- return firm_send_command(port, WHITEHEAT_REPORT_TX_DONE,
- (__u8 *)&close_command, sizeof(close_command));
- }
---- a/include/linux/usb/serial.h
-+++ b/include/linux/usb/serial.h
-@@ -37,7 +37,8 @@
- * @serial: pointer back to the struct usb_serial owner of this port.
- * @port: pointer to the corresponding tty_port for this port.
- * @lock: spinlock to grab when updating portions of this structure.
-- * @number: the number of the port (the minor number).
-+ * @minor: the minor number of the port
-+ * @port_number: the struct usb_serial port number of this port (starts at 0)
- * @interrupt_in_buffer: pointer to the interrupt in buffer for this port.
- * @interrupt_in_urb: pointer to the interrupt in struct urb for this port.
- * @interrupt_in_endpointAddress: endpoint address for the interrupt in pipe
-@@ -80,7 +81,8 @@ struct usb_serial_port {
- struct usb_serial *serial;
- struct tty_port port;
- spinlock_t lock;
-- unsigned char number;
-+ u32 minor;
-+ u8 port_number;
-
- unsigned char *interrupt_in_buffer;
- struct urb *interrupt_in_urb;