diff options
author | Martin Schitter <ms@gewi.kfunigraz.ac.at> | 2005-06-23 03:09:55 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-23 12:45:27 -0400 |
commit | 44e58a6a0bd604f46be9d808408a1cd880cc9b19 (patch) | |
tree | a8cf955105a3a02504bdb6cccf36e4d21f5b2007 | |
parent | 328007b70c8e99c62eef5bc310d8a21d0e937342 (diff) |
[PATCH] parport: NetMos nm9855 fix
kernel 2.6.12-rc2 adopted some code by Bjorn Helgaas supporting NetMos combo
controller cards. this implementation doesn't work for nm9855 based cards!
there are two reasons:
a) the module 'parport_pc' doesn't want to give the resonsibility for
the netmos_9855 to 'parport_serial' and can not handle the serial lines
-- trivial to fix...
http://lists.infradead.org/pipermail/linux-parport/2005-February/000250.html
http://lkml.org/lkml/2005/3/24/199 b) the support for the nm9855 in
'parport_serial' still doesn't work because of wrong assumptions about
the relevant BARs port address layout for this chip:
0000:00:09.0 Communication controller:
NetMos Technology PCI 9855
Multi-I/O Controller (rev 01)
(= 9710:9855)
Subsystem: LSI Logic / Symbios Logic 1P4S (= 1000:0014)
Flags: medium devsel, IRQ 177
I/O ports at a800 [size=8] (= parport)
I/O ports at a400 [size=8]
I/O ports at a000 [size=8] (= serial)
I/O ports at 9800 [size=8] (= serial)
I/O ports at 9400 [size=8] (= serial)
I/O ports at 9000 [size=16] (= serial)
the following patch will fix the problem.
Cc: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/parport/parport_pc.c | 4 | ||||
-rw-r--r-- | drivers/parport/parport_serial.c | 5 |
2 files changed, 4 insertions, 5 deletions
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c index e7f3bcb79000..80edfa3abd29 100644 --- a/drivers/parport/parport_pc.c +++ b/drivers/parport/parport_pc.c | |||
@@ -2751,7 +2751,6 @@ enum parport_pc_pci_cards { | |||
2751 | netmos_9755, | 2751 | netmos_9755, |
2752 | netmos_9805, | 2752 | netmos_9805, |
2753 | netmos_9815, | 2753 | netmos_9815, |
2754 | netmos_9855, | ||
2755 | }; | 2754 | }; |
2756 | 2755 | ||
2757 | 2756 | ||
@@ -2826,7 +2825,6 @@ static struct parport_pc_pci { | |||
2826 | /* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} }, /* untested */ | 2825 | /* netmos_9755 */ { 2, { { 0, 1 }, { 2, 3 },} }, /* untested */ |
2827 | /* netmos_9805 */ { 1, { { 0, -1 }, } }, /* untested */ | 2826 | /* netmos_9805 */ { 1, { { 0, -1 }, } }, /* untested */ |
2828 | /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, /* untested */ | 2827 | /* netmos_9815 */ { 2, { { 0, -1 }, { 2, -1 }, } }, /* untested */ |
2829 | /* netmos_9855 */ { 2, { { 0, -1 }, { 2, -1 }, } }, /* untested */ | ||
2830 | }; | 2828 | }; |
2831 | 2829 | ||
2832 | static struct pci_device_id parport_pc_pci_tbl[] = { | 2830 | static struct pci_device_id parport_pc_pci_tbl[] = { |
@@ -2907,8 +2905,6 @@ static struct pci_device_id parport_pc_pci_tbl[] = { | |||
2907 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9805 }, | 2905 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9805 }, |
2908 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9815, | 2906 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9815, |
2909 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 }, | 2907 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9815 }, |
2910 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, | ||
2911 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 }, | ||
2912 | { 0, } /* terminate list */ | 2908 | { 0, } /* terminate list */ |
2913 | }; | 2909 | }; |
2914 | MODULE_DEVICE_TABLE(pci,parport_pc_pci_tbl); | 2910 | MODULE_DEVICE_TABLE(pci,parport_pc_pci_tbl); |
diff --git a/drivers/parport/parport_serial.c b/drivers/parport/parport_serial.c index 6715a17b5d0f..00498e2f1205 100644 --- a/drivers/parport/parport_serial.c +++ b/drivers/parport/parport_serial.c | |||
@@ -34,6 +34,7 @@ enum parport_pc_pci_cards { | |||
34 | titan_110l = 0, | 34 | titan_110l = 0, |
35 | titan_210l, | 35 | titan_210l, |
36 | netmos_9xx5_combo, | 36 | netmos_9xx5_combo, |
37 | netmos_9855, | ||
37 | avlab_1s1p, | 38 | avlab_1s1p, |
38 | avlab_1s1p_650, | 39 | avlab_1s1p_650, |
39 | avlab_1s1p_850, | 40 | avlab_1s1p_850, |
@@ -87,6 +88,7 @@ static struct parport_pc_pci cards[] __devinitdata = { | |||
87 | /* titan_110l */ { 1, { { 3, -1 }, } }, | 88 | /* titan_110l */ { 1, { { 3, -1 }, } }, |
88 | /* titan_210l */ { 1, { { 3, -1 }, } }, | 89 | /* titan_210l */ { 1, { { 3, -1 }, } }, |
89 | /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init }, | 90 | /* netmos_9xx5_combo */ { 1, { { 2, -1 }, }, netmos_parallel_init }, |
91 | /* netmos_9855 */ { 1, { { 0, -1 }, }, netmos_parallel_init }, | ||
90 | /* avlab_1s1p */ { 1, { { 1, 2}, } }, | 92 | /* avlab_1s1p */ { 1, { { 1, 2}, } }, |
91 | /* avlab_1s1p_650 */ { 1, { { 1, 2}, } }, | 93 | /* avlab_1s1p_650 */ { 1, { { 1, 2}, } }, |
92 | /* avlab_1s1p_850 */ { 1, { { 1, 2}, } }, | 94 | /* avlab_1s1p_850 */ { 1, { { 1, 2}, } }, |
@@ -120,7 +122,7 @@ static struct pci_device_id parport_serial_pci_tbl[] = { | |||
120 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845, | 122 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9845, |
121 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo }, | 123 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo }, |
122 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, | 124 | { PCI_VENDOR_ID_NETMOS, PCI_DEVICE_ID_NETMOS_9855, |
123 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9xx5_combo }, | 125 | PCI_ANY_ID, PCI_ANY_ID, 0, 0, netmos_9855 }, |
124 | /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ | 126 | /* PCI_VENDOR_ID_AVLAB/Intek21 has another bunch of cards ...*/ |
125 | { 0x14db, 0x2110, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p}, | 127 | { 0x14db, 0x2110, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p}, |
126 | { 0x14db, 0x2111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p_650}, | 128 | { 0x14db, 0x2111, PCI_ANY_ID, PCI_ANY_ID, 0, 0, avlab_1s1p_650}, |
@@ -207,6 +209,7 @@ static struct pci_board_no_ids pci_boards[] __devinitdata = { | |||
207 | /* titan_110l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 1, 921600 }, | 209 | /* titan_110l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 1, 921600 }, |
208 | /* titan_210l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 2, 921600 }, | 210 | /* titan_210l */ { SPCI_FL_BASE1 | SPCI_FL_BASE_TABLE, 2, 921600 }, |
209 | /* netmos_9xx5_combo */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200, 0, 0, netmos_serial_init }, | 211 | /* netmos_9xx5_combo */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200, 0, 0, netmos_serial_init }, |
212 | /* netmos_9855 */ { SPCI_FL_BASE2 | SPCI_FL_BASE_TABLE, 1, 115200, 0, 0, netmos_serial_init }, | ||
210 | /* avlab_1s1p (n/t) */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, | 213 | /* avlab_1s1p (n/t) */ { SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, |
211 | /* avlab_1s1p_650 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, | 214 | /* avlab_1s1p_650 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, |
212 | /* avlab_1s1p_850 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, | 215 | /* avlab_1s1p_850 (nt)*/{ SPCI_FL_BASE0 | SPCI_FL_BASE_TABLE, 1, 115200 }, |