c551c0c88d8eacae3048ed9a539365017eaff065
[cascardo/linux.git] / drivers / char / ppdev.c
1 /*
2  * linux/drivers/char/ppdev.c
3  *
4  * This is the code behind /dev/parport* -- it allows a user-space
5  * application to use the parport subsystem.
6  *
7  * Copyright (C) 1998-2000, 2002 Tim Waugh <tim@cyberelk.net>
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License
11  * as published by the Free Software Foundation; either version
12  * 2 of the License, or (at your option) any later version.
13  *
14  * A /dev/parportx device node represents an arbitrary device
15  * on port 'x'.  The following operations are possible:
16  *
17  * open         do nothing, set up default IEEE 1284 protocol to be COMPAT
18  * close        release port and unregister device (if necessary)
19  * ioctl
20  *   EXCL       register device exclusively (may fail)
21  *   CLAIM      (register device first time) parport_claim_or_block
22  *   RELEASE    parport_release
23  *   SETMODE    set the IEEE 1284 protocol to use for read/write
24  *   SETPHASE   set the IEEE 1284 phase of a particular mode.  Not to be
25  *              confused with ioctl(fd, SETPHASER, &stun). ;-)
26  *   DATADIR    data_forward / data_reverse
27  *   WDATA      write_data
28  *   RDATA      read_data
29  *   WCONTROL   write_control
30  *   RCONTROL   read_control
31  *   FCONTROL   frob_control
32  *   RSTATUS    read_status
33  *   NEGOT      parport_negotiate
34  *   YIELD      parport_yield_blocking
35  *   WCTLONIRQ  on interrupt, set control lines
36  *   CLRIRQ     clear (and return) interrupt count
37  *   SETTIME    sets device timeout (struct timeval)
38  *   GETTIME    gets device timeout (struct timeval)
39  *   GETMODES   gets hardware supported modes (unsigned int)
40  *   GETMODE    gets the current IEEE1284 mode
41  *   GETPHASE   gets the current IEEE1284 phase
42  *   GETFLAGS   gets current (user-visible) flags
43  *   SETFLAGS   sets current (user-visible) flags
44  * read/write   read or write in current IEEE 1284 protocol
45  * select       wait for interrupt (in readfds)
46  *
47  * Changes:
48  * Added SETTIME/GETTIME ioctl, Fred Barnes, 1999.
49  *
50  * Arnaldo Carvalho de Melo <acme@conectiva.com.br> 2000/08/25
51  * - On error, copy_from_user and copy_to_user do not return -EFAULT,
52  *   They return the positive number of bytes *not* copied due to address
53  *   space errors.
54  *
55  * Added GETMODES/GETMODE/GETPHASE ioctls, Fred Barnes <frmb2@ukc.ac.uk>, 03/01/2001.
56  * Added GETFLAGS/SETFLAGS ioctls, Fred Barnes, 04/2001
57  */
58
59 #include <linux/module.h>
60 #include <linux/init.h>
61 #include <linux/sched.h>
62 #include <linux/device.h>
63 #include <linux/ioctl.h>
64 #include <linux/parport.h>
65 #include <linux/ctype.h>
66 #include <linux/poll.h>
67 #include <linux/slab.h>
68 #include <linux/major.h>
69 #include <linux/ppdev.h>
70 #include <linux/mutex.h>
71 #include <linux/uaccess.h>
72 #include <linux/compat.h>
73
74 #define PP_VERSION "ppdev: user-space parallel port driver"
75 #define CHRDEV "ppdev"
76
77 struct pp_struct {
78         struct pardevice *pdev;
79         wait_queue_head_t irq_wait;
80         atomic_t irqc;
81         unsigned int flags;
82         int irqresponse;
83         unsigned char irqctl;
84         struct ieee1284_info state;
85         struct ieee1284_info saved_state;
86         long default_inactivity;
87 };
88
89 /* pp_struct.flags bitfields */
90 #define PP_CLAIMED    (1<<0)
91 #define PP_EXCL       (1<<1)
92
93 /* Other constants */
94 #define PP_INTERRUPT_TIMEOUT (10 * HZ) /* 10s */
95 #define PP_BUFFER_SIZE 1024
96 #define PARDEVICE_MAX 8
97
98 /* ROUND_UP macro from fs/select.c */
99 #define ROUND_UP(x,y) (((x)+(y)-1)/(y))
100
101 static DEFINE_MUTEX(pp_do_mutex);
102
103 /* define fixed sized ioctl cmd for y2038 migration */
104 #define PPGETTIME32     _IOR(PP_IOCTL, 0x95, s32[2])
105 #define PPSETTIME32     _IOW(PP_IOCTL, 0x96, s32[2])
106 #define PPGETTIME64     _IOR(PP_IOCTL, 0x95, s64[2])
107 #define PPSETTIME64     _IOW(PP_IOCTL, 0x96, s64[2])
108
109 static inline void pp_enable_irq(struct pp_struct *pp)
110 {
111         struct parport *port = pp->pdev->port;
112
113         port->ops->enable_irq(port);
114 }
115
116 static ssize_t pp_read(struct file *file, char __user *buf, size_t count,
117                         loff_t *ppos)
118 {
119         unsigned int minor = iminor(file_inode(file));
120         struct pp_struct *pp = file->private_data;
121         char *kbuffer;
122         ssize_t bytes_read = 0;
123         struct parport *pport;
124         int mode;
125
126         if (!(pp->flags & PP_CLAIMED)) {
127                 /* Don't have the port claimed */
128                 pr_debug(CHRDEV "%x: claim the port first\n", minor);
129                 return -EINVAL;
130         }
131
132         /* Trivial case. */
133         if (count == 0)
134                 return 0;
135
136         kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
137         if (!kbuffer) {
138                 return -ENOMEM;
139         }
140         pport = pp->pdev->port;
141         mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
142
143         parport_set_timeout(pp->pdev,
144                              (file->f_flags & O_NONBLOCK) ?
145                              PARPORT_INACTIVITY_O_NONBLOCK :
146                              pp->default_inactivity);
147
148         while (bytes_read == 0) {
149                 ssize_t need = min_t(unsigned long, count, PP_BUFFER_SIZE);
150
151                 if (mode == IEEE1284_MODE_EPP) {
152                         /* various specials for EPP mode */
153                         int flags = 0;
154                         size_t (*fn)(struct parport *, void *, size_t, int);
155
156                         if (pp->flags & PP_W91284PIC) {
157                                 flags |= PARPORT_W91284PIC;
158                         }
159                         if (pp->flags & PP_FASTREAD) {
160                                 flags |= PARPORT_EPP_FAST;
161                         }
162                         if (pport->ieee1284.mode & IEEE1284_ADDR) {
163                                 fn = pport->ops->epp_read_addr;
164                         } else {
165                                 fn = pport->ops->epp_read_data;
166                         }
167                         bytes_read = (*fn)(pport, kbuffer, need, flags);
168                 } else {
169                         bytes_read = parport_read(pport, kbuffer, need);
170                 }
171
172                 if (bytes_read != 0)
173                         break;
174
175                 if (file->f_flags & O_NONBLOCK) {
176                         bytes_read = -EAGAIN;
177                         break;
178                 }
179
180                 if (signal_pending(current)) {
181                         bytes_read = -ERESTARTSYS;
182                         break;
183                 }
184
185                 cond_resched();
186         }
187
188         parport_set_timeout(pp->pdev, pp->default_inactivity);
189
190         if (bytes_read > 0 && copy_to_user(buf, kbuffer, bytes_read))
191                 bytes_read = -EFAULT;
192
193         kfree(kbuffer);
194         pp_enable_irq(pp);
195         return bytes_read;
196 }
197
198 static ssize_t pp_write(struct file *file, const char __user *buf,
199                          size_t count, loff_t *ppos)
200 {
201         unsigned int minor = iminor(file_inode(file));
202         struct pp_struct *pp = file->private_data;
203         char *kbuffer;
204         ssize_t bytes_written = 0;
205         ssize_t wrote;
206         int mode;
207         struct parport *pport;
208
209         if (!(pp->flags & PP_CLAIMED)) {
210                 /* Don't have the port claimed */
211                 pr_debug(CHRDEV "%x: claim the port first\n", minor);
212                 return -EINVAL;
213         }
214
215         kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
216         if (!kbuffer) {
217                 return -ENOMEM;
218         }
219         pport = pp->pdev->port;
220         mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
221
222         parport_set_timeout(pp->pdev,
223                              (file->f_flags & O_NONBLOCK) ?
224                              PARPORT_INACTIVITY_O_NONBLOCK :
225                              pp->default_inactivity);
226
227         while (bytes_written < count) {
228                 ssize_t n = min_t(unsigned long, count - bytes_written, PP_BUFFER_SIZE);
229
230                 if (copy_from_user(kbuffer, buf + bytes_written, n)) {
231                         bytes_written = -EFAULT;
232                         break;
233                 }
234
235                 if ((pp->flags & PP_FASTWRITE) && (mode == IEEE1284_MODE_EPP)) {
236                         /* do a fast EPP write */
237                         if (pport->ieee1284.mode & IEEE1284_ADDR) {
238                                 wrote = pport->ops->epp_write_addr(pport,
239                                         kbuffer, n, PARPORT_EPP_FAST);
240                         } else {
241                                 wrote = pport->ops->epp_write_data(pport,
242                                         kbuffer, n, PARPORT_EPP_FAST);
243                         }
244                 } else {
245                         wrote = parport_write(pp->pdev->port, kbuffer, n);
246                 }
247
248                 if (wrote <= 0) {
249                         if (!bytes_written) {
250                                 bytes_written = wrote;
251                         }
252                         break;
253                 }
254
255                 bytes_written += wrote;
256
257                 if (file->f_flags & O_NONBLOCK) {
258                         if (!bytes_written)
259                                 bytes_written = -EAGAIN;
260                         break;
261                 }
262
263                 if (signal_pending(current))
264                         break;
265
266                 cond_resched();
267         }
268
269         parport_set_timeout(pp->pdev, pp->default_inactivity);
270
271         kfree(kbuffer);
272         pp_enable_irq(pp);
273         return bytes_written;
274 }
275
276 static void pp_irq(void *private)
277 {
278         struct pp_struct *pp = private;
279
280         if (pp->irqresponse) {
281                 parport_write_control(pp->pdev->port, pp->irqctl);
282                 pp->irqresponse = 0;
283         }
284
285         atomic_inc(&pp->irqc);
286         wake_up_interruptible(&pp->irq_wait);
287 }
288
289 static int register_device(int minor, struct pp_struct *pp)
290 {
291         struct parport *port;
292         struct pardevice *pdev = NULL;
293         char *name;
294         int fl;
295
296         name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor);
297         if (name == NULL)
298                 return -ENOMEM;
299
300         port = parport_find_number(minor);
301         if (!port) {
302                 printk(KERN_WARNING "%s: no associated port!\n", name);
303                 kfree(name);
304                 return -ENXIO;
305         }
306
307         fl = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
308         pdev = parport_register_device(port, name, NULL,
309                                         NULL, pp_irq, fl, pp);
310         parport_put_port(port);
311
312         if (!pdev) {
313                 printk(KERN_WARNING "%s: failed to register device!\n", name);
314                 kfree(name);
315                 return -ENXIO;
316         }
317
318         pp->pdev = pdev;
319         pr_debug("%s: registered pardevice\n", name);
320         return 0;
321 }
322
323 static enum ieee1284_phase init_phase(int mode)
324 {
325         switch (mode & ~(IEEE1284_DEVICEID
326                          | IEEE1284_ADDR)) {
327         case IEEE1284_MODE_NIBBLE:
328         case IEEE1284_MODE_BYTE:
329                 return IEEE1284_PH_REV_IDLE;
330         }
331         return IEEE1284_PH_FWD_IDLE;
332 }
333
334 static int pp_set_timeout(struct pardevice *pdev, long tv_sec, int tv_usec)
335 {
336         long to_jiffies;
337
338         if ((tv_sec < 0) || (tv_usec < 0))
339                 return -EINVAL;
340
341         to_jiffies = usecs_to_jiffies(tv_usec);
342         to_jiffies += tv_sec * HZ;
343         if (to_jiffies <= 0)
344                 return -EINVAL;
345
346         pdev->timeout = to_jiffies;
347         return 0;
348 }
349
350 static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
351 {
352         unsigned int minor = iminor(file_inode(file));
353         struct pp_struct *pp = file->private_data;
354         struct parport *port;
355         void __user *argp = (void __user *)arg;
356
357         /* First handle the cases that don't take arguments. */
358         switch (cmd) {
359         case PPCLAIM:
360             {
361                 struct ieee1284_info *info;
362                 int ret;
363
364                 if (pp->flags & PP_CLAIMED) {
365                         pr_debug(CHRDEV "%x: you've already got it!\n", minor);
366                         return -EINVAL;
367                 }
368
369                 /* Deferred device registration. */
370                 if (!pp->pdev) {
371                         int err = register_device(minor, pp);
372
373                         if (err) {
374                                 return err;
375                         }
376                 }
377
378                 ret = parport_claim_or_block(pp->pdev);
379                 if (ret < 0)
380                         return ret;
381
382                 pp->flags |= PP_CLAIMED;
383
384                 /* For interrupt-reporting to work, we need to be
385                  * informed of each interrupt. */
386                 pp_enable_irq(pp);
387
388                 /* We may need to fix up the state machine. */
389                 info = &pp->pdev->port->ieee1284;
390                 pp->saved_state.mode = info->mode;
391                 pp->saved_state.phase = info->phase;
392                 info->mode = pp->state.mode;
393                 info->phase = pp->state.phase;
394                 pp->default_inactivity = parport_set_timeout(pp->pdev, 0);
395                 parport_set_timeout(pp->pdev, pp->default_inactivity);
396
397                 return 0;
398             }
399         case PPEXCL:
400                 if (pp->pdev) {
401                         pr_debug(CHRDEV "%x: too late for PPEXCL; "
402                                 "already registered\n", minor);
403                         if (pp->flags & PP_EXCL)
404                                 /* But it's not really an error. */
405                                 return 0;
406                         /* There's no chance of making the driver happy. */
407                         return -EINVAL;
408                 }
409
410                 /* Just remember to register the device exclusively
411                  * when we finally do the registration. */
412                 pp->flags |= PP_EXCL;
413                 return 0;
414         case PPSETMODE:
415             {
416                 int mode;
417
418                 if (copy_from_user(&mode, argp, sizeof(mode)))
419                         return -EFAULT;
420                 /* FIXME: validate mode */
421                 pp->state.mode = mode;
422                 pp->state.phase = init_phase(mode);
423
424                 if (pp->flags & PP_CLAIMED) {
425                         pp->pdev->port->ieee1284.mode = mode;
426                         pp->pdev->port->ieee1284.phase = pp->state.phase;
427                 }
428
429                 return 0;
430             }
431         case PPGETMODE:
432             {
433                 int mode;
434
435                 if (pp->flags & PP_CLAIMED) {
436                         mode = pp->pdev->port->ieee1284.mode;
437                 } else {
438                         mode = pp->state.mode;
439                 }
440                 if (copy_to_user(argp, &mode, sizeof(mode))) {
441                         return -EFAULT;
442                 }
443                 return 0;
444             }
445         case PPSETPHASE:
446             {
447                 int phase;
448
449                 if (copy_from_user(&phase, argp, sizeof(phase))) {
450                         return -EFAULT;
451                 }
452                 /* FIXME: validate phase */
453                 pp->state.phase = phase;
454
455                 if (pp->flags & PP_CLAIMED) {
456                         pp->pdev->port->ieee1284.phase = phase;
457                 }
458
459                 return 0;
460             }
461         case PPGETPHASE:
462             {
463                 int phase;
464
465                 if (pp->flags & PP_CLAIMED) {
466                         phase = pp->pdev->port->ieee1284.phase;
467                 } else {
468                         phase = pp->state.phase;
469                 }
470                 if (copy_to_user(argp, &phase, sizeof(phase))) {
471                         return -EFAULT;
472                 }
473                 return 0;
474             }
475         case PPGETMODES:
476             {
477                 unsigned int modes;
478
479                 port = parport_find_number(minor);
480                 if (!port)
481                         return -ENODEV;
482
483                 modes = port->modes;
484                 parport_put_port(port);
485                 if (copy_to_user(argp, &modes, sizeof(modes))) {
486                         return -EFAULT;
487                 }
488                 return 0;
489             }
490         case PPSETFLAGS:
491             {
492                 int uflags;
493
494                 if (copy_from_user(&uflags, argp, sizeof(uflags))) {
495                         return -EFAULT;
496                 }
497                 pp->flags &= ~PP_FLAGMASK;
498                 pp->flags |= (uflags & PP_FLAGMASK);
499                 return 0;
500             }
501         case PPGETFLAGS:
502             {
503                 int uflags;
504
505                 uflags = pp->flags & PP_FLAGMASK;
506                 if (copy_to_user(argp, &uflags, sizeof(uflags))) {
507                         return -EFAULT;
508                 }
509                 return 0;
510             }
511         }       /* end switch() */
512
513         /* Everything else requires the port to be claimed, so check
514          * that now. */
515         if ((pp->flags & PP_CLAIMED) == 0) {
516                 pr_debug(CHRDEV "%x: claim the port first\n", minor);
517                 return -EINVAL;
518         }
519
520         port = pp->pdev->port;
521         switch (cmd) {
522                 struct ieee1284_info *info;
523                 unsigned char reg;
524                 unsigned char mask;
525                 int mode;
526                 s32 time32[2];
527                 s64 time64[2];
528                 struct timespec64 ts;
529                 int ret;
530
531         case PPRSTATUS:
532                 reg = parport_read_status(port);
533                 if (copy_to_user(argp, &reg, sizeof(reg)))
534                         return -EFAULT;
535                 return 0;
536         case PPRDATA:
537                 reg = parport_read_data(port);
538                 if (copy_to_user(argp, &reg, sizeof(reg)))
539                         return -EFAULT;
540                 return 0;
541         case PPRCONTROL:
542                 reg = parport_read_control(port);
543                 if (copy_to_user(argp, &reg, sizeof(reg)))
544                         return -EFAULT;
545                 return 0;
546         case PPYIELD:
547                 parport_yield_blocking(pp->pdev);
548                 return 0;
549
550         case PPRELEASE:
551                 /* Save the state machine's state. */
552                 info = &pp->pdev->port->ieee1284;
553                 pp->state.mode = info->mode;
554                 pp->state.phase = info->phase;
555                 info->mode = pp->saved_state.mode;
556                 info->phase = pp->saved_state.phase;
557                 parport_release(pp->pdev);
558                 pp->flags &= ~PP_CLAIMED;
559                 return 0;
560
561         case PPWCONTROL:
562                 if (copy_from_user(&reg, argp, sizeof(reg)))
563                         return -EFAULT;
564                 parport_write_control(port, reg);
565                 return 0;
566
567         case PPWDATA:
568                 if (copy_from_user(&reg, argp, sizeof(reg)))
569                         return -EFAULT;
570                 parport_write_data(port, reg);
571                 return 0;
572
573         case PPFCONTROL:
574                 if (copy_from_user(&mask, argp,
575                                     sizeof(mask)))
576                         return -EFAULT;
577                 if (copy_from_user(&reg, 1 + (unsigned char __user *) arg,
578                                     sizeof(reg)))
579                         return -EFAULT;
580                 parport_frob_control(port, mask, reg);
581                 return 0;
582
583         case PPDATADIR:
584                 if (copy_from_user(&mode, argp, sizeof(mode)))
585                         return -EFAULT;
586                 if (mode)
587                         port->ops->data_reverse(port);
588                 else
589                         port->ops->data_forward(port);
590                 return 0;
591
592         case PPNEGOT:
593                 if (copy_from_user(&mode, argp, sizeof(mode)))
594                         return -EFAULT;
595                 switch ((ret = parport_negotiate(port, mode))) {
596                 case 0: break;
597                 case -1: /* handshake failed, peripheral not IEEE 1284 */
598                         ret = -EIO;
599                         break;
600                 case 1:  /* handshake succeeded, peripheral rejected mode */
601                         ret = -ENXIO;
602                         break;
603                 }
604                 pp_enable_irq(pp);
605                 return ret;
606
607         case PPWCTLONIRQ:
608                 if (copy_from_user(&reg, argp, sizeof(reg)))
609                         return -EFAULT;
610
611                 /* Remember what to set the control lines to, for next
612                  * time we get an interrupt. */
613                 pp->irqctl = reg;
614                 pp->irqresponse = 1;
615                 return 0;
616
617         case PPCLRIRQ:
618                 ret = atomic_read(&pp->irqc);
619                 if (copy_to_user(argp, &ret, sizeof(ret)))
620                         return -EFAULT;
621                 atomic_sub(ret, &pp->irqc);
622                 return 0;
623
624         case PPSETTIME32:
625                 if (copy_from_user(time32, argp, sizeof(time32)))
626                         return -EFAULT;
627
628                 return pp_set_timeout(pp->pdev, time32[0], time32[1]);
629
630         case PPSETTIME64:
631                 if (copy_from_user(time64, argp, sizeof(time64)))
632                         return -EFAULT;
633
634                 return pp_set_timeout(pp->pdev, time64[0], time64[1]);
635
636         case PPGETTIME32:
637                 jiffies_to_timespec64(pp->pdev->timeout, &ts);
638                 time32[0] = ts.tv_sec;
639                 time32[1] = ts.tv_nsec / NSEC_PER_USEC;
640                 if ((time32[0] < 0) || (time32[1] < 0))
641                         return -EINVAL;
642
643                 if (copy_to_user(argp, time32, sizeof(time32)))
644                         return -EFAULT;
645
646                 return 0;
647
648         case PPGETTIME64:
649                 jiffies_to_timespec64(pp->pdev->timeout, &ts);
650                 time64[0] = ts.tv_sec;
651                 time64[1] = ts.tv_nsec / NSEC_PER_USEC;
652                 if ((time64[0] < 0) || (time64[1] < 0))
653                         return -EINVAL;
654
655                 if (copy_to_user(argp, time64, sizeof(time64)))
656                         return -EFAULT;
657
658                 return 0;
659
660         default:
661                 pr_debug(CHRDEV "%x: What? (cmd=0x%x)\n", minor, cmd);
662                 return -EINVAL;
663         }
664
665         /* Keep the compiler happy */
666         return 0;
667 }
668
669 static long pp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
670 {
671         long ret;
672
673         mutex_lock(&pp_do_mutex);
674         ret = pp_do_ioctl(file, cmd, arg);
675         mutex_unlock(&pp_do_mutex);
676         return ret;
677 }
678
679 #ifdef CONFIG_COMPAT
680 static long pp_compat_ioctl(struct file *file, unsigned int cmd,
681                 unsigned long arg)
682 {
683         return pp_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
684 }
685 #endif
686
687 static int pp_open(struct inode *inode, struct file *file)
688 {
689         unsigned int minor = iminor(inode);
690         struct pp_struct *pp;
691
692         if (minor >= PARPORT_MAX)
693                 return -ENXIO;
694
695         pp = kmalloc(sizeof(struct pp_struct), GFP_KERNEL);
696         if (!pp)
697                 return -ENOMEM;
698
699         pp->state.mode = IEEE1284_MODE_COMPAT;
700         pp->state.phase = init_phase(pp->state.mode);
701         pp->flags = 0;
702         pp->irqresponse = 0;
703         atomic_set(&pp->irqc, 0);
704         init_waitqueue_head(&pp->irq_wait);
705
706         /* Defer the actual device registration until the first claim.
707          * That way, we know whether or not the driver wants to have
708          * exclusive access to the port (PPEXCL).
709          */
710         pp->pdev = NULL;
711         file->private_data = pp;
712
713         return 0;
714 }
715
716 static int pp_release(struct inode *inode, struct file *file)
717 {
718         unsigned int minor = iminor(inode);
719         struct pp_struct *pp = file->private_data;
720         int compat_negot;
721
722         compat_negot = 0;
723         if (!(pp->flags & PP_CLAIMED) && pp->pdev &&
724             (pp->state.mode != IEEE1284_MODE_COMPAT)) {
725                 struct ieee1284_info *info;
726
727                 /* parport released, but not in compatibility mode */
728                 parport_claim_or_block(pp->pdev);
729                 pp->flags |= PP_CLAIMED;
730                 info = &pp->pdev->port->ieee1284;
731                 pp->saved_state.mode = info->mode;
732                 pp->saved_state.phase = info->phase;
733                 info->mode = pp->state.mode;
734                 info->phase = pp->state.phase;
735                 compat_negot = 1;
736         } else if ((pp->flags & PP_CLAIMED) && pp->pdev &&
737             (pp->pdev->port->ieee1284.mode != IEEE1284_MODE_COMPAT)) {
738                 compat_negot = 2;
739         }
740         if (compat_negot) {
741                 parport_negotiate(pp->pdev->port, IEEE1284_MODE_COMPAT);
742                 pr_debug(CHRDEV "%x: negotiated back to compatibility "
743                         "mode because user-space forgot\n", minor);
744         }
745
746         if (pp->flags & PP_CLAIMED) {
747                 struct ieee1284_info *info;
748
749                 info = &pp->pdev->port->ieee1284;
750                 pp->state.mode = info->mode;
751                 pp->state.phase = info->phase;
752                 info->mode = pp->saved_state.mode;
753                 info->phase = pp->saved_state.phase;
754                 parport_release(pp->pdev);
755                 if (compat_negot != 1) {
756                         pr_debug(CHRDEV "%x: released pardevice "
757                                 "because user-space forgot\n", minor);
758                 }
759         }
760
761         if (pp->pdev) {
762                 const char *name = pp->pdev->name;
763
764                 parport_unregister_device(pp->pdev);
765                 kfree(name);
766                 pp->pdev = NULL;
767                 pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
768         }
769
770         kfree(pp);
771
772         return 0;
773 }
774
775 /* No kernel lock held - fine */
776 static unsigned int pp_poll(struct file *file, poll_table *wait)
777 {
778         struct pp_struct *pp = file->private_data;
779         unsigned int mask = 0;
780
781         poll_wait(file, &pp->irq_wait, wait);
782         if (atomic_read(&pp->irqc))
783                 mask |= POLLIN | POLLRDNORM;
784
785         return mask;
786 }
787
788 static struct class *ppdev_class;
789
790 static const struct file_operations pp_fops = {
791         .owner          = THIS_MODULE,
792         .llseek         = no_llseek,
793         .read           = pp_read,
794         .write          = pp_write,
795         .poll           = pp_poll,
796         .unlocked_ioctl = pp_ioctl,
797 #ifdef CONFIG_COMPAT
798         .compat_ioctl   = pp_compat_ioctl,
799 #endif
800         .open           = pp_open,
801         .release        = pp_release,
802 };
803
804 static void pp_attach(struct parport *port)
805 {
806         device_create(ppdev_class, port->dev, MKDEV(PP_MAJOR, port->number),
807                       NULL, "parport%d", port->number);
808 }
809
810 static void pp_detach(struct parport *port)
811 {
812         device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
813 }
814
815 static struct parport_driver pp_driver = {
816         .name           = CHRDEV,
817         .attach         = pp_attach,
818         .detach         = pp_detach,
819 };
820
821 static int __init ppdev_init(void)
822 {
823         int err = 0;
824
825         if (register_chrdev(PP_MAJOR, CHRDEV, &pp_fops)) {
826                 printk(KERN_WARNING CHRDEV ": unable to get major %d\n",
827                         PP_MAJOR);
828                 return -EIO;
829         }
830         ppdev_class = class_create(THIS_MODULE, CHRDEV);
831         if (IS_ERR(ppdev_class)) {
832                 err = PTR_ERR(ppdev_class);
833                 goto out_chrdev;
834         }
835         err = parport_register_driver(&pp_driver);
836         if (err < 0) {
837                 printk(KERN_WARNING CHRDEV ": unable to register with parport\n");
838                 goto out_class;
839         }
840
841         printk(KERN_INFO PP_VERSION "\n");
842         goto out;
843
844 out_class:
845         class_destroy(ppdev_class);
846 out_chrdev:
847         unregister_chrdev(PP_MAJOR, CHRDEV);
848 out:
849         return err;
850 }
851
852 static void __exit ppdev_cleanup(void)
853 {
854         /* Clean up all parport stuff */
855         parport_unregister_driver(&pp_driver);
856         class_destroy(ppdev_class);
857         unregister_chrdev(PP_MAJOR, CHRDEV);
858 }
859
860 module_init(ppdev_init);
861 module_exit(ppdev_cleanup);
862
863 MODULE_LICENSE("GPL");
864 MODULE_ALIAS_CHARDEV_MAJOR(PP_MAJOR);