From: Greg Kroah-Hartman Date: Tue, 16 Jun 2009 00:02:11 +0000 (-0700) Subject: start .29 series X-Git-Tag: v2.6.27.26~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0ef9e65427fd3f6d7381fc07a72113ad46ad61d4;p=thirdparty%2Fkernel%2Fstable-queue.git start .29 series --- diff --git a/queue-2.6.29/parport-netmos-9845-9855-1p4s-fixes.patch b/queue-2.6.29/parport-netmos-9845-9855-1p4s-fixes.patch new file mode 100644 index 00000000000..290fbc4b137 --- /dev/null +++ b/queue-2.6.29/parport-netmos-9845-9855-1p4s-fixes.patch @@ -0,0 +1,125 @@ +From 50db9d8e4ca17974595e3848cb65f9371a304de4 Mon Sep 17 00:00:00 2001 +From: Philippe De Muyter +Date: Thu, 2 Apr 2009 16:58:53 -0700 +Subject: parport: netmos 9845 & 9855 1P4S fixes + +From: Philippe De Muyter + +commit 50db9d8e4ca17974595e3848cb65f9371a304de4 upstream. + +netmos serial/parallel adapters come in different flavour differing only +by the number of parallel and serial ports, which are encoded in the +subdevice ID. + +Last fix of Christian Pellegrin for 9855 2P2S broke support for 9855 1P4S, +and works only by side-effect for the first parallel port of a 2P2S, as +this first parallel port is found by reading the second addr entry of +(struct parport_pc_pci) cards[netmos_9855], which is not initialized, and +hence has value 0, which happens to be the BAR of the first parallel port. + +netmos_9xx5_combo entry in (struct parport_pc_pci) cards[], which is used +for a 9845 1P4S must also be fixed for the parallel port support when +there are 4 serial ports because this entry currently gives 2 as BAR index +for the parallel port. Actually, in this case, BAR 2 is the 3rd serial +port while the parallel port is at BAR 4. + +I fixed 9845 1P4S and 9855 1P4S support, while preserving 9855 2P2S support, + +- by creating a netmos_9855_2p entry and using it for 9855 boards with 2 + parallel ports : 9855 2P2S and 9855 2P0S boards, + +- and by allowing netmos_parallel_init to change not only the number of + parallel ports (0 or 1), but making it also change the BAR index of the + parallel port when the serial ports are before the parallel port. + +PS: the netmos_9855_2p entry in (struct pciserial_board) +pci_parport_serial_boards[] is needed because netmos_parallel_init has no +clean way to replace FL_BASE2 by FL_BASE4 in the description of the serial +ports in function of the number of parallel ports on the card. + +Tested with 9845 1P4S, 9855 1P4S and 9855 2P2S boards. + +Signed-off-by: Philippe De Muyter +Tested-by: Christian Pellegrin +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/parport/parport_serial.c | 30 +++++++++++++++++++++++++----- + 1 file changed, 25 insertions(+), 5 deletions(-) + +--- a/drivers/parport/parport_serial.c ++++ b/drivers/parport/parport_serial.c +@@ -30,6 +30,7 @@ enum parport_pc_pci_cards { + titan_210l, + netmos_9xx5_combo, + netmos_9855, ++ netmos_9855_2p, + avlab_1s1p, + avlab_1s2p, + avlab_2s1p, +@@ -62,7 +63,7 @@ struct parport_pc_pci { + struct parport_pc_pci *card, int failed); + }; + +-static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *card, int autoirq, int autodma) ++static int __devinit netmos_parallel_init(struct pci_dev *dev, struct parport_pc_pci *par, int autoirq, int autodma) + { + /* the rule described below doesn't hold for this device */ + if (dev->device == PCI_DEVICE_ID_NETMOS_9835 && +@@ -74,9 +75,17 @@ static int __devinit netmos_parallel_ini + * and serial ports. The form is 0x00PS, where

is the number of + * parallel ports and is the number of serial ports. + */ +- card->numports = (dev->subsystem_device & 0xf0) >> 4; +- if (card->numports > ARRAY_SIZE(card->addr)) +- card->numports = ARRAY_SIZE(card->addr); ++ par->numports = (dev->subsystem_device & 0xf0) >> 4; ++ if (par->numports > ARRAY_SIZE(par->addr)) ++ par->numports = ARRAY_SIZE(par->addr); ++ /* ++ * This function is currently only called for cards with up to ++ * one parallel port. ++ * Parallel port BAR is either before or after serial ports BARS; ++ * hence, lo should be either 0 or equal to the number of serial ports. ++ */ ++ if (par->addr[0].lo != 0) ++ par->addr[0].lo = dev->subsystem_device & 0xf; + return 0; + } + +@@ -84,7 +93,8 @@ static struct parport_pc_pci cards[] __d + /* titan_110l */ { 1, { { 3, -1 }, } }, + /* titan_210l */ { 1, { { 3, -1 }, } }, + /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init }, +- /* netmos_9855 */ { 1, { { 2, -1 }, }, netmos_parallel_init }, ++ /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init }, ++ /* netmos_9855_2p */ { 2, { { 0, -1 }, { 2, -1 }, } }, + /* avlab_1s1p */ { 1, { { 1, 2}, } }, + /* avlab_1s2p */ { 2, { { 1, 2}, { 3, 4 },} }, + /* avlab_2s1p */ { 1, { { 2, 3}, } }, +@@ -110,6 +120,10 @@ static struct pci_device_id parport_seri + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo }, + { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, ++ 0x1000, 0x0020, 0, 0, netmos_9855_2p }, ++ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, ++ 0x1000, 0x0022, 0, 0, netmos_9855_2p }, ++ { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 }, + /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ + { PCI_VENDOR_ID_AFAVLAB, 0x2110, +@@ -192,6 +206,12 @@ static struct pciserial_board pci_parpor + .uart_offset = 8, + }, + [netmos_9855] = { ++ .flags = FL_BASE2 | FL_BASE_BARS, ++ .num_ports = 1, ++ .base_baud = 115200, ++ .uart_offset = 8, ++ }, ++ [netmos_9855_2p] = { + .flags = FL_BASE4 | FL_BASE_BARS, + .num_ports = 1, + .base_baud = 115200, diff --git a/queue-2.6.29/series b/queue-2.6.29/series new file mode 100644 index 00000000000..d0d0e6289b0 --- /dev/null +++ b/queue-2.6.29/series @@ -0,0 +1 @@ +parport-netmos-9845-9855-1p4s-fixes.patch