19d85025bSMauro Carvalho ChehabParport
29d85025bSMauro Carvalho Chehab+++++++
39d85025bSMauro Carvalho Chehab
49d85025bSMauro Carvalho ChehabThe ``parport`` code provides parallel-port support under Linux.  This
59d85025bSMauro Carvalho Chehabincludes the ability to share one port between multiple device
69d85025bSMauro Carvalho Chehabdrivers.
79d85025bSMauro Carvalho Chehab
89d85025bSMauro Carvalho ChehabYou can pass parameters to the ``parport`` code to override its automatic
99d85025bSMauro Carvalho Chehabdetection of your hardware.  This is particularly useful if you want
109d85025bSMauro Carvalho Chehabto use IRQs, since in general these can't be autoprobed successfully.
119d85025bSMauro Carvalho ChehabBy default IRQs are not used even if they **can** be probed.  This is
129d85025bSMauro Carvalho Chehabbecause there are a lot of people using the same IRQ for their
139d85025bSMauro Carvalho Chehabparallel port and a sound card or network card.
149d85025bSMauro Carvalho Chehab
159d85025bSMauro Carvalho ChehabThe ``parport`` code is split into two parts: generic (which deals with
169d85025bSMauro Carvalho Chehabport-sharing) and architecture-dependent (which deals with actually
179d85025bSMauro Carvalho Chehabusing the port).
189d85025bSMauro Carvalho Chehab
199d85025bSMauro Carvalho Chehab
209d85025bSMauro Carvalho ChehabParport as modules
219d85025bSMauro Carvalho Chehab==================
229d85025bSMauro Carvalho Chehab
239d85025bSMauro Carvalho ChehabIf you load the `parport`` code as a module, say::
249d85025bSMauro Carvalho Chehab
259d85025bSMauro Carvalho Chehab	# insmod parport
269d85025bSMauro Carvalho Chehab
279d85025bSMauro Carvalho Chehabto load the generic ``parport`` code.  You then must load the
289d85025bSMauro Carvalho Chehabarchitecture-dependent code with (for example)::
299d85025bSMauro Carvalho Chehab
309d85025bSMauro Carvalho Chehab	# insmod parport_pc io=0x3bc,0x378,0x278 irq=none,7,auto
319d85025bSMauro Carvalho Chehab
329d85025bSMauro Carvalho Chehabto tell the ``parport`` code that you want three PC-style ports, one at
339d85025bSMauro Carvalho Chehab0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an
349d85025bSMauro Carvalho Chehabauto-detected IRQ.  Currently, PC-style (``parport_pc``), Sun ``bpp``,
359d85025bSMauro Carvalho ChehabAmiga, Atari, and MFC3 hardware is supported.
369d85025bSMauro Carvalho Chehab
379d85025bSMauro Carvalho ChehabPCI parallel I/O card support comes from ``parport_pc``.  Base I/O
389d85025bSMauro Carvalho Chehabaddresses should not be specified for supported PCI cards since they
399d85025bSMauro Carvalho Chehabare automatically detected.
409d85025bSMauro Carvalho Chehab
419d85025bSMauro Carvalho Chehab
429d85025bSMauro Carvalho Chehabmodprobe
439d85025bSMauro Carvalho Chehab--------
449d85025bSMauro Carvalho Chehab
459d85025bSMauro Carvalho ChehabIf you use modprobe , you will find it useful to add lines as below to a
469d85025bSMauro Carvalho Chehabconfiguration file in /etc/modprobe.d/ directory::
479d85025bSMauro Carvalho Chehab
489d85025bSMauro Carvalho Chehab	alias parport_lowlevel parport_pc
499d85025bSMauro Carvalho Chehab	options parport_pc io=0x378,0x278 irq=7,auto
509d85025bSMauro Carvalho Chehab
519d85025bSMauro Carvalho Chehabmodprobe will load ``parport_pc`` (with the options ``io=0x378,0x278 irq=7,auto``)
529d85025bSMauro Carvalho Chehabwhenever a parallel port device driver (such as ``lp``) is loaded.
539d85025bSMauro Carvalho Chehab
549d85025bSMauro Carvalho ChehabNote that these are example lines only!  You shouldn't in general need
559d85025bSMauro Carvalho Chehabto specify any options to ``parport_pc`` in order to be able to use a
569d85025bSMauro Carvalho Chehabparallel port.
579d85025bSMauro Carvalho Chehab
589d85025bSMauro Carvalho Chehab
599d85025bSMauro Carvalho ChehabParport probe [optional]
609d85025bSMauro Carvalho Chehab------------------------
619d85025bSMauro Carvalho Chehab
629d85025bSMauro Carvalho ChehabIn 2.2 kernels there was a module called ``parport_probe``, which was used
639d85025bSMauro Carvalho Chehabfor collecting IEEE 1284 device ID information.  This has now been
649d85025bSMauro Carvalho Chehabenhanced and now lives with the IEEE 1284 support.  When a parallel
659d85025bSMauro Carvalho Chehabport is detected, the devices that are connected to it are analysed,
669d85025bSMauro Carvalho Chehaband information is logged like this::
679d85025bSMauro Carvalho Chehab
689d85025bSMauro Carvalho Chehab	parport0: Printer, BJC-210 (Canon)
699d85025bSMauro Carvalho Chehab
709d85025bSMauro Carvalho ChehabThe probe information is available from files in ``/proc/sys/dev/parport/``.
719d85025bSMauro Carvalho Chehab
729d85025bSMauro Carvalho Chehab
739d85025bSMauro Carvalho ChehabParport linked into the kernel statically
749d85025bSMauro Carvalho Chehab=========================================
759d85025bSMauro Carvalho Chehab
769d85025bSMauro Carvalho ChehabIf you compile the ``parport`` code into the kernel, then you can use
779d85025bSMauro Carvalho Chehabkernel boot parameters to get the same effect.  Add something like the
789d85025bSMauro Carvalho Chehabfollowing to your LILO command line::
799d85025bSMauro Carvalho Chehab
809d85025bSMauro Carvalho Chehab	parport=0x3bc parport=0x378,7 parport=0x278,auto,nofifo
819d85025bSMauro Carvalho Chehab
829d85025bSMauro Carvalho ChehabYou can have many ``parport=...`` statements, one for each port you want
839d85025bSMauro Carvalho Chehabto add.  Adding ``parport=0`` to the kernel command-line will disable
849d85025bSMauro Carvalho Chehabparport support entirely.  Adding ``parport=auto`` to the kernel
859d85025bSMauro Carvalho Chehabcommand-line will make ``parport`` use any IRQ lines or DMA channels that
869d85025bSMauro Carvalho Chehabit auto-detects.
879d85025bSMauro Carvalho Chehab
889d85025bSMauro Carvalho Chehab
899d85025bSMauro Carvalho ChehabFiles in /proc
909d85025bSMauro Carvalho Chehab==============
919d85025bSMauro Carvalho Chehab
929d85025bSMauro Carvalho ChehabIf you have configured the ``/proc`` filesystem into your kernel, you will
939d85025bSMauro Carvalho Chehabsee a new directory entry: ``/proc/sys/dev/parport``.  In there will be a
949d85025bSMauro Carvalho Chehabdirectory entry for each parallel port for which parport is
959d85025bSMauro Carvalho Chehabconfigured.  In each of those directories are a collection of files
969d85025bSMauro Carvalho Chehabdescribing that parallel port.
979d85025bSMauro Carvalho Chehab
989d85025bSMauro Carvalho ChehabThe ``/proc/sys/dev/parport`` directory tree looks like::
999d85025bSMauro Carvalho Chehab
1009d85025bSMauro Carvalho Chehab	parport
1019d85025bSMauro Carvalho Chehab	|-- default
1029d85025bSMauro Carvalho Chehab	|   |-- spintime
1039d85025bSMauro Carvalho Chehab	|   `-- timeslice
1049d85025bSMauro Carvalho Chehab	|-- parport0
1059d85025bSMauro Carvalho Chehab	|   |-- autoprobe
1069d85025bSMauro Carvalho Chehab	|   |-- autoprobe0
1079d85025bSMauro Carvalho Chehab	|   |-- autoprobe1
1089d85025bSMauro Carvalho Chehab	|   |-- autoprobe2
1099d85025bSMauro Carvalho Chehab	|   |-- autoprobe3
1109d85025bSMauro Carvalho Chehab	|   |-- devices
1119d85025bSMauro Carvalho Chehab	|   |   |-- active
1129d85025bSMauro Carvalho Chehab	|   |   `-- lp
1139d85025bSMauro Carvalho Chehab	|   |       `-- timeslice
1149d85025bSMauro Carvalho Chehab	|   |-- base-addr
1159d85025bSMauro Carvalho Chehab	|   |-- irq
1169d85025bSMauro Carvalho Chehab	|   |-- dma
1179d85025bSMauro Carvalho Chehab	|   |-- modes
1189d85025bSMauro Carvalho Chehab	|   `-- spintime
1199d85025bSMauro Carvalho Chehab	`-- parport1
1209d85025bSMauro Carvalho Chehab	|-- autoprobe
1219d85025bSMauro Carvalho Chehab	|-- autoprobe0
1229d85025bSMauro Carvalho Chehab	|-- autoprobe1
1239d85025bSMauro Carvalho Chehab	|-- autoprobe2
1249d85025bSMauro Carvalho Chehab	|-- autoprobe3
1259d85025bSMauro Carvalho Chehab	|-- devices
1269d85025bSMauro Carvalho Chehab	|   |-- active
1279d85025bSMauro Carvalho Chehab	|   `-- ppa
1289d85025bSMauro Carvalho Chehab	|       `-- timeslice
1299d85025bSMauro Carvalho Chehab	|-- base-addr
1309d85025bSMauro Carvalho Chehab	|-- irq
1319d85025bSMauro Carvalho Chehab	|-- dma
1329d85025bSMauro Carvalho Chehab	|-- modes
1339d85025bSMauro Carvalho Chehab	`-- spintime
1349d85025bSMauro Carvalho Chehab
1359d85025bSMauro Carvalho Chehab.. tabularcolumns:: |p{4.0cm}|p{13.5cm}|
1369d85025bSMauro Carvalho Chehab
1379d85025bSMauro Carvalho Chehab=======================	=======================================================
1389d85025bSMauro Carvalho ChehabFile			Contents
1399d85025bSMauro Carvalho Chehab=======================	=======================================================
1409d85025bSMauro Carvalho Chehab``devices/active``	A list of the device drivers using that port.  A "+"
1419d85025bSMauro Carvalho Chehab			will appear by the name of the device currently using
1429d85025bSMauro Carvalho Chehab			the port (it might not appear against any).  The
1439d85025bSMauro Carvalho Chehab			string "none" means that there are no device drivers
1449d85025bSMauro Carvalho Chehab			using that port.
1459d85025bSMauro Carvalho Chehab
1469d85025bSMauro Carvalho Chehab``base-addr``		Parallel port's base address, or addresses if the port
1479d85025bSMauro Carvalho Chehab			has more than one in which case they are separated
1489d85025bSMauro Carvalho Chehab			with tabs.  These values might not have any sensible
1499d85025bSMauro Carvalho Chehab			meaning for some ports.
1509d85025bSMauro Carvalho Chehab
1519d85025bSMauro Carvalho Chehab``irq``			Parallel port's IRQ, or -1 if none is being used.
1529d85025bSMauro Carvalho Chehab
1539d85025bSMauro Carvalho Chehab``dma``			Parallel port's DMA channel, or -1 if none is being
1549d85025bSMauro Carvalho Chehab			used.
1559d85025bSMauro Carvalho Chehab
1569d85025bSMauro Carvalho Chehab``modes``		Parallel port's hardware modes, comma-separated,
1579d85025bSMauro Carvalho Chehab			meaning:
1589d85025bSMauro Carvalho Chehab
1599d85025bSMauro Carvalho Chehab			- PCSPP
1609d85025bSMauro Carvalho Chehab				PC-style SPP registers are available.
1619d85025bSMauro Carvalho Chehab
1629d85025bSMauro Carvalho Chehab			- TRISTATE
1639d85025bSMauro Carvalho Chehab				Port is bidirectional.
1649d85025bSMauro Carvalho Chehab
1659d85025bSMauro Carvalho Chehab			- COMPAT
1669d85025bSMauro Carvalho Chehab				Hardware acceleration for printers is
1679d85025bSMauro Carvalho Chehab				available and will be used.
1689d85025bSMauro Carvalho Chehab
1699d85025bSMauro Carvalho Chehab			- EPP
1709d85025bSMauro Carvalho Chehab				Hardware acceleration for EPP protocol
1719d85025bSMauro Carvalho Chehab				is available and will be used.
1729d85025bSMauro Carvalho Chehab
1739d85025bSMauro Carvalho Chehab			- ECP
1749d85025bSMauro Carvalho Chehab				Hardware acceleration for ECP protocol
1759d85025bSMauro Carvalho Chehab				is available and will be used.
1769d85025bSMauro Carvalho Chehab
1779d85025bSMauro Carvalho Chehab			- DMA
1789d85025bSMauro Carvalho Chehab				DMA is available and will be used.
1799d85025bSMauro Carvalho Chehab
1809d85025bSMauro Carvalho Chehab			Note that the current implementation will only take
1819d85025bSMauro Carvalho Chehab			advantage of COMPAT and ECP modes if it has an IRQ
1829d85025bSMauro Carvalho Chehab			line to use.
1839d85025bSMauro Carvalho Chehab
1849d85025bSMauro Carvalho Chehab``autoprobe``		Any IEEE-1284 device ID information that has been
1859d85025bSMauro Carvalho Chehab			acquired from the (non-IEEE 1284.3) device.
1869d85025bSMauro Carvalho Chehab
1879d85025bSMauro Carvalho Chehab``autoprobe[0-3]``	IEEE 1284 device ID information retrieved from
1889d85025bSMauro Carvalho Chehab			daisy-chain devices that conform to IEEE 1284.3.
1899d85025bSMauro Carvalho Chehab
1909d85025bSMauro Carvalho Chehab``spintime``		The number of microseconds to busy-loop while waiting
1919d85025bSMauro Carvalho Chehab			for the peripheral to respond.  You might find that
1929d85025bSMauro Carvalho Chehab			adjusting this improves performance, depending on your
1939d85025bSMauro Carvalho Chehab			peripherals.  This is a port-wide setting, i.e. it
1949d85025bSMauro Carvalho Chehab			applies to all devices on a particular port.
1959d85025bSMauro Carvalho Chehab
1969d85025bSMauro Carvalho Chehab``timeslice``		The number of milliseconds that a device driver is
1979d85025bSMauro Carvalho Chehab			allowed to keep a port claimed for.  This is advisory,
1989d85025bSMauro Carvalho Chehab			and driver can ignore it if it must.
1999d85025bSMauro Carvalho Chehab
2009d85025bSMauro Carvalho Chehab``default/*``		The defaults for spintime and timeslice. When a new
2019d85025bSMauro Carvalho Chehab			port is	registered, it picks up the default spintime.
2029d85025bSMauro Carvalho Chehab			When a new device is registered, it picks up the
2039d85025bSMauro Carvalho Chehab			default timeslice.
2049d85025bSMauro Carvalho Chehab=======================	=======================================================
2059d85025bSMauro Carvalho Chehab
2069d85025bSMauro Carvalho ChehabDevice drivers
2079d85025bSMauro Carvalho Chehab==============
2089d85025bSMauro Carvalho Chehab
2099d85025bSMauro Carvalho ChehabOnce the parport code is initialised, you can attach device drivers to
2109d85025bSMauro Carvalho Chehabspecific ports.  Normally this happens automatically; if the lp driver
2119d85025bSMauro Carvalho Chehabis loaded it will create one lp device for each port found.  You can
2129d85025bSMauro Carvalho Chehaboverride this, though, by using parameters either when you load the lp
2139d85025bSMauro Carvalho Chehabdriver::
2149d85025bSMauro Carvalho Chehab
2159d85025bSMauro Carvalho Chehab	# insmod lp parport=0,2
2169d85025bSMauro Carvalho Chehab
2179d85025bSMauro Carvalho Chehabor on the LILO command line::
2189d85025bSMauro Carvalho Chehab
2199d85025bSMauro Carvalho Chehab	lp=parport0 lp=parport2
2209d85025bSMauro Carvalho Chehab
2219d85025bSMauro Carvalho ChehabBoth the above examples would inform lp that you want ``/dev/lp0`` to be
2229d85025bSMauro Carvalho Chehabthe first parallel port, and /dev/lp1 to be the **third** parallel port,
2239d85025bSMauro Carvalho Chehabwith no lp device associated with the second port (parport1).  Note
2249d85025bSMauro Carvalho Chehabthat this is different to the way older kernels worked; there used to
2259d85025bSMauro Carvalho Chehabbe a static association between the I/O port address and the device
2269d85025bSMauro Carvalho Chehabname, so ``/dev/lp0`` was always the port at 0x3bc.  This is no longer the
2279d85025bSMauro Carvalho Chehabcase - if you only have one port, it will default to being ``/dev/lp0``,
2289d85025bSMauro Carvalho Chehabregardless of base address.
2299d85025bSMauro Carvalho Chehab
2309d85025bSMauro Carvalho ChehabAlso:
2319d85025bSMauro Carvalho Chehab
2329d85025bSMauro Carvalho Chehab * If you selected the IEEE 1284 support at compile time, you can say
2339d85025bSMauro Carvalho Chehab   ``lp=auto`` on the kernel command line, and lp will create devices
2349d85025bSMauro Carvalho Chehab   only for those ports that seem to have printers attached.
2359d85025bSMauro Carvalho Chehab
2369d85025bSMauro Carvalho Chehab * If you give PLIP the ``timid`` parameter, either with ``plip=timid`` on
2379d85025bSMauro Carvalho Chehab   the command line, or with ``insmod plip timid=1`` when using modules,
2389d85025bSMauro Carvalho Chehab   it will avoid any ports that seem to be in use by other devices.
2399d85025bSMauro Carvalho Chehab
2409d85025bSMauro Carvalho Chehab * IRQ autoprobing works only for a few port types at the moment.
2419d85025bSMauro Carvalho Chehab
2429d85025bSMauro Carvalho ChehabReporting printer problems with parport
2439d85025bSMauro Carvalho Chehab=======================================
2449d85025bSMauro Carvalho Chehab
2459d85025bSMauro Carvalho ChehabIf you are having problems printing, please go through these steps to
2469d85025bSMauro Carvalho Chehabtry to narrow down where the problem area is.
2479d85025bSMauro Carvalho Chehab
2489d85025bSMauro Carvalho ChehabWhen reporting problems with parport, really you need to give all of
2499d85025bSMauro Carvalho Chehabthe messages that ``parport_pc`` spits out when it initialises.  There are
2509d85025bSMauro Carvalho Chehabseveral code paths:
2519d85025bSMauro Carvalho Chehab
2529d85025bSMauro Carvalho Chehab- polling
2539d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in software
2549d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in hardware using PIO
2559d85025bSMauro Carvalho Chehab- interrupt-driven, protocol in hardware using DMA
2569d85025bSMauro Carvalho Chehab
2579d85025bSMauro Carvalho ChehabThe kernel messages that ``parport_pc`` logs give an indication of which
2589d85025bSMauro Carvalho Chehabcode path is being used. (They could be a lot better actually..)
2599d85025bSMauro Carvalho Chehab
2609d85025bSMauro Carvalho ChehabFor normal printer protocol, having IEEE 1284 modes enabled or not
2619d85025bSMauro Carvalho Chehabshould not make a difference.
2629d85025bSMauro Carvalho Chehab
2639d85025bSMauro Carvalho ChehabTo turn off the 'protocol in hardware' code paths, disable
2649d85025bSMauro Carvalho Chehab``CONFIG_PARPORT_PC_FIFO``.  Note that when they are enabled they are not
2659d85025bSMauro Carvalho Chehabnecessarily **used**; it depends on whether the hardware is available,
2669d85025bSMauro Carvalho Chehabenabled by the BIOS, and detected by the driver.
2679d85025bSMauro Carvalho Chehab
2689d85025bSMauro Carvalho ChehabSo, to start with, disable ``CONFIG_PARPORT_PC_FIFO``, and load ``parport_pc``
2699d85025bSMauro Carvalho Chehabwith ``irq=none``. See if printing works then.  It really should,
2709d85025bSMauro Carvalho Chehabbecause this is the simplest code path.
2719d85025bSMauro Carvalho Chehab
2729d85025bSMauro Carvalho ChehabIf that works fine, try with ``io=0x378 irq=7`` (adjust for your
2739d85025bSMauro Carvalho Chehabhardware), to make it use interrupt-driven in-software protocol.
2749d85025bSMauro Carvalho Chehab
2759d85025bSMauro Carvalho ChehabIf **that** works fine, then one of the hardware modes isn't working
2769d85025bSMauro Carvalho Chehabright.  Enable ``CONFIG_FIFO`` (no, it isn't a module option,
2779d85025bSMauro Carvalho Chehaband yes, it should be), set the port to ECP mode in the BIOS and note
2789d85025bSMauro Carvalho Chehabthe DMA channel, and try with::
2799d85025bSMauro Carvalho Chehab
2809d85025bSMauro Carvalho Chehab    io=0x378 irq=7 dma=none (for PIO)
2819d85025bSMauro Carvalho Chehab    io=0x378 irq=7 dma=3 (for DMA)
2829d85025bSMauro Carvalho Chehab
2839d85025bSMauro Carvalho Chehab----------
2849d85025bSMauro Carvalho Chehab
2859d85025bSMauro Carvalho Chehabphilb@gnu.org
2869d85025bSMauro Carvalho Chehabtim@cyberelk.net
287