xref: /linux/Documentation/driver-api/parport-lowlevel.rst (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
1*baa293e9SMauro Carvalho Chehab===============================
2*baa293e9SMauro Carvalho ChehabPARPORT interface documentation
3*baa293e9SMauro Carvalho Chehab===============================
4*baa293e9SMauro Carvalho Chehab
5*baa293e9SMauro Carvalho Chehab:Time-stamp: <2000-02-24 13:30:20 twaugh>
6*baa293e9SMauro Carvalho Chehab
7*baa293e9SMauro Carvalho ChehabDescribed here are the following functions:
8*baa293e9SMauro Carvalho Chehab
9*baa293e9SMauro Carvalho ChehabGlobal functions::
10*baa293e9SMauro Carvalho Chehab  parport_register_driver
11*baa293e9SMauro Carvalho Chehab  parport_unregister_driver
12*baa293e9SMauro Carvalho Chehab  parport_enumerate
13*baa293e9SMauro Carvalho Chehab  parport_register_device
14*baa293e9SMauro Carvalho Chehab  parport_unregister_device
15*baa293e9SMauro Carvalho Chehab  parport_claim
16*baa293e9SMauro Carvalho Chehab  parport_claim_or_block
17*baa293e9SMauro Carvalho Chehab  parport_release
18*baa293e9SMauro Carvalho Chehab  parport_yield
19*baa293e9SMauro Carvalho Chehab  parport_yield_blocking
20*baa293e9SMauro Carvalho Chehab  parport_wait_peripheral
21*baa293e9SMauro Carvalho Chehab  parport_poll_peripheral
22*baa293e9SMauro Carvalho Chehab  parport_wait_event
23*baa293e9SMauro Carvalho Chehab  parport_negotiate
24*baa293e9SMauro Carvalho Chehab  parport_read
25*baa293e9SMauro Carvalho Chehab  parport_write
26*baa293e9SMauro Carvalho Chehab  parport_open
27*baa293e9SMauro Carvalho Chehab  parport_close
28*baa293e9SMauro Carvalho Chehab  parport_device_id
29*baa293e9SMauro Carvalho Chehab  parport_device_coords
30*baa293e9SMauro Carvalho Chehab  parport_find_class
31*baa293e9SMauro Carvalho Chehab  parport_find_device
32*baa293e9SMauro Carvalho Chehab  parport_set_timeout
33*baa293e9SMauro Carvalho Chehab
34*baa293e9SMauro Carvalho ChehabPort functions (can be overridden by low-level drivers):
35*baa293e9SMauro Carvalho Chehab
36*baa293e9SMauro Carvalho Chehab  SPP::
37*baa293e9SMauro Carvalho Chehab    port->ops->read_data
38*baa293e9SMauro Carvalho Chehab    port->ops->write_data
39*baa293e9SMauro Carvalho Chehab    port->ops->read_status
40*baa293e9SMauro Carvalho Chehab    port->ops->read_control
41*baa293e9SMauro Carvalho Chehab    port->ops->write_control
42*baa293e9SMauro Carvalho Chehab    port->ops->frob_control
43*baa293e9SMauro Carvalho Chehab    port->ops->enable_irq
44*baa293e9SMauro Carvalho Chehab    port->ops->disable_irq
45*baa293e9SMauro Carvalho Chehab    port->ops->data_forward
46*baa293e9SMauro Carvalho Chehab    port->ops->data_reverse
47*baa293e9SMauro Carvalho Chehab
48*baa293e9SMauro Carvalho Chehab  EPP::
49*baa293e9SMauro Carvalho Chehab    port->ops->epp_write_data
50*baa293e9SMauro Carvalho Chehab    port->ops->epp_read_data
51*baa293e9SMauro Carvalho Chehab    port->ops->epp_write_addr
52*baa293e9SMauro Carvalho Chehab    port->ops->epp_read_addr
53*baa293e9SMauro Carvalho Chehab
54*baa293e9SMauro Carvalho Chehab  ECP::
55*baa293e9SMauro Carvalho Chehab    port->ops->ecp_write_data
56*baa293e9SMauro Carvalho Chehab    port->ops->ecp_read_data
57*baa293e9SMauro Carvalho Chehab    port->ops->ecp_write_addr
58*baa293e9SMauro Carvalho Chehab
59*baa293e9SMauro Carvalho Chehab  Other::
60*baa293e9SMauro Carvalho Chehab    port->ops->nibble_read_data
61*baa293e9SMauro Carvalho Chehab    port->ops->byte_read_data
62*baa293e9SMauro Carvalho Chehab    port->ops->compat_write_data
63*baa293e9SMauro Carvalho Chehab
64*baa293e9SMauro Carvalho ChehabThe parport subsystem comprises ``parport`` (the core port-sharing
65*baa293e9SMauro Carvalho Chehabcode), and a variety of low-level drivers that actually do the port
66*baa293e9SMauro Carvalho Chehabaccesses.  Each low-level driver handles a particular style of port
67*baa293e9SMauro Carvalho Chehab(PC, Amiga, and so on).
68*baa293e9SMauro Carvalho Chehab
69*baa293e9SMauro Carvalho ChehabThe parport interface to the device driver author can be broken down
70*baa293e9SMauro Carvalho Chehabinto global functions and port functions.
71*baa293e9SMauro Carvalho Chehab
72*baa293e9SMauro Carvalho ChehabThe global functions are mostly for communicating between the device
73*baa293e9SMauro Carvalho Chehabdriver and the parport subsystem: acquiring a list of available ports,
74*baa293e9SMauro Carvalho Chehabclaiming a port for exclusive use, and so on.  They also include
75*baa293e9SMauro Carvalho Chehab``generic`` functions for doing standard things that will work on any
76*baa293e9SMauro Carvalho ChehabIEEE 1284-capable architecture.
77*baa293e9SMauro Carvalho Chehab
78*baa293e9SMauro Carvalho ChehabThe port functions are provided by the low-level drivers, although the
79*baa293e9SMauro Carvalho Chehabcore parport module provides generic ``defaults`` for some routines.
80*baa293e9SMauro Carvalho ChehabThe port functions can be split into three groups: SPP, EPP, and ECP.
81*baa293e9SMauro Carvalho Chehab
82*baa293e9SMauro Carvalho ChehabSPP (Standard Parallel Port) functions modify so-called ``SPP``
83*baa293e9SMauro Carvalho Chehabregisters: data, status, and control.  The hardware may not actually
84*baa293e9SMauro Carvalho Chehabhave registers exactly like that, but the PC does and this interface is
85*baa293e9SMauro Carvalho Chehabmodelled after common PC implementations.  Other low-level drivers may
86*baa293e9SMauro Carvalho Chehabbe able to emulate most of the functionality.
87*baa293e9SMauro Carvalho Chehab
88*baa293e9SMauro Carvalho ChehabEPP (Enhanced Parallel Port) functions are provided for reading and
89*baa293e9SMauro Carvalho Chehabwriting in IEEE 1284 EPP mode, and ECP (Extended Capabilities Port)
90*baa293e9SMauro Carvalho Chehabfunctions are used for IEEE 1284 ECP mode. (What about BECP? Does
91*baa293e9SMauro Carvalho Chehabanyone care?)
92*baa293e9SMauro Carvalho Chehab
93*baa293e9SMauro Carvalho ChehabHardware assistance for EPP and/or ECP transfers may or may not be
94*baa293e9SMauro Carvalho Chehabavailable, and if it is available it may or may not be used.  If
95*baa293e9SMauro Carvalho Chehabhardware is not used, the transfer will be software-driven.  In order
96*baa293e9SMauro Carvalho Chehabto cope with peripherals that only tenuously support IEEE 1284, a
97*baa293e9SMauro Carvalho Chehablow-level driver specific function is provided, for altering 'fudge
98*baa293e9SMauro Carvalho Chehabfactors'.
99*baa293e9SMauro Carvalho Chehab
100*baa293e9SMauro Carvalho ChehabGlobal functions
101*baa293e9SMauro Carvalho Chehab================
102*baa293e9SMauro Carvalho Chehab
103*baa293e9SMauro Carvalho Chehabparport_register_driver - register a device driver with parport
104*baa293e9SMauro Carvalho Chehab---------------------------------------------------------------
105*baa293e9SMauro Carvalho Chehab
106*baa293e9SMauro Carvalho ChehabSYNOPSIS
107*baa293e9SMauro Carvalho Chehab^^^^^^^^
108*baa293e9SMauro Carvalho Chehab
109*baa293e9SMauro Carvalho Chehab::
110*baa293e9SMauro Carvalho Chehab
111*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
112*baa293e9SMauro Carvalho Chehab
113*baa293e9SMauro Carvalho Chehab	struct parport_driver {
114*baa293e9SMauro Carvalho Chehab		const char *name;
115*baa293e9SMauro Carvalho Chehab		void (*attach) (struct parport *);
116*baa293e9SMauro Carvalho Chehab		void (*detach) (struct parport *);
117*baa293e9SMauro Carvalho Chehab		struct parport_driver *next;
118*baa293e9SMauro Carvalho Chehab	};
119*baa293e9SMauro Carvalho Chehab	int parport_register_driver (struct parport_driver *driver);
120*baa293e9SMauro Carvalho Chehab
121*baa293e9SMauro Carvalho ChehabDESCRIPTION
122*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
123*baa293e9SMauro Carvalho Chehab
124*baa293e9SMauro Carvalho ChehabIn order to be notified about parallel ports when they are detected,
125*baa293e9SMauro Carvalho Chehabparport_register_driver should be called.  Your driver will
126*baa293e9SMauro Carvalho Chehabimmediately be notified of all ports that have already been detected,
127*baa293e9SMauro Carvalho Chehaband of each new port as low-level drivers are loaded.
128*baa293e9SMauro Carvalho Chehab
129*baa293e9SMauro Carvalho ChehabA ``struct parport_driver`` contains the textual name of your driver,
130*baa293e9SMauro Carvalho Chehaba pointer to a function to handle new ports, and a pointer to a
131*baa293e9SMauro Carvalho Chehabfunction to handle ports going away due to a low-level driver
132*baa293e9SMauro Carvalho Chehabunloading.  Ports will only be detached if they are not being used
133*baa293e9SMauro Carvalho Chehab(i.e. there are no devices registered on them).
134*baa293e9SMauro Carvalho Chehab
135*baa293e9SMauro Carvalho ChehabThe visible parts of the ``struct parport *`` argument given to
136*baa293e9SMauro Carvalho Chehabattach/detach are::
137*baa293e9SMauro Carvalho Chehab
138*baa293e9SMauro Carvalho Chehab	struct parport
139*baa293e9SMauro Carvalho Chehab	{
140*baa293e9SMauro Carvalho Chehab		struct parport *next; /* next parport in list */
141*baa293e9SMauro Carvalho Chehab		const char *name;     /* port's name */
142*baa293e9SMauro Carvalho Chehab		unsigned int modes;   /* bitfield of hardware modes */
143*baa293e9SMauro Carvalho Chehab		struct parport_device_info probe_info;
144*baa293e9SMauro Carvalho Chehab				/* IEEE1284 info */
145*baa293e9SMauro Carvalho Chehab		int number;           /* parport index */
146*baa293e9SMauro Carvalho Chehab		struct parport_operations *ops;
147*baa293e9SMauro Carvalho Chehab		...
148*baa293e9SMauro Carvalho Chehab	};
149*baa293e9SMauro Carvalho Chehab
150*baa293e9SMauro Carvalho ChehabThere are other members of the structure, but they should not be
151*baa293e9SMauro Carvalho Chehabtouched.
152*baa293e9SMauro Carvalho Chehab
153*baa293e9SMauro Carvalho ChehabThe ``modes`` member summarises the capabilities of the underlying
154*baa293e9SMauro Carvalho Chehabhardware.  It consists of flags which may be bitwise-ored together:
155*baa293e9SMauro Carvalho Chehab
156*baa293e9SMauro Carvalho Chehab  ============================= ===============================================
157*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_PCSPP		IBM PC registers are available,
158*baa293e9SMauro Carvalho Chehab				i.e. functions that act on data,
159*baa293e9SMauro Carvalho Chehab				control and status registers are
160*baa293e9SMauro Carvalho Chehab				probably writing directly to the
161*baa293e9SMauro Carvalho Chehab				hardware.
162*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_TRISTATE		The data drivers may be turned off.
163*baa293e9SMauro Carvalho Chehab				This allows the data lines to be used
164*baa293e9SMauro Carvalho Chehab				for reverse (peripheral to host)
165*baa293e9SMauro Carvalho Chehab				transfers.
166*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_COMPAT		The hardware can assist with
167*baa293e9SMauro Carvalho Chehab				compatibility-mode (printer)
168*baa293e9SMauro Carvalho Chehab				transfers, i.e. compat_write_block.
169*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_EPP		The hardware can assist with EPP
170*baa293e9SMauro Carvalho Chehab				transfers.
171*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_ECP		The hardware can assist with ECP
172*baa293e9SMauro Carvalho Chehab				transfers.
173*baa293e9SMauro Carvalho Chehab  PARPORT_MODE_DMA		The hardware can use DMA, so you might
174*baa293e9SMauro Carvalho Chehab				want to pass ISA DMA-able memory
175*baa293e9SMauro Carvalho Chehab				(i.e. memory allocated using the
176*baa293e9SMauro Carvalho Chehab				GFP_DMA flag with kmalloc) to the
177*baa293e9SMauro Carvalho Chehab				low-level driver in order to take
178*baa293e9SMauro Carvalho Chehab				advantage of it.
179*baa293e9SMauro Carvalho Chehab  ============================= ===============================================
180*baa293e9SMauro Carvalho Chehab
181*baa293e9SMauro Carvalho ChehabThere may be other flags in ``modes`` as well.
182*baa293e9SMauro Carvalho Chehab
183*baa293e9SMauro Carvalho ChehabThe contents of ``modes`` is advisory only.  For example, if the
184*baa293e9SMauro Carvalho Chehabhardware is capable of DMA, and PARPORT_MODE_DMA is in ``modes``, it
185*baa293e9SMauro Carvalho Chehabdoesn't necessarily mean that DMA will always be used when possible.
186*baa293e9SMauro Carvalho ChehabSimilarly, hardware that is capable of assisting ECP transfers won't
187*baa293e9SMauro Carvalho Chehabnecessarily be used.
188*baa293e9SMauro Carvalho Chehab
189*baa293e9SMauro Carvalho ChehabRETURN VALUE
190*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
191*baa293e9SMauro Carvalho Chehab
192*baa293e9SMauro Carvalho ChehabZero on success, otherwise an error code.
193*baa293e9SMauro Carvalho Chehab
194*baa293e9SMauro Carvalho ChehabERRORS
195*baa293e9SMauro Carvalho Chehab^^^^^^
196*baa293e9SMauro Carvalho Chehab
197*baa293e9SMauro Carvalho ChehabNone. (Can it fail? Why return int?)
198*baa293e9SMauro Carvalho Chehab
199*baa293e9SMauro Carvalho ChehabEXAMPLE
200*baa293e9SMauro Carvalho Chehab^^^^^^^
201*baa293e9SMauro Carvalho Chehab
202*baa293e9SMauro Carvalho Chehab::
203*baa293e9SMauro Carvalho Chehab
204*baa293e9SMauro Carvalho Chehab	static void lp_attach (struct parport *port)
205*baa293e9SMauro Carvalho Chehab	{
206*baa293e9SMauro Carvalho Chehab		...
207*baa293e9SMauro Carvalho Chehab		private = kmalloc (...);
208*baa293e9SMauro Carvalho Chehab		dev[count++] = parport_register_device (...);
209*baa293e9SMauro Carvalho Chehab		...
210*baa293e9SMauro Carvalho Chehab	}
211*baa293e9SMauro Carvalho Chehab
212*baa293e9SMauro Carvalho Chehab	static void lp_detach (struct parport *port)
213*baa293e9SMauro Carvalho Chehab	{
214*baa293e9SMauro Carvalho Chehab		...
215*baa293e9SMauro Carvalho Chehab	}
216*baa293e9SMauro Carvalho Chehab
217*baa293e9SMauro Carvalho Chehab	static struct parport_driver lp_driver = {
218*baa293e9SMauro Carvalho Chehab		"lp",
219*baa293e9SMauro Carvalho Chehab		lp_attach,
220*baa293e9SMauro Carvalho Chehab		lp_detach,
221*baa293e9SMauro Carvalho Chehab		NULL /* always put NULL here */
222*baa293e9SMauro Carvalho Chehab	};
223*baa293e9SMauro Carvalho Chehab
224*baa293e9SMauro Carvalho Chehab	int lp_init (void)
225*baa293e9SMauro Carvalho Chehab	{
226*baa293e9SMauro Carvalho Chehab		...
227*baa293e9SMauro Carvalho Chehab		if (parport_register_driver (&lp_driver)) {
228*baa293e9SMauro Carvalho Chehab			/* Failed; nothing we can do. */
229*baa293e9SMauro Carvalho Chehab			return -EIO;
230*baa293e9SMauro Carvalho Chehab		}
231*baa293e9SMauro Carvalho Chehab		...
232*baa293e9SMauro Carvalho Chehab	}
233*baa293e9SMauro Carvalho Chehab
234*baa293e9SMauro Carvalho Chehab
235*baa293e9SMauro Carvalho ChehabSEE ALSO
236*baa293e9SMauro Carvalho Chehab^^^^^^^^
237*baa293e9SMauro Carvalho Chehab
238*baa293e9SMauro Carvalho Chehabparport_unregister_driver, parport_register_device, parport_enumerate
239*baa293e9SMauro Carvalho Chehab
240*baa293e9SMauro Carvalho Chehab
241*baa293e9SMauro Carvalho Chehab
242*baa293e9SMauro Carvalho Chehabparport_unregister_driver - tell parport to forget about this driver
243*baa293e9SMauro Carvalho Chehab--------------------------------------------------------------------
244*baa293e9SMauro Carvalho Chehab
245*baa293e9SMauro Carvalho ChehabSYNOPSIS
246*baa293e9SMauro Carvalho Chehab^^^^^^^^
247*baa293e9SMauro Carvalho Chehab
248*baa293e9SMauro Carvalho Chehab::
249*baa293e9SMauro Carvalho Chehab
250*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
251*baa293e9SMauro Carvalho Chehab
252*baa293e9SMauro Carvalho Chehab	struct parport_driver {
253*baa293e9SMauro Carvalho Chehab		const char *name;
254*baa293e9SMauro Carvalho Chehab		void (*attach) (struct parport *);
255*baa293e9SMauro Carvalho Chehab		void (*detach) (struct parport *);
256*baa293e9SMauro Carvalho Chehab		struct parport_driver *next;
257*baa293e9SMauro Carvalho Chehab	};
258*baa293e9SMauro Carvalho Chehab	void parport_unregister_driver (struct parport_driver *driver);
259*baa293e9SMauro Carvalho Chehab
260*baa293e9SMauro Carvalho ChehabDESCRIPTION
261*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
262*baa293e9SMauro Carvalho Chehab
263*baa293e9SMauro Carvalho ChehabThis tells parport not to notify the device driver of new ports or of
264*baa293e9SMauro Carvalho Chehabports going away.  Registered devices belonging to that driver are NOT
265*baa293e9SMauro Carvalho Chehabunregistered: parport_unregister_device must be used for each one.
266*baa293e9SMauro Carvalho Chehab
267*baa293e9SMauro Carvalho ChehabEXAMPLE
268*baa293e9SMauro Carvalho Chehab^^^^^^^
269*baa293e9SMauro Carvalho Chehab
270*baa293e9SMauro Carvalho Chehab::
271*baa293e9SMauro Carvalho Chehab
272*baa293e9SMauro Carvalho Chehab	void cleanup_module (void)
273*baa293e9SMauro Carvalho Chehab	{
274*baa293e9SMauro Carvalho Chehab		...
275*baa293e9SMauro Carvalho Chehab		/* Stop notifications. */
276*baa293e9SMauro Carvalho Chehab		parport_unregister_driver (&lp_driver);
277*baa293e9SMauro Carvalho Chehab
278*baa293e9SMauro Carvalho Chehab		/* Unregister devices. */
279*baa293e9SMauro Carvalho Chehab		for (i = 0; i < NUM_DEVS; i++)
280*baa293e9SMauro Carvalho Chehab			parport_unregister_device (dev[i]);
281*baa293e9SMauro Carvalho Chehab		...
282*baa293e9SMauro Carvalho Chehab	}
283*baa293e9SMauro Carvalho Chehab
284*baa293e9SMauro Carvalho ChehabSEE ALSO
285*baa293e9SMauro Carvalho Chehab^^^^^^^^
286*baa293e9SMauro Carvalho Chehab
287*baa293e9SMauro Carvalho Chehabparport_register_driver, parport_enumerate
288*baa293e9SMauro Carvalho Chehab
289*baa293e9SMauro Carvalho Chehab
290*baa293e9SMauro Carvalho Chehab
291*baa293e9SMauro Carvalho Chehabparport_enumerate - retrieve a list of parallel ports (DEPRECATED)
292*baa293e9SMauro Carvalho Chehab------------------------------------------------------------------
293*baa293e9SMauro Carvalho Chehab
294*baa293e9SMauro Carvalho ChehabSYNOPSIS
295*baa293e9SMauro Carvalho Chehab^^^^^^^^
296*baa293e9SMauro Carvalho Chehab
297*baa293e9SMauro Carvalho Chehab::
298*baa293e9SMauro Carvalho Chehab
299*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
300*baa293e9SMauro Carvalho Chehab
301*baa293e9SMauro Carvalho Chehab	struct parport *parport_enumerate (void);
302*baa293e9SMauro Carvalho Chehab
303*baa293e9SMauro Carvalho ChehabDESCRIPTION
304*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
305*baa293e9SMauro Carvalho Chehab
306*baa293e9SMauro Carvalho ChehabRetrieve the first of a list of valid parallel ports for this machine.
307*baa293e9SMauro Carvalho ChehabSuccessive parallel ports can be found using the ``struct parport
308*baa293e9SMauro Carvalho Chehab*next`` element of the ``struct parport *`` that is returned.  If ``next``
309*baa293e9SMauro Carvalho Chehabis NULL, there are no more parallel ports in the list.  The number of
310*baa293e9SMauro Carvalho Chehabports in the list will not exceed PARPORT_MAX.
311*baa293e9SMauro Carvalho Chehab
312*baa293e9SMauro Carvalho ChehabRETURN VALUE
313*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
314*baa293e9SMauro Carvalho Chehab
315*baa293e9SMauro Carvalho ChehabA ``struct parport *`` describing a valid parallel port for the machine,
316*baa293e9SMauro Carvalho Chehabor NULL if there are none.
317*baa293e9SMauro Carvalho Chehab
318*baa293e9SMauro Carvalho ChehabERRORS
319*baa293e9SMauro Carvalho Chehab^^^^^^
320*baa293e9SMauro Carvalho Chehab
321*baa293e9SMauro Carvalho ChehabThis function can return NULL to indicate that there are no parallel
322*baa293e9SMauro Carvalho Chehabports to use.
323*baa293e9SMauro Carvalho Chehab
324*baa293e9SMauro Carvalho ChehabEXAMPLE
325*baa293e9SMauro Carvalho Chehab^^^^^^^
326*baa293e9SMauro Carvalho Chehab
327*baa293e9SMauro Carvalho Chehab::
328*baa293e9SMauro Carvalho Chehab
329*baa293e9SMauro Carvalho Chehab	int detect_device (void)
330*baa293e9SMauro Carvalho Chehab	{
331*baa293e9SMauro Carvalho Chehab		struct parport *port;
332*baa293e9SMauro Carvalho Chehab
333*baa293e9SMauro Carvalho Chehab		for (port = parport_enumerate ();
334*baa293e9SMauro Carvalho Chehab		port != NULL;
335*baa293e9SMauro Carvalho Chehab		port = port->next) {
336*baa293e9SMauro Carvalho Chehab			/* Try to detect a device on the port... */
337*baa293e9SMauro Carvalho Chehab			...
338*baa293e9SMauro Carvalho Chehab		}
339*baa293e9SMauro Carvalho Chehab		}
340*baa293e9SMauro Carvalho Chehab
341*baa293e9SMauro Carvalho Chehab		...
342*baa293e9SMauro Carvalho Chehab	}
343*baa293e9SMauro Carvalho Chehab
344*baa293e9SMauro Carvalho ChehabNOTES
345*baa293e9SMauro Carvalho Chehab^^^^^
346*baa293e9SMauro Carvalho Chehab
347*baa293e9SMauro Carvalho Chehabparport_enumerate is deprecated; parport_register_driver should be
348*baa293e9SMauro Carvalho Chehabused instead.
349*baa293e9SMauro Carvalho Chehab
350*baa293e9SMauro Carvalho ChehabSEE ALSO
351*baa293e9SMauro Carvalho Chehab^^^^^^^^
352*baa293e9SMauro Carvalho Chehab
353*baa293e9SMauro Carvalho Chehabparport_register_driver, parport_unregister_driver
354*baa293e9SMauro Carvalho Chehab
355*baa293e9SMauro Carvalho Chehab
356*baa293e9SMauro Carvalho Chehab
357*baa293e9SMauro Carvalho Chehabparport_register_device - register to use a port
358*baa293e9SMauro Carvalho Chehab------------------------------------------------
359*baa293e9SMauro Carvalho Chehab
360*baa293e9SMauro Carvalho ChehabSYNOPSIS
361*baa293e9SMauro Carvalho Chehab^^^^^^^^
362*baa293e9SMauro Carvalho Chehab
363*baa293e9SMauro Carvalho Chehab::
364*baa293e9SMauro Carvalho Chehab
365*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
366*baa293e9SMauro Carvalho Chehab
367*baa293e9SMauro Carvalho Chehab	typedef int (*preempt_func) (void *handle);
368*baa293e9SMauro Carvalho Chehab	typedef void (*wakeup_func) (void *handle);
369*baa293e9SMauro Carvalho Chehab	typedef int (*irq_func) (int irq, void *handle, struct pt_regs *);
370*baa293e9SMauro Carvalho Chehab
371*baa293e9SMauro Carvalho Chehab	struct pardevice *parport_register_device(struct parport *port,
372*baa293e9SMauro Carvalho Chehab						  const char *name,
373*baa293e9SMauro Carvalho Chehab						  preempt_func preempt,
374*baa293e9SMauro Carvalho Chehab						  wakeup_func wakeup,
375*baa293e9SMauro Carvalho Chehab						  irq_func irq,
376*baa293e9SMauro Carvalho Chehab						  int flags,
377*baa293e9SMauro Carvalho Chehab						  void *handle);
378*baa293e9SMauro Carvalho Chehab
379*baa293e9SMauro Carvalho ChehabDESCRIPTION
380*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
381*baa293e9SMauro Carvalho Chehab
382*baa293e9SMauro Carvalho ChehabUse this function to register your device driver on a parallel port
383*baa293e9SMauro Carvalho Chehab(``port``).  Once you have done that, you will be able to use
384*baa293e9SMauro Carvalho Chehabparport_claim and parport_release in order to use the port.
385*baa293e9SMauro Carvalho Chehab
386*baa293e9SMauro Carvalho ChehabThe (``name``) argument is the name of the device that appears in /proc
387*baa293e9SMauro Carvalho Chehabfilesystem. The string must be valid for the whole lifetime of the
388*baa293e9SMauro Carvalho Chehabdevice (until parport_unregister_device is called).
389*baa293e9SMauro Carvalho Chehab
390*baa293e9SMauro Carvalho ChehabThis function will register three callbacks into your driver:
391*baa293e9SMauro Carvalho Chehab``preempt``, ``wakeup`` and ``irq``.  Each of these may be NULL in order to
392*baa293e9SMauro Carvalho Chehabindicate that you do not want a callback.
393*baa293e9SMauro Carvalho Chehab
394*baa293e9SMauro Carvalho ChehabWhen the ``preempt`` function is called, it is because another driver
395*baa293e9SMauro Carvalho Chehabwishes to use the parallel port.  The ``preempt`` function should return
396*baa293e9SMauro Carvalho Chehabnon-zero if the parallel port cannot be released yet -- if zero is
397*baa293e9SMauro Carvalho Chehabreturned, the port is lost to another driver and the port must be
398*baa293e9SMauro Carvalho Chehabre-claimed before use.
399*baa293e9SMauro Carvalho Chehab
400*baa293e9SMauro Carvalho ChehabThe ``wakeup`` function is called once another driver has released the
401*baa293e9SMauro Carvalho Chehabport and no other driver has yet claimed it.  You can claim the
402*baa293e9SMauro Carvalho Chehabparallel port from within the ``wakeup`` function (in which case the
403*baa293e9SMauro Carvalho Chehabclaim is guaranteed to succeed), or choose not to if you don't need it
404*baa293e9SMauro Carvalho Chehabnow.
405*baa293e9SMauro Carvalho Chehab
406*baa293e9SMauro Carvalho ChehabIf an interrupt occurs on the parallel port your driver has claimed,
407*baa293e9SMauro Carvalho Chehabthe ``irq`` function will be called. (Write something about shared
408*baa293e9SMauro Carvalho Chehabinterrupts here.)
409*baa293e9SMauro Carvalho Chehab
410*baa293e9SMauro Carvalho ChehabThe ``handle`` is a pointer to driver-specific data, and is passed to
411*baa293e9SMauro Carvalho Chehabthe callback functions.
412*baa293e9SMauro Carvalho Chehab
413*baa293e9SMauro Carvalho Chehab``flags`` may be a bitwise combination of the following flags:
414*baa293e9SMauro Carvalho Chehab
415*baa293e9SMauro Carvalho Chehab  ===================== =================================================
416*baa293e9SMauro Carvalho Chehab        Flag            Meaning
417*baa293e9SMauro Carvalho Chehab  ===================== =================================================
418*baa293e9SMauro Carvalho Chehab  PARPORT_DEV_EXCL	The device cannot share the parallel port at all.
419*baa293e9SMauro Carvalho Chehab			Use this only when absolutely necessary.
420*baa293e9SMauro Carvalho Chehab  ===================== =================================================
421*baa293e9SMauro Carvalho Chehab
422*baa293e9SMauro Carvalho ChehabThe typedefs are not actually defined -- they are only shown in order
423*baa293e9SMauro Carvalho Chehabto make the function prototype more readable.
424*baa293e9SMauro Carvalho Chehab
425*baa293e9SMauro Carvalho ChehabThe visible parts of the returned ``struct pardevice`` are::
426*baa293e9SMauro Carvalho Chehab
427*baa293e9SMauro Carvalho Chehab	struct pardevice {
428*baa293e9SMauro Carvalho Chehab		struct parport *port;	/* Associated port */
429*baa293e9SMauro Carvalho Chehab		void *private;		/* Device driver's 'handle' */
430*baa293e9SMauro Carvalho Chehab		...
431*baa293e9SMauro Carvalho Chehab	};
432*baa293e9SMauro Carvalho Chehab
433*baa293e9SMauro Carvalho ChehabRETURN VALUE
434*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
435*baa293e9SMauro Carvalho Chehab
436*baa293e9SMauro Carvalho ChehabA ``struct pardevice *``: a handle to the registered parallel port
437*baa293e9SMauro Carvalho Chehabdevice that can be used for parport_claim, parport_release, etc.
438*baa293e9SMauro Carvalho Chehab
439*baa293e9SMauro Carvalho ChehabERRORS
440*baa293e9SMauro Carvalho Chehab^^^^^^
441*baa293e9SMauro Carvalho Chehab
442*baa293e9SMauro Carvalho ChehabA return value of NULL indicates that there was a problem registering
443*baa293e9SMauro Carvalho Chehaba device on that port.
444*baa293e9SMauro Carvalho Chehab
445*baa293e9SMauro Carvalho ChehabEXAMPLE
446*baa293e9SMauro Carvalho Chehab^^^^^^^
447*baa293e9SMauro Carvalho Chehab
448*baa293e9SMauro Carvalho Chehab::
449*baa293e9SMauro Carvalho Chehab
450*baa293e9SMauro Carvalho Chehab	static int preempt (void *handle)
451*baa293e9SMauro Carvalho Chehab	{
452*baa293e9SMauro Carvalho Chehab		if (busy_right_now)
453*baa293e9SMauro Carvalho Chehab			return 1;
454*baa293e9SMauro Carvalho Chehab
455*baa293e9SMauro Carvalho Chehab		must_reclaim_port = 1;
456*baa293e9SMauro Carvalho Chehab		return 0;
457*baa293e9SMauro Carvalho Chehab	}
458*baa293e9SMauro Carvalho Chehab
459*baa293e9SMauro Carvalho Chehab	static void wakeup (void *handle)
460*baa293e9SMauro Carvalho Chehab	{
461*baa293e9SMauro Carvalho Chehab		struct toaster *private = handle;
462*baa293e9SMauro Carvalho Chehab		struct pardevice *dev = private->dev;
463*baa293e9SMauro Carvalho Chehab		if (!dev) return; /* avoid races */
464*baa293e9SMauro Carvalho Chehab
465*baa293e9SMauro Carvalho Chehab		if (want_port)
466*baa293e9SMauro Carvalho Chehab			parport_claim (dev);
467*baa293e9SMauro Carvalho Chehab	}
468*baa293e9SMauro Carvalho Chehab
469*baa293e9SMauro Carvalho Chehab	static int toaster_detect (struct toaster *private, struct parport *port)
470*baa293e9SMauro Carvalho Chehab	{
471*baa293e9SMauro Carvalho Chehab		private->dev = parport_register_device (port, "toaster", preempt,
472*baa293e9SMauro Carvalho Chehab							wakeup, NULL, 0,
473*baa293e9SMauro Carvalho Chehab							private);
474*baa293e9SMauro Carvalho Chehab		if (!private->dev)
475*baa293e9SMauro Carvalho Chehab			/* Couldn't register with parport. */
476*baa293e9SMauro Carvalho Chehab			return -EIO;
477*baa293e9SMauro Carvalho Chehab
478*baa293e9SMauro Carvalho Chehab		must_reclaim_port = 0;
479*baa293e9SMauro Carvalho Chehab		busy_right_now = 1;
480*baa293e9SMauro Carvalho Chehab		parport_claim_or_block (private->dev);
481*baa293e9SMauro Carvalho Chehab		...
482*baa293e9SMauro Carvalho Chehab		/* Don't need the port while the toaster warms up. */
483*baa293e9SMauro Carvalho Chehab		busy_right_now = 0;
484*baa293e9SMauro Carvalho Chehab		...
485*baa293e9SMauro Carvalho Chehab		busy_right_now = 1;
486*baa293e9SMauro Carvalho Chehab		if (must_reclaim_port) {
487*baa293e9SMauro Carvalho Chehab			parport_claim_or_block (private->dev);
488*baa293e9SMauro Carvalho Chehab			must_reclaim_port = 0;
489*baa293e9SMauro Carvalho Chehab		}
490*baa293e9SMauro Carvalho Chehab		...
491*baa293e9SMauro Carvalho Chehab	}
492*baa293e9SMauro Carvalho Chehab
493*baa293e9SMauro Carvalho ChehabSEE ALSO
494*baa293e9SMauro Carvalho Chehab^^^^^^^^
495*baa293e9SMauro Carvalho Chehab
496*baa293e9SMauro Carvalho Chehabparport_unregister_device, parport_claim
497*baa293e9SMauro Carvalho Chehab
498*baa293e9SMauro Carvalho Chehab
499*baa293e9SMauro Carvalho Chehab
500*baa293e9SMauro Carvalho Chehabparport_unregister_device - finish using a port
501*baa293e9SMauro Carvalho Chehab-----------------------------------------------
502*baa293e9SMauro Carvalho Chehab
503*baa293e9SMauro Carvalho ChehabSYNPOPSIS
504*baa293e9SMauro Carvalho Chehab
505*baa293e9SMauro Carvalho Chehab::
506*baa293e9SMauro Carvalho Chehab
507*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
508*baa293e9SMauro Carvalho Chehab
509*baa293e9SMauro Carvalho Chehab	void parport_unregister_device (struct pardevice *dev);
510*baa293e9SMauro Carvalho Chehab
511*baa293e9SMauro Carvalho ChehabDESCRIPTION
512*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
513*baa293e9SMauro Carvalho Chehab
514*baa293e9SMauro Carvalho ChehabThis function is the opposite of parport_register_device.  After using
515*baa293e9SMauro Carvalho Chehabparport_unregister_device, ``dev`` is no longer a valid device handle.
516*baa293e9SMauro Carvalho Chehab
517*baa293e9SMauro Carvalho ChehabYou should not unregister a device that is currently claimed, although
518*baa293e9SMauro Carvalho Chehabif you do it will be released automatically.
519*baa293e9SMauro Carvalho Chehab
520*baa293e9SMauro Carvalho ChehabEXAMPLE
521*baa293e9SMauro Carvalho Chehab^^^^^^^
522*baa293e9SMauro Carvalho Chehab
523*baa293e9SMauro Carvalho Chehab::
524*baa293e9SMauro Carvalho Chehab
525*baa293e9SMauro Carvalho Chehab	...
526*baa293e9SMauro Carvalho Chehab	kfree (dev->private); /* before we lose the pointer */
527*baa293e9SMauro Carvalho Chehab	parport_unregister_device (dev);
528*baa293e9SMauro Carvalho Chehab	...
529*baa293e9SMauro Carvalho Chehab
530*baa293e9SMauro Carvalho ChehabSEE ALSO
531*baa293e9SMauro Carvalho Chehab^^^^^^^^
532*baa293e9SMauro Carvalho Chehab
533*baa293e9SMauro Carvalho Chehab
534*baa293e9SMauro Carvalho Chehabparport_unregister_driver
535*baa293e9SMauro Carvalho Chehab
536*baa293e9SMauro Carvalho Chehabparport_claim, parport_claim_or_block - claim the parallel port for a device
537*baa293e9SMauro Carvalho Chehab----------------------------------------------------------------------------
538*baa293e9SMauro Carvalho Chehab
539*baa293e9SMauro Carvalho ChehabSYNOPSIS
540*baa293e9SMauro Carvalho Chehab^^^^^^^^
541*baa293e9SMauro Carvalho Chehab
542*baa293e9SMauro Carvalho Chehab::
543*baa293e9SMauro Carvalho Chehab
544*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
545*baa293e9SMauro Carvalho Chehab
546*baa293e9SMauro Carvalho Chehab	int parport_claim (struct pardevice *dev);
547*baa293e9SMauro Carvalho Chehab	int parport_claim_or_block (struct pardevice *dev);
548*baa293e9SMauro Carvalho Chehab
549*baa293e9SMauro Carvalho ChehabDESCRIPTION
550*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
551*baa293e9SMauro Carvalho Chehab
552*baa293e9SMauro Carvalho ChehabThese functions attempt to gain control of the parallel port on which
553*baa293e9SMauro Carvalho Chehab``dev`` is registered.  ``parport_claim`` does not block, but
554*baa293e9SMauro Carvalho Chehab``parport_claim_or_block`` may do. (Put something here about blocking
555*baa293e9SMauro Carvalho Chehabinterruptibly or non-interruptibly.)
556*baa293e9SMauro Carvalho Chehab
557*baa293e9SMauro Carvalho ChehabYou should not try to claim a port that you have already claimed.
558*baa293e9SMauro Carvalho Chehab
559*baa293e9SMauro Carvalho ChehabRETURN VALUE
560*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
561*baa293e9SMauro Carvalho Chehab
562*baa293e9SMauro Carvalho ChehabA return value of zero indicates that the port was successfully
563*baa293e9SMauro Carvalho Chehabclaimed, and the caller now has possession of the parallel port.
564*baa293e9SMauro Carvalho Chehab
565*baa293e9SMauro Carvalho ChehabIf ``parport_claim_or_block`` blocks before returning successfully, the
566*baa293e9SMauro Carvalho Chehabreturn value is positive.
567*baa293e9SMauro Carvalho Chehab
568*baa293e9SMauro Carvalho ChehabERRORS
569*baa293e9SMauro Carvalho Chehab^^^^^^
570*baa293e9SMauro Carvalho Chehab
571*baa293e9SMauro Carvalho Chehab========== ==========================================================
572*baa293e9SMauro Carvalho Chehab  -EAGAIN  The port is unavailable at the moment, but another attempt
573*baa293e9SMauro Carvalho Chehab           to claim it may succeed.
574*baa293e9SMauro Carvalho Chehab========== ==========================================================
575*baa293e9SMauro Carvalho Chehab
576*baa293e9SMauro Carvalho ChehabSEE ALSO
577*baa293e9SMauro Carvalho Chehab^^^^^^^^
578*baa293e9SMauro Carvalho Chehab
579*baa293e9SMauro Carvalho Chehab
580*baa293e9SMauro Carvalho Chehabparport_release
581*baa293e9SMauro Carvalho Chehab
582*baa293e9SMauro Carvalho Chehabparport_release - release the parallel port
583*baa293e9SMauro Carvalho Chehab-------------------------------------------
584*baa293e9SMauro Carvalho Chehab
585*baa293e9SMauro Carvalho ChehabSYNOPSIS
586*baa293e9SMauro Carvalho Chehab^^^^^^^^
587*baa293e9SMauro Carvalho Chehab
588*baa293e9SMauro Carvalho Chehab::
589*baa293e9SMauro Carvalho Chehab
590*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
591*baa293e9SMauro Carvalho Chehab
592*baa293e9SMauro Carvalho Chehab	void parport_release (struct pardevice *dev);
593*baa293e9SMauro Carvalho Chehab
594*baa293e9SMauro Carvalho ChehabDESCRIPTION
595*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
596*baa293e9SMauro Carvalho Chehab
597*baa293e9SMauro Carvalho ChehabOnce a parallel port device has been claimed, it can be released using
598*baa293e9SMauro Carvalho Chehab``parport_release``.  It cannot fail, but you should not release a
599*baa293e9SMauro Carvalho Chehabdevice that you do not have possession of.
600*baa293e9SMauro Carvalho Chehab
601*baa293e9SMauro Carvalho ChehabEXAMPLE
602*baa293e9SMauro Carvalho Chehab^^^^^^^
603*baa293e9SMauro Carvalho Chehab
604*baa293e9SMauro Carvalho Chehab::
605*baa293e9SMauro Carvalho Chehab
606*baa293e9SMauro Carvalho Chehab	static size_t write (struct pardevice *dev, const void *buf,
607*baa293e9SMauro Carvalho Chehab			size_t len)
608*baa293e9SMauro Carvalho Chehab	{
609*baa293e9SMauro Carvalho Chehab		...
610*baa293e9SMauro Carvalho Chehab		written = dev->port->ops->write_ecp_data (dev->port, buf,
611*baa293e9SMauro Carvalho Chehab							len);
612*baa293e9SMauro Carvalho Chehab		parport_release (dev);
613*baa293e9SMauro Carvalho Chehab		...
614*baa293e9SMauro Carvalho Chehab	}
615*baa293e9SMauro Carvalho Chehab
616*baa293e9SMauro Carvalho Chehab
617*baa293e9SMauro Carvalho ChehabSEE ALSO
618*baa293e9SMauro Carvalho Chehab^^^^^^^^
619*baa293e9SMauro Carvalho Chehab
620*baa293e9SMauro Carvalho Chehabchange_mode, parport_claim, parport_claim_or_block, parport_yield
621*baa293e9SMauro Carvalho Chehab
622*baa293e9SMauro Carvalho Chehab
623*baa293e9SMauro Carvalho Chehab
624*baa293e9SMauro Carvalho Chehabparport_yield, parport_yield_blocking - temporarily release a parallel port
625*baa293e9SMauro Carvalho Chehab---------------------------------------------------------------------------
626*baa293e9SMauro Carvalho Chehab
627*baa293e9SMauro Carvalho ChehabSYNOPSIS
628*baa293e9SMauro Carvalho Chehab^^^^^^^^
629*baa293e9SMauro Carvalho Chehab
630*baa293e9SMauro Carvalho Chehab::
631*baa293e9SMauro Carvalho Chehab
632*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
633*baa293e9SMauro Carvalho Chehab
634*baa293e9SMauro Carvalho Chehab	int parport_yield (struct pardevice *dev)
635*baa293e9SMauro Carvalho Chehab	int parport_yield_blocking (struct pardevice *dev);
636*baa293e9SMauro Carvalho Chehab
637*baa293e9SMauro Carvalho ChehabDESCRIPTION
638*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
639*baa293e9SMauro Carvalho Chehab
640*baa293e9SMauro Carvalho ChehabWhen a driver has control of a parallel port, it may allow another
641*baa293e9SMauro Carvalho Chehabdriver to temporarily ``borrow`` it.  ``parport_yield`` does not block;
642*baa293e9SMauro Carvalho Chehab``parport_yield_blocking`` may do.
643*baa293e9SMauro Carvalho Chehab
644*baa293e9SMauro Carvalho ChehabRETURN VALUE
645*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
646*baa293e9SMauro Carvalho Chehab
647*baa293e9SMauro Carvalho ChehabA return value of zero indicates that the caller still owns the port
648*baa293e9SMauro Carvalho Chehaband the call did not block.
649*baa293e9SMauro Carvalho Chehab
650*baa293e9SMauro Carvalho ChehabA positive return value from ``parport_yield_blocking`` indicates that
651*baa293e9SMauro Carvalho Chehabthe caller still owns the port and the call blocked.
652*baa293e9SMauro Carvalho Chehab
653*baa293e9SMauro Carvalho ChehabA return value of -EAGAIN indicates that the caller no longer owns the
654*baa293e9SMauro Carvalho Chehabport, and it must be re-claimed before use.
655*baa293e9SMauro Carvalho Chehab
656*baa293e9SMauro Carvalho ChehabERRORS
657*baa293e9SMauro Carvalho Chehab^^^^^^
658*baa293e9SMauro Carvalho Chehab
659*baa293e9SMauro Carvalho Chehab========= ==========================================================
660*baa293e9SMauro Carvalho Chehab  -EAGAIN  Ownership of the parallel port was given away.
661*baa293e9SMauro Carvalho Chehab========= ==========================================================
662*baa293e9SMauro Carvalho Chehab
663*baa293e9SMauro Carvalho ChehabSEE ALSO
664*baa293e9SMauro Carvalho Chehab^^^^^^^^
665*baa293e9SMauro Carvalho Chehab
666*baa293e9SMauro Carvalho Chehabparport_release
667*baa293e9SMauro Carvalho Chehab
668*baa293e9SMauro Carvalho Chehab
669*baa293e9SMauro Carvalho Chehab
670*baa293e9SMauro Carvalho Chehabparport_wait_peripheral - wait for status lines, up to 35ms
671*baa293e9SMauro Carvalho Chehab-----------------------------------------------------------
672*baa293e9SMauro Carvalho Chehab
673*baa293e9SMauro Carvalho ChehabSYNOPSIS
674*baa293e9SMauro Carvalho Chehab^^^^^^^^
675*baa293e9SMauro Carvalho Chehab
676*baa293e9SMauro Carvalho Chehab::
677*baa293e9SMauro Carvalho Chehab
678*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
679*baa293e9SMauro Carvalho Chehab
680*baa293e9SMauro Carvalho Chehab	int parport_wait_peripheral (struct parport *port,
681*baa293e9SMauro Carvalho Chehab				     unsigned char mask,
682*baa293e9SMauro Carvalho Chehab				     unsigned char val);
683*baa293e9SMauro Carvalho Chehab
684*baa293e9SMauro Carvalho ChehabDESCRIPTION
685*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
686*baa293e9SMauro Carvalho Chehab
687*baa293e9SMauro Carvalho ChehabWait for the status lines in mask to match the values in val.
688*baa293e9SMauro Carvalho Chehab
689*baa293e9SMauro Carvalho ChehabRETURN VALUE
690*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
691*baa293e9SMauro Carvalho Chehab
692*baa293e9SMauro Carvalho Chehab======== ==========================================================
693*baa293e9SMauro Carvalho Chehab -EINTR  a signal is pending
694*baa293e9SMauro Carvalho Chehab      0  the status lines in mask have values in val
695*baa293e9SMauro Carvalho Chehab      1  timed out while waiting (35ms elapsed)
696*baa293e9SMauro Carvalho Chehab======== ==========================================================
697*baa293e9SMauro Carvalho Chehab
698*baa293e9SMauro Carvalho ChehabSEE ALSO
699*baa293e9SMauro Carvalho Chehab^^^^^^^^
700*baa293e9SMauro Carvalho Chehab
701*baa293e9SMauro Carvalho Chehabparport_poll_peripheral
702*baa293e9SMauro Carvalho Chehab
703*baa293e9SMauro Carvalho Chehab
704*baa293e9SMauro Carvalho Chehab
705*baa293e9SMauro Carvalho Chehabparport_poll_peripheral - wait for status lines, in usec
706*baa293e9SMauro Carvalho Chehab--------------------------------------------------------
707*baa293e9SMauro Carvalho Chehab
708*baa293e9SMauro Carvalho ChehabSYNOPSIS
709*baa293e9SMauro Carvalho Chehab^^^^^^^^
710*baa293e9SMauro Carvalho Chehab
711*baa293e9SMauro Carvalho Chehab::
712*baa293e9SMauro Carvalho Chehab
713*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
714*baa293e9SMauro Carvalho Chehab
715*baa293e9SMauro Carvalho Chehab	int parport_poll_peripheral (struct parport *port,
716*baa293e9SMauro Carvalho Chehab				     unsigned char mask,
717*baa293e9SMauro Carvalho Chehab				     unsigned char val,
718*baa293e9SMauro Carvalho Chehab				     int usec);
719*baa293e9SMauro Carvalho Chehab
720*baa293e9SMauro Carvalho ChehabDESCRIPTION
721*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
722*baa293e9SMauro Carvalho Chehab
723*baa293e9SMauro Carvalho ChehabWait for the status lines in mask to match the values in val.
724*baa293e9SMauro Carvalho Chehab
725*baa293e9SMauro Carvalho ChehabRETURN VALUE
726*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
727*baa293e9SMauro Carvalho Chehab
728*baa293e9SMauro Carvalho Chehab======== ==========================================================
729*baa293e9SMauro Carvalho Chehab -EINTR  a signal is pending
730*baa293e9SMauro Carvalho Chehab      0  the status lines in mask have values in val
731*baa293e9SMauro Carvalho Chehab      1  timed out while waiting (usec microseconds have elapsed)
732*baa293e9SMauro Carvalho Chehab======== ==========================================================
733*baa293e9SMauro Carvalho Chehab
734*baa293e9SMauro Carvalho ChehabSEE ALSO
735*baa293e9SMauro Carvalho Chehab^^^^^^^^
736*baa293e9SMauro Carvalho Chehab
737*baa293e9SMauro Carvalho Chehabparport_wait_peripheral
738*baa293e9SMauro Carvalho Chehab
739*baa293e9SMauro Carvalho Chehab
740*baa293e9SMauro Carvalho Chehab
741*baa293e9SMauro Carvalho Chehabparport_wait_event - wait for an event on a port
742*baa293e9SMauro Carvalho Chehab------------------------------------------------
743*baa293e9SMauro Carvalho Chehab
744*baa293e9SMauro Carvalho ChehabSYNOPSIS
745*baa293e9SMauro Carvalho Chehab^^^^^^^^
746*baa293e9SMauro Carvalho Chehab
747*baa293e9SMauro Carvalho Chehab::
748*baa293e9SMauro Carvalho Chehab
749*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
750*baa293e9SMauro Carvalho Chehab
751*baa293e9SMauro Carvalho Chehab	int parport_wait_event (struct parport *port, signed long timeout)
752*baa293e9SMauro Carvalho Chehab
753*baa293e9SMauro Carvalho ChehabDESCRIPTION
754*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
755*baa293e9SMauro Carvalho Chehab
756*baa293e9SMauro Carvalho ChehabWait for an event (e.g. interrupt) on a port.  The timeout is in
757*baa293e9SMauro Carvalho Chehabjiffies.
758*baa293e9SMauro Carvalho Chehab
759*baa293e9SMauro Carvalho ChehabRETURN VALUE
760*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
761*baa293e9SMauro Carvalho Chehab
762*baa293e9SMauro Carvalho Chehab======= ==========================================================
763*baa293e9SMauro Carvalho Chehab      0  success
764*baa293e9SMauro Carvalho Chehab     <0  error (exit as soon as possible)
765*baa293e9SMauro Carvalho Chehab     >0  timed out
766*baa293e9SMauro Carvalho Chehab======= ==========================================================
767*baa293e9SMauro Carvalho Chehab
768*baa293e9SMauro Carvalho Chehabparport_negotiate - perform IEEE 1284 negotiation
769*baa293e9SMauro Carvalho Chehab-------------------------------------------------
770*baa293e9SMauro Carvalho Chehab
771*baa293e9SMauro Carvalho ChehabSYNOPSIS
772*baa293e9SMauro Carvalho Chehab^^^^^^^^
773*baa293e9SMauro Carvalho Chehab
774*baa293e9SMauro Carvalho Chehab::
775*baa293e9SMauro Carvalho Chehab
776*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
777*baa293e9SMauro Carvalho Chehab
778*baa293e9SMauro Carvalho Chehab	int parport_negotiate (struct parport *, int mode);
779*baa293e9SMauro Carvalho Chehab
780*baa293e9SMauro Carvalho ChehabDESCRIPTION
781*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
782*baa293e9SMauro Carvalho Chehab
783*baa293e9SMauro Carvalho ChehabPerform IEEE 1284 negotiation.
784*baa293e9SMauro Carvalho Chehab
785*baa293e9SMauro Carvalho ChehabRETURN VALUE
786*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
787*baa293e9SMauro Carvalho Chehab
788*baa293e9SMauro Carvalho Chehab======= ==========================================================
789*baa293e9SMauro Carvalho Chehab     0  handshake OK; IEEE 1284 peripheral and mode available
790*baa293e9SMauro Carvalho Chehab    -1  handshake failed; peripheral not compliant (or none present)
791*baa293e9SMauro Carvalho Chehab     1  handshake OK; IEEE 1284 peripheral present but mode not
792*baa293e9SMauro Carvalho Chehab        available
793*baa293e9SMauro Carvalho Chehab======= ==========================================================
794*baa293e9SMauro Carvalho Chehab
795*baa293e9SMauro Carvalho ChehabSEE ALSO
796*baa293e9SMauro Carvalho Chehab^^^^^^^^
797*baa293e9SMauro Carvalho Chehab
798*baa293e9SMauro Carvalho Chehabparport_read, parport_write
799*baa293e9SMauro Carvalho Chehab
800*baa293e9SMauro Carvalho Chehab
801*baa293e9SMauro Carvalho Chehab
802*baa293e9SMauro Carvalho Chehabparport_read - read data from device
803*baa293e9SMauro Carvalho Chehab------------------------------------
804*baa293e9SMauro Carvalho Chehab
805*baa293e9SMauro Carvalho ChehabSYNOPSIS
806*baa293e9SMauro Carvalho Chehab^^^^^^^^
807*baa293e9SMauro Carvalho Chehab
808*baa293e9SMauro Carvalho Chehab::
809*baa293e9SMauro Carvalho Chehab
810*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
811*baa293e9SMauro Carvalho Chehab
812*baa293e9SMauro Carvalho Chehab	ssize_t parport_read (struct parport *, void *buf, size_t len);
813*baa293e9SMauro Carvalho Chehab
814*baa293e9SMauro Carvalho ChehabDESCRIPTION
815*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
816*baa293e9SMauro Carvalho Chehab
817*baa293e9SMauro Carvalho ChehabRead data from device in current IEEE 1284 transfer mode.  This only
818*baa293e9SMauro Carvalho Chehabworks for modes that support reverse data transfer.
819*baa293e9SMauro Carvalho Chehab
820*baa293e9SMauro Carvalho ChehabRETURN VALUE
821*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
822*baa293e9SMauro Carvalho Chehab
823*baa293e9SMauro Carvalho ChehabIf negative, an error code; otherwise the number of bytes transferred.
824*baa293e9SMauro Carvalho Chehab
825*baa293e9SMauro Carvalho ChehabSEE ALSO
826*baa293e9SMauro Carvalho Chehab^^^^^^^^
827*baa293e9SMauro Carvalho Chehab
828*baa293e9SMauro Carvalho Chehabparport_write, parport_negotiate
829*baa293e9SMauro Carvalho Chehab
830*baa293e9SMauro Carvalho Chehab
831*baa293e9SMauro Carvalho Chehab
832*baa293e9SMauro Carvalho Chehabparport_write - write data to device
833*baa293e9SMauro Carvalho Chehab------------------------------------
834*baa293e9SMauro Carvalho Chehab
835*baa293e9SMauro Carvalho ChehabSYNOPSIS
836*baa293e9SMauro Carvalho Chehab^^^^^^^^
837*baa293e9SMauro Carvalho Chehab
838*baa293e9SMauro Carvalho Chehab::
839*baa293e9SMauro Carvalho Chehab
840*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
841*baa293e9SMauro Carvalho Chehab
842*baa293e9SMauro Carvalho Chehab	ssize_t parport_write (struct parport *, const void *buf, size_t len);
843*baa293e9SMauro Carvalho Chehab
844*baa293e9SMauro Carvalho ChehabDESCRIPTION
845*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
846*baa293e9SMauro Carvalho Chehab
847*baa293e9SMauro Carvalho ChehabWrite data to device in current IEEE 1284 transfer mode.  This only
848*baa293e9SMauro Carvalho Chehabworks for modes that support forward data transfer.
849*baa293e9SMauro Carvalho Chehab
850*baa293e9SMauro Carvalho ChehabRETURN VALUE
851*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
852*baa293e9SMauro Carvalho Chehab
853*baa293e9SMauro Carvalho ChehabIf negative, an error code; otherwise the number of bytes transferred.
854*baa293e9SMauro Carvalho Chehab
855*baa293e9SMauro Carvalho ChehabSEE ALSO
856*baa293e9SMauro Carvalho Chehab^^^^^^^^
857*baa293e9SMauro Carvalho Chehab
858*baa293e9SMauro Carvalho Chehabparport_read, parport_negotiate
859*baa293e9SMauro Carvalho Chehab
860*baa293e9SMauro Carvalho Chehab
861*baa293e9SMauro Carvalho Chehab
862*baa293e9SMauro Carvalho Chehabparport_open - register device for particular device number
863*baa293e9SMauro Carvalho Chehab-----------------------------------------------------------
864*baa293e9SMauro Carvalho Chehab
865*baa293e9SMauro Carvalho ChehabSYNOPSIS
866*baa293e9SMauro Carvalho Chehab^^^^^^^^
867*baa293e9SMauro Carvalho Chehab
868*baa293e9SMauro Carvalho Chehab::
869*baa293e9SMauro Carvalho Chehab
870*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
871*baa293e9SMauro Carvalho Chehab
872*baa293e9SMauro Carvalho Chehab	struct pardevice *parport_open (int devnum, const char *name,
873*baa293e9SMauro Carvalho Chehab				        int (*pf) (void *),
874*baa293e9SMauro Carvalho Chehab					void (*kf) (void *),
875*baa293e9SMauro Carvalho Chehab					void (*irqf) (int, void *,
876*baa293e9SMauro Carvalho Chehab						      struct pt_regs *),
877*baa293e9SMauro Carvalho Chehab					int flags, void *handle);
878*baa293e9SMauro Carvalho Chehab
879*baa293e9SMauro Carvalho ChehabDESCRIPTION
880*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
881*baa293e9SMauro Carvalho Chehab
882*baa293e9SMauro Carvalho ChehabThis is like parport_register_device but takes a device number instead
883*baa293e9SMauro Carvalho Chehabof a pointer to a struct parport.
884*baa293e9SMauro Carvalho Chehab
885*baa293e9SMauro Carvalho ChehabRETURN VALUE
886*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
887*baa293e9SMauro Carvalho Chehab
888*baa293e9SMauro Carvalho ChehabSee parport_register_device.  If no device is associated with devnum,
889*baa293e9SMauro Carvalho ChehabNULL is returned.
890*baa293e9SMauro Carvalho Chehab
891*baa293e9SMauro Carvalho ChehabSEE ALSO
892*baa293e9SMauro Carvalho Chehab^^^^^^^^
893*baa293e9SMauro Carvalho Chehab
894*baa293e9SMauro Carvalho Chehabparport_register_device
895*baa293e9SMauro Carvalho Chehab
896*baa293e9SMauro Carvalho Chehab
897*baa293e9SMauro Carvalho Chehab
898*baa293e9SMauro Carvalho Chehabparport_close - unregister device for particular device number
899*baa293e9SMauro Carvalho Chehab--------------------------------------------------------------
900*baa293e9SMauro Carvalho Chehab
901*baa293e9SMauro Carvalho ChehabSYNOPSIS
902*baa293e9SMauro Carvalho Chehab^^^^^^^^
903*baa293e9SMauro Carvalho Chehab
904*baa293e9SMauro Carvalho Chehab::
905*baa293e9SMauro Carvalho Chehab
906*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
907*baa293e9SMauro Carvalho Chehab
908*baa293e9SMauro Carvalho Chehab	void parport_close (struct pardevice *dev);
909*baa293e9SMauro Carvalho Chehab
910*baa293e9SMauro Carvalho ChehabDESCRIPTION
911*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
912*baa293e9SMauro Carvalho Chehab
913*baa293e9SMauro Carvalho ChehabThis is the equivalent of parport_unregister_device for parport_open.
914*baa293e9SMauro Carvalho Chehab
915*baa293e9SMauro Carvalho ChehabSEE ALSO
916*baa293e9SMauro Carvalho Chehab^^^^^^^^
917*baa293e9SMauro Carvalho Chehab
918*baa293e9SMauro Carvalho Chehabparport_unregister_device, parport_open
919*baa293e9SMauro Carvalho Chehab
920*baa293e9SMauro Carvalho Chehab
921*baa293e9SMauro Carvalho Chehab
922*baa293e9SMauro Carvalho Chehabparport_device_id - obtain IEEE 1284 Device ID
923*baa293e9SMauro Carvalho Chehab----------------------------------------------
924*baa293e9SMauro Carvalho Chehab
925*baa293e9SMauro Carvalho ChehabSYNOPSIS
926*baa293e9SMauro Carvalho Chehab^^^^^^^^
927*baa293e9SMauro Carvalho Chehab
928*baa293e9SMauro Carvalho Chehab::
929*baa293e9SMauro Carvalho Chehab
930*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
931*baa293e9SMauro Carvalho Chehab
932*baa293e9SMauro Carvalho Chehab	ssize_t parport_device_id (int devnum, char *buffer, size_t len);
933*baa293e9SMauro Carvalho Chehab
934*baa293e9SMauro Carvalho ChehabDESCRIPTION
935*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
936*baa293e9SMauro Carvalho Chehab
937*baa293e9SMauro Carvalho ChehabObtains the IEEE 1284 Device ID associated with a given device.
938*baa293e9SMauro Carvalho Chehab
939*baa293e9SMauro Carvalho ChehabRETURN VALUE
940*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
941*baa293e9SMauro Carvalho Chehab
942*baa293e9SMauro Carvalho ChehabIf negative, an error code; otherwise, the number of bytes of buffer
943*baa293e9SMauro Carvalho Chehabthat contain the device ID.  The format of the device ID is as
944*baa293e9SMauro Carvalho Chehabfollows::
945*baa293e9SMauro Carvalho Chehab
946*baa293e9SMauro Carvalho Chehab	[length][ID]
947*baa293e9SMauro Carvalho Chehab
948*baa293e9SMauro Carvalho ChehabThe first two bytes indicate the inclusive length of the entire Device
949*baa293e9SMauro Carvalho ChehabID, and are in big-endian order.  The ID is a sequence of pairs of the
950*baa293e9SMauro Carvalho Chehabform::
951*baa293e9SMauro Carvalho Chehab
952*baa293e9SMauro Carvalho Chehab	key:value;
953*baa293e9SMauro Carvalho Chehab
954*baa293e9SMauro Carvalho ChehabNOTES
955*baa293e9SMauro Carvalho Chehab^^^^^
956*baa293e9SMauro Carvalho Chehab
957*baa293e9SMauro Carvalho ChehabMany devices have ill-formed IEEE 1284 Device IDs.
958*baa293e9SMauro Carvalho Chehab
959*baa293e9SMauro Carvalho ChehabSEE ALSO
960*baa293e9SMauro Carvalho Chehab^^^^^^^^
961*baa293e9SMauro Carvalho Chehab
962*baa293e9SMauro Carvalho Chehabparport_find_class, parport_find_device
963*baa293e9SMauro Carvalho Chehab
964*baa293e9SMauro Carvalho Chehab
965*baa293e9SMauro Carvalho Chehab
966*baa293e9SMauro Carvalho Chehabparport_device_coords - convert device number to device coordinates
967*baa293e9SMauro Carvalho Chehab-------------------------------------------------------------------
968*baa293e9SMauro Carvalho Chehab
969*baa293e9SMauro Carvalho ChehabSYNOPSIS
970*baa293e9SMauro Carvalho Chehab^^^^^^^^
971*baa293e9SMauro Carvalho Chehab
972*baa293e9SMauro Carvalho Chehab::
973*baa293e9SMauro Carvalho Chehab
974*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
975*baa293e9SMauro Carvalho Chehab
976*baa293e9SMauro Carvalho Chehab	int parport_device_coords (int devnum, int *parport, int *mux,
977*baa293e9SMauro Carvalho Chehab				   int *daisy);
978*baa293e9SMauro Carvalho Chehab
979*baa293e9SMauro Carvalho ChehabDESCRIPTION
980*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
981*baa293e9SMauro Carvalho Chehab
982*baa293e9SMauro Carvalho ChehabConvert between device number (zero-based) and device coordinates
983*baa293e9SMauro Carvalho Chehab(port, multiplexor, daisy chain address).
984*baa293e9SMauro Carvalho Chehab
985*baa293e9SMauro Carvalho ChehabRETURN VALUE
986*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
987*baa293e9SMauro Carvalho Chehab
988*baa293e9SMauro Carvalho ChehabZero on success, in which case the coordinates are (``*parport``, ``*mux``,
989*baa293e9SMauro Carvalho Chehab``*daisy``).
990*baa293e9SMauro Carvalho Chehab
991*baa293e9SMauro Carvalho ChehabSEE ALSO
992*baa293e9SMauro Carvalho Chehab^^^^^^^^
993*baa293e9SMauro Carvalho Chehab
994*baa293e9SMauro Carvalho Chehabparport_open, parport_device_id
995*baa293e9SMauro Carvalho Chehab
996*baa293e9SMauro Carvalho Chehab
997*baa293e9SMauro Carvalho Chehab
998*baa293e9SMauro Carvalho Chehabparport_find_class - find a device by its class
999*baa293e9SMauro Carvalho Chehab-----------------------------------------------
1000*baa293e9SMauro Carvalho Chehab
1001*baa293e9SMauro Carvalho ChehabSYNOPSIS
1002*baa293e9SMauro Carvalho Chehab^^^^^^^^
1003*baa293e9SMauro Carvalho Chehab
1004*baa293e9SMauro Carvalho Chehab::
1005*baa293e9SMauro Carvalho Chehab
1006*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1007*baa293e9SMauro Carvalho Chehab
1008*baa293e9SMauro Carvalho Chehab	typedef enum {
1009*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */
1010*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_PRINTER,
1011*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_MODEM,
1012*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_NET,
1013*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_HDC,              /* Hard disk controller */
1014*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_PCMCIA,
1015*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_MEDIA,            /* Multimedia device */
1016*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_FDC,              /* Floppy disk controller */
1017*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_PORTS,
1018*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_SCANNER,
1019*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_DIGCAM,
1020*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_OTHER,            /* Anything else */
1021*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */
1022*baa293e9SMauro Carvalho Chehab		PARPORT_CLASS_SCSIADAPTER
1023*baa293e9SMauro Carvalho Chehab	} parport_device_class;
1024*baa293e9SMauro Carvalho Chehab
1025*baa293e9SMauro Carvalho Chehab	int parport_find_class (parport_device_class cls, int from);
1026*baa293e9SMauro Carvalho Chehab
1027*baa293e9SMauro Carvalho ChehabDESCRIPTION
1028*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1029*baa293e9SMauro Carvalho Chehab
1030*baa293e9SMauro Carvalho ChehabFind a device by class.  The search starts from device number from+1.
1031*baa293e9SMauro Carvalho Chehab
1032*baa293e9SMauro Carvalho ChehabRETURN VALUE
1033*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1034*baa293e9SMauro Carvalho Chehab
1035*baa293e9SMauro Carvalho ChehabThe device number of the next device in that class, or -1 if no such
1036*baa293e9SMauro Carvalho Chehabdevice exists.
1037*baa293e9SMauro Carvalho Chehab
1038*baa293e9SMauro Carvalho ChehabNOTES
1039*baa293e9SMauro Carvalho Chehab^^^^^
1040*baa293e9SMauro Carvalho Chehab
1041*baa293e9SMauro Carvalho ChehabExample usage::
1042*baa293e9SMauro Carvalho Chehab
1043*baa293e9SMauro Carvalho Chehab	int devnum = -1;
1044*baa293e9SMauro Carvalho Chehab	while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) {
1045*baa293e9SMauro Carvalho Chehab		struct pardevice *dev = parport_open (devnum, ...);
1046*baa293e9SMauro Carvalho Chehab		...
1047*baa293e9SMauro Carvalho Chehab	}
1048*baa293e9SMauro Carvalho Chehab
1049*baa293e9SMauro Carvalho ChehabSEE ALSO
1050*baa293e9SMauro Carvalho Chehab^^^^^^^^
1051*baa293e9SMauro Carvalho Chehab
1052*baa293e9SMauro Carvalho Chehabparport_find_device, parport_open, parport_device_id
1053*baa293e9SMauro Carvalho Chehab
1054*baa293e9SMauro Carvalho Chehab
1055*baa293e9SMauro Carvalho Chehab
1056*baa293e9SMauro Carvalho Chehabparport_find_device - find a device by its class
1057*baa293e9SMauro Carvalho Chehab------------------------------------------------
1058*baa293e9SMauro Carvalho Chehab
1059*baa293e9SMauro Carvalho ChehabSYNOPSIS
1060*baa293e9SMauro Carvalho Chehab^^^^^^^^
1061*baa293e9SMauro Carvalho Chehab
1062*baa293e9SMauro Carvalho Chehab::
1063*baa293e9SMauro Carvalho Chehab
1064*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1065*baa293e9SMauro Carvalho Chehab
1066*baa293e9SMauro Carvalho Chehab	int parport_find_device (const char *mfg, const char *mdl, int from);
1067*baa293e9SMauro Carvalho Chehab
1068*baa293e9SMauro Carvalho ChehabDESCRIPTION
1069*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1070*baa293e9SMauro Carvalho Chehab
1071*baa293e9SMauro Carvalho ChehabFind a device by vendor and model.  The search starts from device
1072*baa293e9SMauro Carvalho Chehabnumber from+1.
1073*baa293e9SMauro Carvalho Chehab
1074*baa293e9SMauro Carvalho ChehabRETURN VALUE
1075*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1076*baa293e9SMauro Carvalho Chehab
1077*baa293e9SMauro Carvalho ChehabThe device number of the next device matching the specifications, or
1078*baa293e9SMauro Carvalho Chehab-1 if no such device exists.
1079*baa293e9SMauro Carvalho Chehab
1080*baa293e9SMauro Carvalho ChehabNOTES
1081*baa293e9SMauro Carvalho Chehab^^^^^
1082*baa293e9SMauro Carvalho Chehab
1083*baa293e9SMauro Carvalho ChehabExample usage::
1084*baa293e9SMauro Carvalho Chehab
1085*baa293e9SMauro Carvalho Chehab	int devnum = -1;
1086*baa293e9SMauro Carvalho Chehab	while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) {
1087*baa293e9SMauro Carvalho Chehab		struct pardevice *dev = parport_open (devnum, ...);
1088*baa293e9SMauro Carvalho Chehab		...
1089*baa293e9SMauro Carvalho Chehab	}
1090*baa293e9SMauro Carvalho Chehab
1091*baa293e9SMauro Carvalho ChehabSEE ALSO
1092*baa293e9SMauro Carvalho Chehab^^^^^^^^
1093*baa293e9SMauro Carvalho Chehab
1094*baa293e9SMauro Carvalho Chehabparport_find_class, parport_open, parport_device_id
1095*baa293e9SMauro Carvalho Chehab
1096*baa293e9SMauro Carvalho Chehab
1097*baa293e9SMauro Carvalho Chehab
1098*baa293e9SMauro Carvalho Chehabparport_set_timeout - set the inactivity timeout
1099*baa293e9SMauro Carvalho Chehab------------------------------------------------
1100*baa293e9SMauro Carvalho Chehab
1101*baa293e9SMauro Carvalho ChehabSYNOPSIS
1102*baa293e9SMauro Carvalho Chehab^^^^^^^^
1103*baa293e9SMauro Carvalho Chehab
1104*baa293e9SMauro Carvalho Chehab::
1105*baa293e9SMauro Carvalho Chehab
1106*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1107*baa293e9SMauro Carvalho Chehab
1108*baa293e9SMauro Carvalho Chehab	long parport_set_timeout (struct pardevice *dev, long inactivity);
1109*baa293e9SMauro Carvalho Chehab
1110*baa293e9SMauro Carvalho ChehabDESCRIPTION
1111*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1112*baa293e9SMauro Carvalho Chehab
1113*baa293e9SMauro Carvalho ChehabSet the inactivity timeout, in jiffies, for a registered device.  The
1114*baa293e9SMauro Carvalho Chehabprevious timeout is returned.
1115*baa293e9SMauro Carvalho Chehab
1116*baa293e9SMauro Carvalho ChehabRETURN VALUE
1117*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1118*baa293e9SMauro Carvalho Chehab
1119*baa293e9SMauro Carvalho ChehabThe previous timeout, in jiffies.
1120*baa293e9SMauro Carvalho Chehab
1121*baa293e9SMauro Carvalho ChehabNOTES
1122*baa293e9SMauro Carvalho Chehab^^^^^
1123*baa293e9SMauro Carvalho Chehab
1124*baa293e9SMauro Carvalho ChehabSome of the port->ops functions for a parport may take time, owing to
1125*baa293e9SMauro Carvalho Chehabdelays at the peripheral.  After the peripheral has not responded for
1126*baa293e9SMauro Carvalho Chehab``inactivity`` jiffies, a timeout will occur and the blocking function
1127*baa293e9SMauro Carvalho Chehabwill return.
1128*baa293e9SMauro Carvalho Chehab
1129*baa293e9SMauro Carvalho ChehabA timeout of 0 jiffies is a special case: the function must do as much
1130*baa293e9SMauro Carvalho Chehabas it can without blocking or leaving the hardware in an unknown
1131*baa293e9SMauro Carvalho Chehabstate.  If port operations are performed from within an interrupt
1132*baa293e9SMauro Carvalho Chehabhandler, for instance, a timeout of 0 jiffies should be used.
1133*baa293e9SMauro Carvalho Chehab
1134*baa293e9SMauro Carvalho ChehabOnce set for a registered device, the timeout will remain at the set
1135*baa293e9SMauro Carvalho Chehabvalue until set again.
1136*baa293e9SMauro Carvalho Chehab
1137*baa293e9SMauro Carvalho ChehabSEE ALSO
1138*baa293e9SMauro Carvalho Chehab^^^^^^^^
1139*baa293e9SMauro Carvalho Chehab
1140*baa293e9SMauro Carvalho Chehabport->ops->xxx_read/write_yyy
1141*baa293e9SMauro Carvalho Chehab
1142*baa293e9SMauro Carvalho Chehab
1143*baa293e9SMauro Carvalho Chehab
1144*baa293e9SMauro Carvalho Chehab
1145*baa293e9SMauro Carvalho ChehabPORT FUNCTIONS
1146*baa293e9SMauro Carvalho Chehab==============
1147*baa293e9SMauro Carvalho Chehab
1148*baa293e9SMauro Carvalho ChehabThe functions in the port->ops structure (struct parport_operations)
1149*baa293e9SMauro Carvalho Chehabare provided by the low-level driver responsible for that port.
1150*baa293e9SMauro Carvalho Chehab
1151*baa293e9SMauro Carvalho Chehabport->ops->read_data - read the data register
1152*baa293e9SMauro Carvalho Chehab---------------------------------------------
1153*baa293e9SMauro Carvalho Chehab
1154*baa293e9SMauro Carvalho ChehabSYNOPSIS
1155*baa293e9SMauro Carvalho Chehab^^^^^^^^
1156*baa293e9SMauro Carvalho Chehab
1157*baa293e9SMauro Carvalho Chehab::
1158*baa293e9SMauro Carvalho Chehab
1159*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1160*baa293e9SMauro Carvalho Chehab
1161*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1162*baa293e9SMauro Carvalho Chehab		...
1163*baa293e9SMauro Carvalho Chehab		unsigned char (*read_data) (struct parport *port);
1164*baa293e9SMauro Carvalho Chehab		...
1165*baa293e9SMauro Carvalho Chehab	};
1166*baa293e9SMauro Carvalho Chehab
1167*baa293e9SMauro Carvalho ChehabDESCRIPTION
1168*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1169*baa293e9SMauro Carvalho Chehab
1170*baa293e9SMauro Carvalho ChehabIf port->modes contains the PARPORT_MODE_TRISTATE flag and the
1171*baa293e9SMauro Carvalho ChehabPARPORT_CONTROL_DIRECTION bit in the control register is set, this
1172*baa293e9SMauro Carvalho Chehabreturns the value on the data pins.  If port->modes contains the
1173*baa293e9SMauro Carvalho ChehabPARPORT_MODE_TRISTATE flag and the PARPORT_CONTROL_DIRECTION bit is
1174*baa293e9SMauro Carvalho Chehabnot set, the return value _may_ be the last value written to the data
1175*baa293e9SMauro Carvalho Chehabregister.  Otherwise the return value is undefined.
1176*baa293e9SMauro Carvalho Chehab
1177*baa293e9SMauro Carvalho ChehabSEE ALSO
1178*baa293e9SMauro Carvalho Chehab^^^^^^^^
1179*baa293e9SMauro Carvalho Chehab
1180*baa293e9SMauro Carvalho Chehabwrite_data, read_status, write_control
1181*baa293e9SMauro Carvalho Chehab
1182*baa293e9SMauro Carvalho Chehab
1183*baa293e9SMauro Carvalho Chehab
1184*baa293e9SMauro Carvalho Chehabport->ops->write_data - write the data register
1185*baa293e9SMauro Carvalho Chehab-----------------------------------------------
1186*baa293e9SMauro Carvalho Chehab
1187*baa293e9SMauro Carvalho ChehabSYNOPSIS
1188*baa293e9SMauro Carvalho Chehab^^^^^^^^
1189*baa293e9SMauro Carvalho Chehab
1190*baa293e9SMauro Carvalho Chehab::
1191*baa293e9SMauro Carvalho Chehab
1192*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1193*baa293e9SMauro Carvalho Chehab
1194*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1195*baa293e9SMauro Carvalho Chehab		...
1196*baa293e9SMauro Carvalho Chehab		void (*write_data) (struct parport *port, unsigned char d);
1197*baa293e9SMauro Carvalho Chehab		...
1198*baa293e9SMauro Carvalho Chehab	};
1199*baa293e9SMauro Carvalho Chehab
1200*baa293e9SMauro Carvalho ChehabDESCRIPTION
1201*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1202*baa293e9SMauro Carvalho Chehab
1203*baa293e9SMauro Carvalho ChehabWrites to the data register.  May have side-effects (a STROBE pulse,
1204*baa293e9SMauro Carvalho Chehabfor instance).
1205*baa293e9SMauro Carvalho Chehab
1206*baa293e9SMauro Carvalho ChehabSEE ALSO
1207*baa293e9SMauro Carvalho Chehab^^^^^^^^
1208*baa293e9SMauro Carvalho Chehab
1209*baa293e9SMauro Carvalho Chehabread_data, read_status, write_control
1210*baa293e9SMauro Carvalho Chehab
1211*baa293e9SMauro Carvalho Chehab
1212*baa293e9SMauro Carvalho Chehab
1213*baa293e9SMauro Carvalho Chehabport->ops->read_status - read the status register
1214*baa293e9SMauro Carvalho Chehab-------------------------------------------------
1215*baa293e9SMauro Carvalho Chehab
1216*baa293e9SMauro Carvalho ChehabSYNOPSIS
1217*baa293e9SMauro Carvalho Chehab^^^^^^^^
1218*baa293e9SMauro Carvalho Chehab
1219*baa293e9SMauro Carvalho Chehab::
1220*baa293e9SMauro Carvalho Chehab
1221*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1222*baa293e9SMauro Carvalho Chehab
1223*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1224*baa293e9SMauro Carvalho Chehab		...
1225*baa293e9SMauro Carvalho Chehab		unsigned char (*read_status) (struct parport *port);
1226*baa293e9SMauro Carvalho Chehab		...
1227*baa293e9SMauro Carvalho Chehab	};
1228*baa293e9SMauro Carvalho Chehab
1229*baa293e9SMauro Carvalho ChehabDESCRIPTION
1230*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1231*baa293e9SMauro Carvalho Chehab
1232*baa293e9SMauro Carvalho ChehabReads from the status register.  This is a bitmask:
1233*baa293e9SMauro Carvalho Chehab
1234*baa293e9SMauro Carvalho Chehab- PARPORT_STATUS_ERROR (printer fault, "nFault")
1235*baa293e9SMauro Carvalho Chehab- PARPORT_STATUS_SELECT (on-line, "Select")
1236*baa293e9SMauro Carvalho Chehab- PARPORT_STATUS_PAPEROUT (no paper, "PError")
1237*baa293e9SMauro Carvalho Chehab- PARPORT_STATUS_ACK (handshake, "nAck")
1238*baa293e9SMauro Carvalho Chehab- PARPORT_STATUS_BUSY (busy, "Busy")
1239*baa293e9SMauro Carvalho Chehab
1240*baa293e9SMauro Carvalho ChehabThere may be other bits set.
1241*baa293e9SMauro Carvalho Chehab
1242*baa293e9SMauro Carvalho ChehabSEE ALSO
1243*baa293e9SMauro Carvalho Chehab^^^^^^^^
1244*baa293e9SMauro Carvalho Chehab
1245*baa293e9SMauro Carvalho Chehabread_data, write_data, write_control
1246*baa293e9SMauro Carvalho Chehab
1247*baa293e9SMauro Carvalho Chehab
1248*baa293e9SMauro Carvalho Chehab
1249*baa293e9SMauro Carvalho Chehabport->ops->read_control - read the control register
1250*baa293e9SMauro Carvalho Chehab---------------------------------------------------
1251*baa293e9SMauro Carvalho Chehab
1252*baa293e9SMauro Carvalho ChehabSYNOPSIS
1253*baa293e9SMauro Carvalho Chehab^^^^^^^^
1254*baa293e9SMauro Carvalho Chehab
1255*baa293e9SMauro Carvalho Chehab::
1256*baa293e9SMauro Carvalho Chehab
1257*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1258*baa293e9SMauro Carvalho Chehab
1259*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1260*baa293e9SMauro Carvalho Chehab		...
1261*baa293e9SMauro Carvalho Chehab		unsigned char (*read_control) (struct parport *port);
1262*baa293e9SMauro Carvalho Chehab		...
1263*baa293e9SMauro Carvalho Chehab	};
1264*baa293e9SMauro Carvalho Chehab
1265*baa293e9SMauro Carvalho ChehabDESCRIPTION
1266*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1267*baa293e9SMauro Carvalho Chehab
1268*baa293e9SMauro Carvalho ChehabReturns the last value written to the control register (either from
1269*baa293e9SMauro Carvalho Chehabwrite_control or frob_control).  No port access is performed.
1270*baa293e9SMauro Carvalho Chehab
1271*baa293e9SMauro Carvalho ChehabSEE ALSO
1272*baa293e9SMauro Carvalho Chehab^^^^^^^^
1273*baa293e9SMauro Carvalho Chehab
1274*baa293e9SMauro Carvalho Chehabread_data, write_data, read_status, write_control
1275*baa293e9SMauro Carvalho Chehab
1276*baa293e9SMauro Carvalho Chehab
1277*baa293e9SMauro Carvalho Chehab
1278*baa293e9SMauro Carvalho Chehabport->ops->write_control - write the control register
1279*baa293e9SMauro Carvalho Chehab-----------------------------------------------------
1280*baa293e9SMauro Carvalho Chehab
1281*baa293e9SMauro Carvalho ChehabSYNOPSIS
1282*baa293e9SMauro Carvalho Chehab^^^^^^^^
1283*baa293e9SMauro Carvalho Chehab
1284*baa293e9SMauro Carvalho Chehab::
1285*baa293e9SMauro Carvalho Chehab
1286*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1287*baa293e9SMauro Carvalho Chehab
1288*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1289*baa293e9SMauro Carvalho Chehab		...
1290*baa293e9SMauro Carvalho Chehab		void (*write_control) (struct parport *port, unsigned char s);
1291*baa293e9SMauro Carvalho Chehab		...
1292*baa293e9SMauro Carvalho Chehab	};
1293*baa293e9SMauro Carvalho Chehab
1294*baa293e9SMauro Carvalho ChehabDESCRIPTION
1295*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1296*baa293e9SMauro Carvalho Chehab
1297*baa293e9SMauro Carvalho ChehabWrites to the control register. This is a bitmask::
1298*baa293e9SMauro Carvalho Chehab
1299*baa293e9SMauro Carvalho Chehab				  _______
1300*baa293e9SMauro Carvalho Chehab	- PARPORT_CONTROL_STROBE (nStrobe)
1301*baa293e9SMauro Carvalho Chehab				  _______
1302*baa293e9SMauro Carvalho Chehab	- PARPORT_CONTROL_AUTOFD (nAutoFd)
1303*baa293e9SMauro Carvalho Chehab				_____
1304*baa293e9SMauro Carvalho Chehab	- PARPORT_CONTROL_INIT (nInit)
1305*baa293e9SMauro Carvalho Chehab				  _________
1306*baa293e9SMauro Carvalho Chehab	- PARPORT_CONTROL_SELECT (nSelectIn)
1307*baa293e9SMauro Carvalho Chehab
1308*baa293e9SMauro Carvalho ChehabSEE ALSO
1309*baa293e9SMauro Carvalho Chehab^^^^^^^^
1310*baa293e9SMauro Carvalho Chehab
1311*baa293e9SMauro Carvalho Chehabread_data, write_data, read_status, frob_control
1312*baa293e9SMauro Carvalho Chehab
1313*baa293e9SMauro Carvalho Chehab
1314*baa293e9SMauro Carvalho Chehab
1315*baa293e9SMauro Carvalho Chehabport->ops->frob_control - write control register bits
1316*baa293e9SMauro Carvalho Chehab-----------------------------------------------------
1317*baa293e9SMauro Carvalho Chehab
1318*baa293e9SMauro Carvalho ChehabSYNOPSIS
1319*baa293e9SMauro Carvalho Chehab^^^^^^^^
1320*baa293e9SMauro Carvalho Chehab
1321*baa293e9SMauro Carvalho Chehab::
1322*baa293e9SMauro Carvalho Chehab
1323*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1324*baa293e9SMauro Carvalho Chehab
1325*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1326*baa293e9SMauro Carvalho Chehab		...
1327*baa293e9SMauro Carvalho Chehab		unsigned char (*frob_control) (struct parport *port,
1328*baa293e9SMauro Carvalho Chehab					unsigned char mask,
1329*baa293e9SMauro Carvalho Chehab					unsigned char val);
1330*baa293e9SMauro Carvalho Chehab		...
1331*baa293e9SMauro Carvalho Chehab	};
1332*baa293e9SMauro Carvalho Chehab
1333*baa293e9SMauro Carvalho ChehabDESCRIPTION
1334*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1335*baa293e9SMauro Carvalho Chehab
1336*baa293e9SMauro Carvalho ChehabThis is equivalent to reading from the control register, masking out
1337*baa293e9SMauro Carvalho Chehabthe bits in mask, exclusive-or'ing with the bits in val, and writing
1338*baa293e9SMauro Carvalho Chehabthe result to the control register.
1339*baa293e9SMauro Carvalho Chehab
1340*baa293e9SMauro Carvalho ChehabAs some ports don't allow reads from the control port, a software copy
1341*baa293e9SMauro Carvalho Chehabof its contents is maintained, so frob_control is in fact only one
1342*baa293e9SMauro Carvalho Chehabport access.
1343*baa293e9SMauro Carvalho Chehab
1344*baa293e9SMauro Carvalho ChehabSEE ALSO
1345*baa293e9SMauro Carvalho Chehab^^^^^^^^
1346*baa293e9SMauro Carvalho Chehab
1347*baa293e9SMauro Carvalho Chehabread_data, write_data, read_status, write_control
1348*baa293e9SMauro Carvalho Chehab
1349*baa293e9SMauro Carvalho Chehab
1350*baa293e9SMauro Carvalho Chehab
1351*baa293e9SMauro Carvalho Chehabport->ops->enable_irq - enable interrupt generation
1352*baa293e9SMauro Carvalho Chehab---------------------------------------------------
1353*baa293e9SMauro Carvalho Chehab
1354*baa293e9SMauro Carvalho ChehabSYNOPSIS
1355*baa293e9SMauro Carvalho Chehab^^^^^^^^
1356*baa293e9SMauro Carvalho Chehab
1357*baa293e9SMauro Carvalho Chehab::
1358*baa293e9SMauro Carvalho Chehab
1359*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1360*baa293e9SMauro Carvalho Chehab
1361*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1362*baa293e9SMauro Carvalho Chehab		...
1363*baa293e9SMauro Carvalho Chehab		void (*enable_irq) (struct parport *port);
1364*baa293e9SMauro Carvalho Chehab		...
1365*baa293e9SMauro Carvalho Chehab	};
1366*baa293e9SMauro Carvalho Chehab
1367*baa293e9SMauro Carvalho ChehabDESCRIPTION
1368*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1369*baa293e9SMauro Carvalho Chehab
1370*baa293e9SMauro Carvalho ChehabThe parallel port hardware is instructed to generate interrupts at
1371*baa293e9SMauro Carvalho Chehabappropriate moments, although those moments are
1372*baa293e9SMauro Carvalho Chehabarchitecture-specific.  For the PC architecture, interrupts are
1373*baa293e9SMauro Carvalho Chehabcommonly generated on the rising edge of nAck.
1374*baa293e9SMauro Carvalho Chehab
1375*baa293e9SMauro Carvalho ChehabSEE ALSO
1376*baa293e9SMauro Carvalho Chehab^^^^^^^^
1377*baa293e9SMauro Carvalho Chehab
1378*baa293e9SMauro Carvalho Chehabdisable_irq
1379*baa293e9SMauro Carvalho Chehab
1380*baa293e9SMauro Carvalho Chehab
1381*baa293e9SMauro Carvalho Chehab
1382*baa293e9SMauro Carvalho Chehabport->ops->disable_irq - disable interrupt generation
1383*baa293e9SMauro Carvalho Chehab-----------------------------------------------------
1384*baa293e9SMauro Carvalho Chehab
1385*baa293e9SMauro Carvalho ChehabSYNOPSIS
1386*baa293e9SMauro Carvalho Chehab^^^^^^^^
1387*baa293e9SMauro Carvalho Chehab
1388*baa293e9SMauro Carvalho Chehab::
1389*baa293e9SMauro Carvalho Chehab
1390*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1391*baa293e9SMauro Carvalho Chehab
1392*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1393*baa293e9SMauro Carvalho Chehab		...
1394*baa293e9SMauro Carvalho Chehab		void (*disable_irq) (struct parport *port);
1395*baa293e9SMauro Carvalho Chehab		...
1396*baa293e9SMauro Carvalho Chehab	};
1397*baa293e9SMauro Carvalho Chehab
1398*baa293e9SMauro Carvalho ChehabDESCRIPTION
1399*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1400*baa293e9SMauro Carvalho Chehab
1401*baa293e9SMauro Carvalho ChehabThe parallel port hardware is instructed not to generate interrupts.
1402*baa293e9SMauro Carvalho ChehabThe interrupt itself is not masked.
1403*baa293e9SMauro Carvalho Chehab
1404*baa293e9SMauro Carvalho ChehabSEE ALSO
1405*baa293e9SMauro Carvalho Chehab^^^^^^^^
1406*baa293e9SMauro Carvalho Chehab
1407*baa293e9SMauro Carvalho Chehabenable_irq
1408*baa293e9SMauro Carvalho Chehab
1409*baa293e9SMauro Carvalho Chehab
1410*baa293e9SMauro Carvalho Chehab
1411*baa293e9SMauro Carvalho Chehabport->ops->data_forward - enable data drivers
1412*baa293e9SMauro Carvalho Chehab---------------------------------------------
1413*baa293e9SMauro Carvalho Chehab
1414*baa293e9SMauro Carvalho ChehabSYNOPSIS
1415*baa293e9SMauro Carvalho Chehab^^^^^^^^
1416*baa293e9SMauro Carvalho Chehab
1417*baa293e9SMauro Carvalho Chehab::
1418*baa293e9SMauro Carvalho Chehab
1419*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1420*baa293e9SMauro Carvalho Chehab
1421*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1422*baa293e9SMauro Carvalho Chehab		...
1423*baa293e9SMauro Carvalho Chehab		void (*data_forward) (struct parport *port);
1424*baa293e9SMauro Carvalho Chehab		...
1425*baa293e9SMauro Carvalho Chehab	};
1426*baa293e9SMauro Carvalho Chehab
1427*baa293e9SMauro Carvalho ChehabDESCRIPTION
1428*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1429*baa293e9SMauro Carvalho Chehab
1430*baa293e9SMauro Carvalho ChehabEnables the data line drivers, for 8-bit host-to-peripheral
1431*baa293e9SMauro Carvalho Chehabcommunications.
1432*baa293e9SMauro Carvalho Chehab
1433*baa293e9SMauro Carvalho ChehabSEE ALSO
1434*baa293e9SMauro Carvalho Chehab^^^^^^^^
1435*baa293e9SMauro Carvalho Chehab
1436*baa293e9SMauro Carvalho Chehabdata_reverse
1437*baa293e9SMauro Carvalho Chehab
1438*baa293e9SMauro Carvalho Chehab
1439*baa293e9SMauro Carvalho Chehab
1440*baa293e9SMauro Carvalho Chehabport->ops->data_reverse - tristate the buffer
1441*baa293e9SMauro Carvalho Chehab---------------------------------------------
1442*baa293e9SMauro Carvalho Chehab
1443*baa293e9SMauro Carvalho ChehabSYNOPSIS
1444*baa293e9SMauro Carvalho Chehab^^^^^^^^
1445*baa293e9SMauro Carvalho Chehab
1446*baa293e9SMauro Carvalho Chehab::
1447*baa293e9SMauro Carvalho Chehab
1448*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1449*baa293e9SMauro Carvalho Chehab
1450*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1451*baa293e9SMauro Carvalho Chehab		...
1452*baa293e9SMauro Carvalho Chehab		void (*data_reverse) (struct parport *port);
1453*baa293e9SMauro Carvalho Chehab		...
1454*baa293e9SMauro Carvalho Chehab	};
1455*baa293e9SMauro Carvalho Chehab
1456*baa293e9SMauro Carvalho ChehabDESCRIPTION
1457*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1458*baa293e9SMauro Carvalho Chehab
1459*baa293e9SMauro Carvalho ChehabPlaces the data bus in a high impedance state, if port->modes has the
1460*baa293e9SMauro Carvalho ChehabPARPORT_MODE_TRISTATE bit set.
1461*baa293e9SMauro Carvalho Chehab
1462*baa293e9SMauro Carvalho ChehabSEE ALSO
1463*baa293e9SMauro Carvalho Chehab^^^^^^^^
1464*baa293e9SMauro Carvalho Chehab
1465*baa293e9SMauro Carvalho Chehabdata_forward
1466*baa293e9SMauro Carvalho Chehab
1467*baa293e9SMauro Carvalho Chehab
1468*baa293e9SMauro Carvalho Chehab
1469*baa293e9SMauro Carvalho Chehabport->ops->epp_write_data - write EPP data
1470*baa293e9SMauro Carvalho Chehab------------------------------------------
1471*baa293e9SMauro Carvalho Chehab
1472*baa293e9SMauro Carvalho ChehabSYNOPSIS
1473*baa293e9SMauro Carvalho Chehab^^^^^^^^
1474*baa293e9SMauro Carvalho Chehab
1475*baa293e9SMauro Carvalho Chehab::
1476*baa293e9SMauro Carvalho Chehab
1477*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1478*baa293e9SMauro Carvalho Chehab
1479*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1480*baa293e9SMauro Carvalho Chehab		...
1481*baa293e9SMauro Carvalho Chehab		size_t (*epp_write_data) (struct parport *port, const void *buf,
1482*baa293e9SMauro Carvalho Chehab					size_t len, int flags);
1483*baa293e9SMauro Carvalho Chehab		...
1484*baa293e9SMauro Carvalho Chehab	};
1485*baa293e9SMauro Carvalho Chehab
1486*baa293e9SMauro Carvalho ChehabDESCRIPTION
1487*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1488*baa293e9SMauro Carvalho Chehab
1489*baa293e9SMauro Carvalho ChehabWrites data in EPP mode, and returns the number of bytes written.
1490*baa293e9SMauro Carvalho Chehab
1491*baa293e9SMauro Carvalho ChehabThe ``flags`` parameter may be one or more of the following,
1492*baa293e9SMauro Carvalho Chehabbitwise-or'ed together:
1493*baa293e9SMauro Carvalho Chehab
1494*baa293e9SMauro Carvalho Chehab======================= =================================================
1495*baa293e9SMauro Carvalho ChehabPARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
1496*baa293e9SMauro Carvalho Chehab			32-bit registers.  However, if a transfer
1497*baa293e9SMauro Carvalho Chehab			times out, the return value may be unreliable.
1498*baa293e9SMauro Carvalho Chehab======================= =================================================
1499*baa293e9SMauro Carvalho Chehab
1500*baa293e9SMauro Carvalho ChehabSEE ALSO
1501*baa293e9SMauro Carvalho Chehab^^^^^^^^
1502*baa293e9SMauro Carvalho Chehab
1503*baa293e9SMauro Carvalho Chehabepp_read_data, epp_write_addr, epp_read_addr
1504*baa293e9SMauro Carvalho Chehab
1505*baa293e9SMauro Carvalho Chehab
1506*baa293e9SMauro Carvalho Chehab
1507*baa293e9SMauro Carvalho Chehabport->ops->epp_read_data - read EPP data
1508*baa293e9SMauro Carvalho Chehab----------------------------------------
1509*baa293e9SMauro Carvalho Chehab
1510*baa293e9SMauro Carvalho ChehabSYNOPSIS
1511*baa293e9SMauro Carvalho Chehab^^^^^^^^
1512*baa293e9SMauro Carvalho Chehab
1513*baa293e9SMauro Carvalho Chehab::
1514*baa293e9SMauro Carvalho Chehab
1515*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1516*baa293e9SMauro Carvalho Chehab
1517*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1518*baa293e9SMauro Carvalho Chehab		...
1519*baa293e9SMauro Carvalho Chehab		size_t (*epp_read_data) (struct parport *port, void *buf,
1520*baa293e9SMauro Carvalho Chehab					size_t len, int flags);
1521*baa293e9SMauro Carvalho Chehab		...
1522*baa293e9SMauro Carvalho Chehab	};
1523*baa293e9SMauro Carvalho Chehab
1524*baa293e9SMauro Carvalho ChehabDESCRIPTION
1525*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1526*baa293e9SMauro Carvalho Chehab
1527*baa293e9SMauro Carvalho ChehabReads data in EPP mode, and returns the number of bytes read.
1528*baa293e9SMauro Carvalho Chehab
1529*baa293e9SMauro Carvalho ChehabThe ``flags`` parameter may be one or more of the following,
1530*baa293e9SMauro Carvalho Chehabbitwise-or'ed together:
1531*baa293e9SMauro Carvalho Chehab
1532*baa293e9SMauro Carvalho Chehab======================= =================================================
1533*baa293e9SMauro Carvalho ChehabPARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
1534*baa293e9SMauro Carvalho Chehab			32-bit registers.  However, if a transfer
1535*baa293e9SMauro Carvalho Chehab			times out, the return value may be unreliable.
1536*baa293e9SMauro Carvalho Chehab======================= =================================================
1537*baa293e9SMauro Carvalho Chehab
1538*baa293e9SMauro Carvalho ChehabSEE ALSO
1539*baa293e9SMauro Carvalho Chehab^^^^^^^^
1540*baa293e9SMauro Carvalho Chehab
1541*baa293e9SMauro Carvalho Chehabepp_write_data, epp_write_addr, epp_read_addr
1542*baa293e9SMauro Carvalho Chehab
1543*baa293e9SMauro Carvalho Chehab
1544*baa293e9SMauro Carvalho Chehab
1545*baa293e9SMauro Carvalho Chehabport->ops->epp_write_addr - write EPP address
1546*baa293e9SMauro Carvalho Chehab---------------------------------------------
1547*baa293e9SMauro Carvalho Chehab
1548*baa293e9SMauro Carvalho ChehabSYNOPSIS
1549*baa293e9SMauro Carvalho Chehab^^^^^^^^
1550*baa293e9SMauro Carvalho Chehab
1551*baa293e9SMauro Carvalho Chehab::
1552*baa293e9SMauro Carvalho Chehab
1553*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1554*baa293e9SMauro Carvalho Chehab
1555*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1556*baa293e9SMauro Carvalho Chehab		...
1557*baa293e9SMauro Carvalho Chehab		size_t (*epp_write_addr) (struct parport *port,
1558*baa293e9SMauro Carvalho Chehab					const void *buf, size_t len, int flags);
1559*baa293e9SMauro Carvalho Chehab		...
1560*baa293e9SMauro Carvalho Chehab	};
1561*baa293e9SMauro Carvalho Chehab
1562*baa293e9SMauro Carvalho ChehabDESCRIPTION
1563*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1564*baa293e9SMauro Carvalho Chehab
1565*baa293e9SMauro Carvalho ChehabWrites EPP addresses (8 bits each), and returns the number written.
1566*baa293e9SMauro Carvalho Chehab
1567*baa293e9SMauro Carvalho ChehabThe ``flags`` parameter may be one or more of the following,
1568*baa293e9SMauro Carvalho Chehabbitwise-or'ed together:
1569*baa293e9SMauro Carvalho Chehab
1570*baa293e9SMauro Carvalho Chehab======================= =================================================
1571*baa293e9SMauro Carvalho ChehabPARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
1572*baa293e9SMauro Carvalho Chehab			32-bit registers.  However, if a transfer
1573*baa293e9SMauro Carvalho Chehab			times out, the return value may be unreliable.
1574*baa293e9SMauro Carvalho Chehab======================= =================================================
1575*baa293e9SMauro Carvalho Chehab
1576*baa293e9SMauro Carvalho Chehab(Does PARPORT_EPP_FAST make sense for this function?)
1577*baa293e9SMauro Carvalho Chehab
1578*baa293e9SMauro Carvalho ChehabSEE ALSO
1579*baa293e9SMauro Carvalho Chehab^^^^^^^^
1580*baa293e9SMauro Carvalho Chehab
1581*baa293e9SMauro Carvalho Chehabepp_write_data, epp_read_data, epp_read_addr
1582*baa293e9SMauro Carvalho Chehab
1583*baa293e9SMauro Carvalho Chehab
1584*baa293e9SMauro Carvalho Chehab
1585*baa293e9SMauro Carvalho Chehabport->ops->epp_read_addr - read EPP address
1586*baa293e9SMauro Carvalho Chehab-------------------------------------------
1587*baa293e9SMauro Carvalho Chehab
1588*baa293e9SMauro Carvalho ChehabSYNOPSIS
1589*baa293e9SMauro Carvalho Chehab^^^^^^^^
1590*baa293e9SMauro Carvalho Chehab
1591*baa293e9SMauro Carvalho Chehab::
1592*baa293e9SMauro Carvalho Chehab
1593*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1594*baa293e9SMauro Carvalho Chehab
1595*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1596*baa293e9SMauro Carvalho Chehab		...
1597*baa293e9SMauro Carvalho Chehab		size_t (*epp_read_addr) (struct parport *port, void *buf,
1598*baa293e9SMauro Carvalho Chehab					size_t len, int flags);
1599*baa293e9SMauro Carvalho Chehab		...
1600*baa293e9SMauro Carvalho Chehab	};
1601*baa293e9SMauro Carvalho Chehab
1602*baa293e9SMauro Carvalho ChehabDESCRIPTION
1603*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1604*baa293e9SMauro Carvalho Chehab
1605*baa293e9SMauro Carvalho ChehabReads EPP addresses (8 bits each), and returns the number read.
1606*baa293e9SMauro Carvalho Chehab
1607*baa293e9SMauro Carvalho ChehabThe ``flags`` parameter may be one or more of the following,
1608*baa293e9SMauro Carvalho Chehabbitwise-or'ed together:
1609*baa293e9SMauro Carvalho Chehab
1610*baa293e9SMauro Carvalho Chehab======================= =================================================
1611*baa293e9SMauro Carvalho ChehabPARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
1612*baa293e9SMauro Carvalho Chehab			32-bit registers.  However, if a transfer
1613*baa293e9SMauro Carvalho Chehab			times out, the return value may be unreliable.
1614*baa293e9SMauro Carvalho Chehab======================= =================================================
1615*baa293e9SMauro Carvalho Chehab
1616*baa293e9SMauro Carvalho Chehab(Does PARPORT_EPP_FAST make sense for this function?)
1617*baa293e9SMauro Carvalho Chehab
1618*baa293e9SMauro Carvalho ChehabSEE ALSO
1619*baa293e9SMauro Carvalho Chehab^^^^^^^^
1620*baa293e9SMauro Carvalho Chehab
1621*baa293e9SMauro Carvalho Chehabepp_write_data, epp_read_data, epp_write_addr
1622*baa293e9SMauro Carvalho Chehab
1623*baa293e9SMauro Carvalho Chehab
1624*baa293e9SMauro Carvalho Chehab
1625*baa293e9SMauro Carvalho Chehabport->ops->ecp_write_data - write a block of ECP data
1626*baa293e9SMauro Carvalho Chehab-----------------------------------------------------
1627*baa293e9SMauro Carvalho Chehab
1628*baa293e9SMauro Carvalho ChehabSYNOPSIS
1629*baa293e9SMauro Carvalho Chehab^^^^^^^^
1630*baa293e9SMauro Carvalho Chehab
1631*baa293e9SMauro Carvalho Chehab::
1632*baa293e9SMauro Carvalho Chehab
1633*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1634*baa293e9SMauro Carvalho Chehab
1635*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1636*baa293e9SMauro Carvalho Chehab		...
1637*baa293e9SMauro Carvalho Chehab		size_t (*ecp_write_data) (struct parport *port,
1638*baa293e9SMauro Carvalho Chehab					const void *buf, size_t len, int flags);
1639*baa293e9SMauro Carvalho Chehab		...
1640*baa293e9SMauro Carvalho Chehab	};
1641*baa293e9SMauro Carvalho Chehab
1642*baa293e9SMauro Carvalho ChehabDESCRIPTION
1643*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1644*baa293e9SMauro Carvalho Chehab
1645*baa293e9SMauro Carvalho ChehabWrites a block of ECP data.  The ``flags`` parameter is ignored.
1646*baa293e9SMauro Carvalho Chehab
1647*baa293e9SMauro Carvalho ChehabRETURN VALUE
1648*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1649*baa293e9SMauro Carvalho Chehab
1650*baa293e9SMauro Carvalho ChehabThe number of bytes written.
1651*baa293e9SMauro Carvalho Chehab
1652*baa293e9SMauro Carvalho ChehabSEE ALSO
1653*baa293e9SMauro Carvalho Chehab^^^^^^^^
1654*baa293e9SMauro Carvalho Chehab
1655*baa293e9SMauro Carvalho Chehabecp_read_data, ecp_write_addr
1656*baa293e9SMauro Carvalho Chehab
1657*baa293e9SMauro Carvalho Chehab
1658*baa293e9SMauro Carvalho Chehab
1659*baa293e9SMauro Carvalho Chehabport->ops->ecp_read_data - read a block of ECP data
1660*baa293e9SMauro Carvalho Chehab---------------------------------------------------
1661*baa293e9SMauro Carvalho Chehab
1662*baa293e9SMauro Carvalho ChehabSYNOPSIS
1663*baa293e9SMauro Carvalho Chehab^^^^^^^^
1664*baa293e9SMauro Carvalho Chehab
1665*baa293e9SMauro Carvalho Chehab::
1666*baa293e9SMauro Carvalho Chehab
1667*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1668*baa293e9SMauro Carvalho Chehab
1669*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1670*baa293e9SMauro Carvalho Chehab		...
1671*baa293e9SMauro Carvalho Chehab		size_t (*ecp_read_data) (struct parport *port,
1672*baa293e9SMauro Carvalho Chehab					void *buf, size_t len, int flags);
1673*baa293e9SMauro Carvalho Chehab		...
1674*baa293e9SMauro Carvalho Chehab	};
1675*baa293e9SMauro Carvalho Chehab
1676*baa293e9SMauro Carvalho ChehabDESCRIPTION
1677*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1678*baa293e9SMauro Carvalho Chehab
1679*baa293e9SMauro Carvalho ChehabReads a block of ECP data.  The ``flags`` parameter is ignored.
1680*baa293e9SMauro Carvalho Chehab
1681*baa293e9SMauro Carvalho ChehabRETURN VALUE
1682*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1683*baa293e9SMauro Carvalho Chehab
1684*baa293e9SMauro Carvalho ChehabThe number of bytes read.  NB. There may be more unread data in a
1685*baa293e9SMauro Carvalho ChehabFIFO.  Is there a way of stunning the FIFO to prevent this?
1686*baa293e9SMauro Carvalho Chehab
1687*baa293e9SMauro Carvalho ChehabSEE ALSO
1688*baa293e9SMauro Carvalho Chehab^^^^^^^^
1689*baa293e9SMauro Carvalho Chehab
1690*baa293e9SMauro Carvalho Chehabecp_write_block, ecp_write_addr
1691*baa293e9SMauro Carvalho Chehab
1692*baa293e9SMauro Carvalho Chehab
1693*baa293e9SMauro Carvalho Chehab
1694*baa293e9SMauro Carvalho Chehabport->ops->ecp_write_addr - write a block of ECP addresses
1695*baa293e9SMauro Carvalho Chehab----------------------------------------------------------
1696*baa293e9SMauro Carvalho Chehab
1697*baa293e9SMauro Carvalho ChehabSYNOPSIS
1698*baa293e9SMauro Carvalho Chehab^^^^^^^^
1699*baa293e9SMauro Carvalho Chehab
1700*baa293e9SMauro Carvalho Chehab::
1701*baa293e9SMauro Carvalho Chehab
1702*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1703*baa293e9SMauro Carvalho Chehab
1704*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1705*baa293e9SMauro Carvalho Chehab		...
1706*baa293e9SMauro Carvalho Chehab		size_t (*ecp_write_addr) (struct parport *port,
1707*baa293e9SMauro Carvalho Chehab					const void *buf, size_t len, int flags);
1708*baa293e9SMauro Carvalho Chehab		...
1709*baa293e9SMauro Carvalho Chehab	};
1710*baa293e9SMauro Carvalho Chehab
1711*baa293e9SMauro Carvalho ChehabDESCRIPTION
1712*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1713*baa293e9SMauro Carvalho Chehab
1714*baa293e9SMauro Carvalho ChehabWrites a block of ECP addresses.  The ``flags`` parameter is ignored.
1715*baa293e9SMauro Carvalho Chehab
1716*baa293e9SMauro Carvalho ChehabRETURN VALUE
1717*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1718*baa293e9SMauro Carvalho Chehab
1719*baa293e9SMauro Carvalho ChehabThe number of bytes written.
1720*baa293e9SMauro Carvalho Chehab
1721*baa293e9SMauro Carvalho ChehabNOTES
1722*baa293e9SMauro Carvalho Chehab^^^^^
1723*baa293e9SMauro Carvalho Chehab
1724*baa293e9SMauro Carvalho ChehabThis may use a FIFO, and if so shall not return until the FIFO is empty.
1725*baa293e9SMauro Carvalho Chehab
1726*baa293e9SMauro Carvalho ChehabSEE ALSO
1727*baa293e9SMauro Carvalho Chehab^^^^^^^^
1728*baa293e9SMauro Carvalho Chehab
1729*baa293e9SMauro Carvalho Chehabecp_read_data, ecp_write_data
1730*baa293e9SMauro Carvalho Chehab
1731*baa293e9SMauro Carvalho Chehab
1732*baa293e9SMauro Carvalho Chehab
1733*baa293e9SMauro Carvalho Chehabport->ops->nibble_read_data - read a block of data in nibble mode
1734*baa293e9SMauro Carvalho Chehab-----------------------------------------------------------------
1735*baa293e9SMauro Carvalho Chehab
1736*baa293e9SMauro Carvalho ChehabSYNOPSIS
1737*baa293e9SMauro Carvalho Chehab^^^^^^^^
1738*baa293e9SMauro Carvalho Chehab
1739*baa293e9SMauro Carvalho Chehab::
1740*baa293e9SMauro Carvalho Chehab
1741*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1742*baa293e9SMauro Carvalho Chehab
1743*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1744*baa293e9SMauro Carvalho Chehab		...
1745*baa293e9SMauro Carvalho Chehab		size_t (*nibble_read_data) (struct parport *port,
1746*baa293e9SMauro Carvalho Chehab					void *buf, size_t len, int flags);
1747*baa293e9SMauro Carvalho Chehab		...
1748*baa293e9SMauro Carvalho Chehab	};
1749*baa293e9SMauro Carvalho Chehab
1750*baa293e9SMauro Carvalho ChehabDESCRIPTION
1751*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1752*baa293e9SMauro Carvalho Chehab
1753*baa293e9SMauro Carvalho ChehabReads a block of data in nibble mode.  The ``flags`` parameter is ignored.
1754*baa293e9SMauro Carvalho Chehab
1755*baa293e9SMauro Carvalho ChehabRETURN VALUE
1756*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1757*baa293e9SMauro Carvalho Chehab
1758*baa293e9SMauro Carvalho ChehabThe number of whole bytes read.
1759*baa293e9SMauro Carvalho Chehab
1760*baa293e9SMauro Carvalho ChehabSEE ALSO
1761*baa293e9SMauro Carvalho Chehab^^^^^^^^
1762*baa293e9SMauro Carvalho Chehab
1763*baa293e9SMauro Carvalho Chehabbyte_read_data, compat_write_data
1764*baa293e9SMauro Carvalho Chehab
1765*baa293e9SMauro Carvalho Chehab
1766*baa293e9SMauro Carvalho Chehab
1767*baa293e9SMauro Carvalho Chehabport->ops->byte_read_data - read a block of data in byte mode
1768*baa293e9SMauro Carvalho Chehab-------------------------------------------------------------
1769*baa293e9SMauro Carvalho Chehab
1770*baa293e9SMauro Carvalho ChehabSYNOPSIS
1771*baa293e9SMauro Carvalho Chehab^^^^^^^^
1772*baa293e9SMauro Carvalho Chehab
1773*baa293e9SMauro Carvalho Chehab::
1774*baa293e9SMauro Carvalho Chehab
1775*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1776*baa293e9SMauro Carvalho Chehab
1777*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1778*baa293e9SMauro Carvalho Chehab		...
1779*baa293e9SMauro Carvalho Chehab		size_t (*byte_read_data) (struct parport *port,
1780*baa293e9SMauro Carvalho Chehab					void *buf, size_t len, int flags);
1781*baa293e9SMauro Carvalho Chehab		...
1782*baa293e9SMauro Carvalho Chehab	};
1783*baa293e9SMauro Carvalho Chehab
1784*baa293e9SMauro Carvalho ChehabDESCRIPTION
1785*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1786*baa293e9SMauro Carvalho Chehab
1787*baa293e9SMauro Carvalho ChehabReads a block of data in byte mode.  The ``flags`` parameter is ignored.
1788*baa293e9SMauro Carvalho Chehab
1789*baa293e9SMauro Carvalho ChehabRETURN VALUE
1790*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1791*baa293e9SMauro Carvalho Chehab
1792*baa293e9SMauro Carvalho ChehabThe number of bytes read.
1793*baa293e9SMauro Carvalho Chehab
1794*baa293e9SMauro Carvalho ChehabSEE ALSO
1795*baa293e9SMauro Carvalho Chehab^^^^^^^^
1796*baa293e9SMauro Carvalho Chehab
1797*baa293e9SMauro Carvalho Chehabnibble_read_data, compat_write_data
1798*baa293e9SMauro Carvalho Chehab
1799*baa293e9SMauro Carvalho Chehab
1800*baa293e9SMauro Carvalho Chehab
1801*baa293e9SMauro Carvalho Chehabport->ops->compat_write_data - write a block of data in compatibility mode
1802*baa293e9SMauro Carvalho Chehab--------------------------------------------------------------------------
1803*baa293e9SMauro Carvalho Chehab
1804*baa293e9SMauro Carvalho ChehabSYNOPSIS
1805*baa293e9SMauro Carvalho Chehab^^^^^^^^
1806*baa293e9SMauro Carvalho Chehab
1807*baa293e9SMauro Carvalho Chehab::
1808*baa293e9SMauro Carvalho Chehab
1809*baa293e9SMauro Carvalho Chehab	#include <linux/parport.h>
1810*baa293e9SMauro Carvalho Chehab
1811*baa293e9SMauro Carvalho Chehab	struct parport_operations {
1812*baa293e9SMauro Carvalho Chehab		...
1813*baa293e9SMauro Carvalho Chehab		size_t (*compat_write_data) (struct parport *port,
1814*baa293e9SMauro Carvalho Chehab					const void *buf, size_t len, int flags);
1815*baa293e9SMauro Carvalho Chehab		...
1816*baa293e9SMauro Carvalho Chehab	};
1817*baa293e9SMauro Carvalho Chehab
1818*baa293e9SMauro Carvalho ChehabDESCRIPTION
1819*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^
1820*baa293e9SMauro Carvalho Chehab
1821*baa293e9SMauro Carvalho ChehabWrites a block of data in compatibility mode.  The ``flags`` parameter
1822*baa293e9SMauro Carvalho Chehabis ignored.
1823*baa293e9SMauro Carvalho Chehab
1824*baa293e9SMauro Carvalho ChehabRETURN VALUE
1825*baa293e9SMauro Carvalho Chehab^^^^^^^^^^^^
1826*baa293e9SMauro Carvalho Chehab
1827*baa293e9SMauro Carvalho ChehabThe number of bytes written.
1828*baa293e9SMauro Carvalho Chehab
1829*baa293e9SMauro Carvalho ChehabSEE ALSO
1830*baa293e9SMauro Carvalho Chehab^^^^^^^^
1831*baa293e9SMauro Carvalho Chehab
1832*baa293e9SMauro Carvalho Chehabnibble_read_data, byte_read_data
1833