0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055 #include <linux/module.h>
0056 #include <linux/init.h>
0057 #include <linux/sched/signal.h>
0058 #include <linux/device.h>
0059 #include <linux/ioctl.h>
0060 #include <linux/parport.h>
0061 #include <linux/ctype.h>
0062 #include <linux/poll.h>
0063 #include <linux/slab.h>
0064 #include <linux/major.h>
0065 #include <linux/ppdev.h>
0066 #include <linux/mutex.h>
0067 #include <linux/uaccess.h>
0068 #include <linux/compat.h>
0069
0070 #define PP_VERSION "ppdev: user-space parallel port driver"
0071 #define CHRDEV "ppdev"
0072
0073 struct pp_struct {
0074 struct pardevice *pdev;
0075 wait_queue_head_t irq_wait;
0076 atomic_t irqc;
0077 unsigned int flags;
0078 int irqresponse;
0079 unsigned char irqctl;
0080 struct ieee1284_info state;
0081 struct ieee1284_info saved_state;
0082 long default_inactivity;
0083 int index;
0084 };
0085
0086
0087 static struct device *devices[PARPORT_MAX];
0088
0089 static DEFINE_IDA(ida_index);
0090
0091
0092 #define PP_CLAIMED (1<<0)
0093 #define PP_EXCL (1<<1)
0094
0095
0096 #define PP_INTERRUPT_TIMEOUT (10 * HZ)
0097 #define PP_BUFFER_SIZE 1024
0098 #define PARDEVICE_MAX 8
0099
0100 static DEFINE_MUTEX(pp_do_mutex);
0101
0102
0103 #define PPGETTIME32 _IOR(PP_IOCTL, 0x95, s32[2])
0104 #define PPSETTIME32 _IOW(PP_IOCTL, 0x96, s32[2])
0105 #define PPGETTIME64 _IOR(PP_IOCTL, 0x95, s64[2])
0106 #define PPSETTIME64 _IOW(PP_IOCTL, 0x96, s64[2])
0107
0108 static inline void pp_enable_irq(struct pp_struct *pp)
0109 {
0110 struct parport *port = pp->pdev->port;
0111
0112 port->ops->enable_irq(port);
0113 }
0114
0115 static ssize_t pp_read(struct file *file, char __user *buf, size_t count,
0116 loff_t *ppos)
0117 {
0118 unsigned int minor = iminor(file_inode(file));
0119 struct pp_struct *pp = file->private_data;
0120 char *kbuffer;
0121 ssize_t bytes_read = 0;
0122 struct parport *pport;
0123 int mode;
0124
0125 if (!(pp->flags & PP_CLAIMED)) {
0126
0127 pr_debug(CHRDEV "%x: claim the port first\n", minor);
0128 return -EINVAL;
0129 }
0130
0131
0132 if (count == 0)
0133 return 0;
0134
0135 kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
0136 if (!kbuffer)
0137 return -ENOMEM;
0138 pport = pp->pdev->port;
0139 mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
0140
0141 parport_set_timeout(pp->pdev,
0142 (file->f_flags & O_NONBLOCK) ?
0143 PARPORT_INACTIVITY_O_NONBLOCK :
0144 pp->default_inactivity);
0145
0146 while (bytes_read == 0) {
0147 ssize_t need = min_t(unsigned long, count, PP_BUFFER_SIZE);
0148
0149 if (mode == IEEE1284_MODE_EPP) {
0150
0151 int flags = 0;
0152 size_t (*fn)(struct parport *, void *, size_t, int);
0153
0154 if (pp->flags & PP_W91284PIC)
0155 flags |= PARPORT_W91284PIC;
0156 if (pp->flags & PP_FASTREAD)
0157 flags |= PARPORT_EPP_FAST;
0158 if (pport->ieee1284.mode & IEEE1284_ADDR)
0159 fn = pport->ops->epp_read_addr;
0160 else
0161 fn = pport->ops->epp_read_data;
0162 bytes_read = (*fn)(pport, kbuffer, need, flags);
0163 } else {
0164 bytes_read = parport_read(pport, kbuffer, need);
0165 }
0166
0167 if (bytes_read != 0)
0168 break;
0169
0170 if (file->f_flags & O_NONBLOCK) {
0171 bytes_read = -EAGAIN;
0172 break;
0173 }
0174
0175 if (signal_pending(current)) {
0176 bytes_read = -ERESTARTSYS;
0177 break;
0178 }
0179
0180 cond_resched();
0181 }
0182
0183 parport_set_timeout(pp->pdev, pp->default_inactivity);
0184
0185 if (bytes_read > 0 && copy_to_user(buf, kbuffer, bytes_read))
0186 bytes_read = -EFAULT;
0187
0188 kfree(kbuffer);
0189 pp_enable_irq(pp);
0190 return bytes_read;
0191 }
0192
0193 static ssize_t pp_write(struct file *file, const char __user *buf,
0194 size_t count, loff_t *ppos)
0195 {
0196 unsigned int minor = iminor(file_inode(file));
0197 struct pp_struct *pp = file->private_data;
0198 char *kbuffer;
0199 ssize_t bytes_written = 0;
0200 ssize_t wrote;
0201 int mode;
0202 struct parport *pport;
0203
0204 if (!(pp->flags & PP_CLAIMED)) {
0205
0206 pr_debug(CHRDEV "%x: claim the port first\n", minor);
0207 return -EINVAL;
0208 }
0209
0210 kbuffer = kmalloc(min_t(size_t, count, PP_BUFFER_SIZE), GFP_KERNEL);
0211 if (!kbuffer)
0212 return -ENOMEM;
0213
0214 pport = pp->pdev->port;
0215 mode = pport->ieee1284.mode & ~(IEEE1284_DEVICEID | IEEE1284_ADDR);
0216
0217 parport_set_timeout(pp->pdev,
0218 (file->f_flags & O_NONBLOCK) ?
0219 PARPORT_INACTIVITY_O_NONBLOCK :
0220 pp->default_inactivity);
0221
0222 while (bytes_written < count) {
0223 ssize_t n = min_t(unsigned long, count - bytes_written, PP_BUFFER_SIZE);
0224
0225 if (copy_from_user(kbuffer, buf + bytes_written, n)) {
0226 bytes_written = -EFAULT;
0227 break;
0228 }
0229
0230 if ((pp->flags & PP_FASTWRITE) && (mode == IEEE1284_MODE_EPP)) {
0231
0232 if (pport->ieee1284.mode & IEEE1284_ADDR) {
0233 wrote = pport->ops->epp_write_addr(pport,
0234 kbuffer, n, PARPORT_EPP_FAST);
0235 } else {
0236 wrote = pport->ops->epp_write_data(pport,
0237 kbuffer, n, PARPORT_EPP_FAST);
0238 }
0239 } else {
0240 wrote = parport_write(pp->pdev->port, kbuffer, n);
0241 }
0242
0243 if (wrote <= 0) {
0244 if (!bytes_written)
0245 bytes_written = wrote;
0246 break;
0247 }
0248
0249 bytes_written += wrote;
0250
0251 if (file->f_flags & O_NONBLOCK) {
0252 if (!bytes_written)
0253 bytes_written = -EAGAIN;
0254 break;
0255 }
0256
0257 if (signal_pending(current))
0258 break;
0259
0260 cond_resched();
0261 }
0262
0263 parport_set_timeout(pp->pdev, pp->default_inactivity);
0264
0265 kfree(kbuffer);
0266 pp_enable_irq(pp);
0267 return bytes_written;
0268 }
0269
0270 static void pp_irq(void *private)
0271 {
0272 struct pp_struct *pp = private;
0273
0274 if (pp->irqresponse) {
0275 parport_write_control(pp->pdev->port, pp->irqctl);
0276 pp->irqresponse = 0;
0277 }
0278
0279 atomic_inc(&pp->irqc);
0280 wake_up_interruptible(&pp->irq_wait);
0281 }
0282
0283 static int register_device(int minor, struct pp_struct *pp)
0284 {
0285 struct parport *port;
0286 struct pardevice *pdev = NULL;
0287 char *name;
0288 struct pardev_cb ppdev_cb;
0289 int rc = 0, index;
0290
0291 name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor);
0292 if (name == NULL)
0293 return -ENOMEM;
0294
0295 port = parport_find_number(minor);
0296 if (!port) {
0297 pr_warn("%s: no associated port!\n", name);
0298 rc = -ENXIO;
0299 goto err;
0300 }
0301
0302 index = ida_simple_get(&ida_index, 0, 0, GFP_KERNEL);
0303 memset(&ppdev_cb, 0, sizeof(ppdev_cb));
0304 ppdev_cb.irq_func = pp_irq;
0305 ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0;
0306 ppdev_cb.private = pp;
0307 pdev = parport_register_dev_model(port, name, &ppdev_cb, index);
0308 parport_put_port(port);
0309
0310 if (!pdev) {
0311 pr_warn("%s: failed to register device!\n", name);
0312 rc = -ENXIO;
0313 ida_simple_remove(&ida_index, index);
0314 goto err;
0315 }
0316
0317 pp->pdev = pdev;
0318 pp->index = index;
0319 dev_dbg(&pdev->dev, "registered pardevice\n");
0320 err:
0321 kfree(name);
0322 return rc;
0323 }
0324
0325 static enum ieee1284_phase init_phase(int mode)
0326 {
0327 switch (mode & ~(IEEE1284_DEVICEID
0328 | IEEE1284_ADDR)) {
0329 case IEEE1284_MODE_NIBBLE:
0330 case IEEE1284_MODE_BYTE:
0331 return IEEE1284_PH_REV_IDLE;
0332 }
0333 return IEEE1284_PH_FWD_IDLE;
0334 }
0335
0336 static int pp_set_timeout(struct pardevice *pdev, long tv_sec, int tv_usec)
0337 {
0338 long to_jiffies;
0339
0340 if ((tv_sec < 0) || (tv_usec < 0))
0341 return -EINVAL;
0342
0343 to_jiffies = usecs_to_jiffies(tv_usec);
0344 to_jiffies += tv_sec * HZ;
0345 if (to_jiffies <= 0)
0346 return -EINVAL;
0347
0348 pdev->timeout = to_jiffies;
0349 return 0;
0350 }
0351
0352 static int pp_do_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
0353 {
0354 unsigned int minor = iminor(file_inode(file));
0355 struct pp_struct *pp = file->private_data;
0356 struct parport *port;
0357 void __user *argp = (void __user *)arg;
0358 struct ieee1284_info *info;
0359 unsigned char reg;
0360 unsigned char mask;
0361 int mode;
0362 s32 time32[2];
0363 s64 time64[2];
0364 struct timespec64 ts;
0365 int ret;
0366
0367
0368 switch (cmd) {
0369 case PPCLAIM:
0370 {
0371 if (pp->flags & PP_CLAIMED) {
0372 dev_dbg(&pp->pdev->dev, "you've already got it!\n");
0373 return -EINVAL;
0374 }
0375
0376
0377 if (!pp->pdev) {
0378 int err = register_device(minor, pp);
0379
0380 if (err)
0381 return err;
0382 }
0383
0384 ret = parport_claim_or_block(pp->pdev);
0385 if (ret < 0)
0386 return ret;
0387
0388 pp->flags |= PP_CLAIMED;
0389
0390
0391
0392 pp_enable_irq(pp);
0393
0394
0395 info = &pp->pdev->port->ieee1284;
0396 pp->saved_state.mode = info->mode;
0397 pp->saved_state.phase = info->phase;
0398 info->mode = pp->state.mode;
0399 info->phase = pp->state.phase;
0400 pp->default_inactivity = parport_set_timeout(pp->pdev, 0);
0401 parport_set_timeout(pp->pdev, pp->default_inactivity);
0402
0403 return 0;
0404 }
0405 case PPEXCL:
0406 if (pp->pdev) {
0407 dev_dbg(&pp->pdev->dev,
0408 "too late for PPEXCL; already registered\n");
0409 if (pp->flags & PP_EXCL)
0410
0411 return 0;
0412
0413 return -EINVAL;
0414 }
0415
0416
0417
0418 pp->flags |= PP_EXCL;
0419 return 0;
0420 case PPSETMODE:
0421 {
0422 int mode;
0423
0424 if (copy_from_user(&mode, argp, sizeof(mode)))
0425 return -EFAULT;
0426
0427 pp->state.mode = mode;
0428 pp->state.phase = init_phase(mode);
0429
0430 if (pp->flags & PP_CLAIMED) {
0431 pp->pdev->port->ieee1284.mode = mode;
0432 pp->pdev->port->ieee1284.phase = pp->state.phase;
0433 }
0434
0435 return 0;
0436 }
0437 case PPGETMODE:
0438 {
0439 int mode;
0440
0441 if (pp->flags & PP_CLAIMED)
0442 mode = pp->pdev->port->ieee1284.mode;
0443 else
0444 mode = pp->state.mode;
0445
0446 if (copy_to_user(argp, &mode, sizeof(mode)))
0447 return -EFAULT;
0448 return 0;
0449 }
0450 case PPSETPHASE:
0451 {
0452 int phase;
0453
0454 if (copy_from_user(&phase, argp, sizeof(phase)))
0455 return -EFAULT;
0456
0457
0458 pp->state.phase = phase;
0459
0460 if (pp->flags & PP_CLAIMED)
0461 pp->pdev->port->ieee1284.phase = phase;
0462
0463 return 0;
0464 }
0465 case PPGETPHASE:
0466 {
0467 int phase;
0468
0469 if (pp->flags & PP_CLAIMED)
0470 phase = pp->pdev->port->ieee1284.phase;
0471 else
0472 phase = pp->state.phase;
0473 if (copy_to_user(argp, &phase, sizeof(phase)))
0474 return -EFAULT;
0475 return 0;
0476 }
0477 case PPGETMODES:
0478 {
0479 unsigned int modes;
0480
0481 port = parport_find_number(minor);
0482 if (!port)
0483 return -ENODEV;
0484
0485 modes = port->modes;
0486 parport_put_port(port);
0487 if (copy_to_user(argp, &modes, sizeof(modes)))
0488 return -EFAULT;
0489 return 0;
0490 }
0491 case PPSETFLAGS:
0492 {
0493 int uflags;
0494
0495 if (copy_from_user(&uflags, argp, sizeof(uflags)))
0496 return -EFAULT;
0497 pp->flags &= ~PP_FLAGMASK;
0498 pp->flags |= (uflags & PP_FLAGMASK);
0499 return 0;
0500 }
0501 case PPGETFLAGS:
0502 {
0503 int uflags;
0504
0505 uflags = pp->flags & PP_FLAGMASK;
0506 if (copy_to_user(argp, &uflags, sizeof(uflags)))
0507 return -EFAULT;
0508 return 0;
0509 }
0510 }
0511
0512
0513
0514 if ((pp->flags & PP_CLAIMED) == 0) {
0515 pr_debug(CHRDEV "%x: claim the port first\n", minor);
0516 return -EINVAL;
0517 }
0518
0519 port = pp->pdev->port;
0520 switch (cmd) {
0521 case PPRSTATUS:
0522 reg = parport_read_status(port);
0523 if (copy_to_user(argp, ®, sizeof(reg)))
0524 return -EFAULT;
0525 return 0;
0526 case PPRDATA:
0527 reg = parport_read_data(port);
0528 if (copy_to_user(argp, ®, sizeof(reg)))
0529 return -EFAULT;
0530 return 0;
0531 case PPRCONTROL:
0532 reg = parport_read_control(port);
0533 if (copy_to_user(argp, ®, sizeof(reg)))
0534 return -EFAULT;
0535 return 0;
0536 case PPYIELD:
0537 parport_yield_blocking(pp->pdev);
0538 return 0;
0539
0540 case PPRELEASE:
0541
0542 info = &pp->pdev->port->ieee1284;
0543 pp->state.mode = info->mode;
0544 pp->state.phase = info->phase;
0545 info->mode = pp->saved_state.mode;
0546 info->phase = pp->saved_state.phase;
0547 parport_release(pp->pdev);
0548 pp->flags &= ~PP_CLAIMED;
0549 return 0;
0550
0551 case PPWCONTROL:
0552 if (copy_from_user(®, argp, sizeof(reg)))
0553 return -EFAULT;
0554 parport_write_control(port, reg);
0555 return 0;
0556
0557 case PPWDATA:
0558 if (copy_from_user(®, argp, sizeof(reg)))
0559 return -EFAULT;
0560 parport_write_data(port, reg);
0561 return 0;
0562
0563 case PPFCONTROL:
0564 if (copy_from_user(&mask, argp,
0565 sizeof(mask)))
0566 return -EFAULT;
0567 if (copy_from_user(®, 1 + (unsigned char __user *) arg,
0568 sizeof(reg)))
0569 return -EFAULT;
0570 parport_frob_control(port, mask, reg);
0571 return 0;
0572
0573 case PPDATADIR:
0574 if (copy_from_user(&mode, argp, sizeof(mode)))
0575 return -EFAULT;
0576 if (mode)
0577 port->ops->data_reverse(port);
0578 else
0579 port->ops->data_forward(port);
0580 return 0;
0581
0582 case PPNEGOT:
0583 if (copy_from_user(&mode, argp, sizeof(mode)))
0584 return -EFAULT;
0585 switch ((ret = parport_negotiate(port, mode))) {
0586 case 0: break;
0587 case -1:
0588 ret = -EIO;
0589 break;
0590 case 1:
0591 ret = -ENXIO;
0592 break;
0593 }
0594 pp_enable_irq(pp);
0595 return ret;
0596
0597 case PPWCTLONIRQ:
0598 if (copy_from_user(®, argp, sizeof(reg)))
0599 return -EFAULT;
0600
0601
0602
0603 pp->irqctl = reg;
0604 pp->irqresponse = 1;
0605 return 0;
0606
0607 case PPCLRIRQ:
0608 ret = atomic_read(&pp->irqc);
0609 if (copy_to_user(argp, &ret, sizeof(ret)))
0610 return -EFAULT;
0611 atomic_sub(ret, &pp->irqc);
0612 return 0;
0613
0614 case PPSETTIME32:
0615 if (copy_from_user(time32, argp, sizeof(time32)))
0616 return -EFAULT;
0617
0618 if ((time32[0] < 0) || (time32[1] < 0))
0619 return -EINVAL;
0620
0621 return pp_set_timeout(pp->pdev, time32[0], time32[1]);
0622
0623 case PPSETTIME64:
0624 if (copy_from_user(time64, argp, sizeof(time64)))
0625 return -EFAULT;
0626
0627 if ((time64[0] < 0) || (time64[1] < 0))
0628 return -EINVAL;
0629
0630 if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
0631 time64[1] >>= 32;
0632
0633 return pp_set_timeout(pp->pdev, time64[0], time64[1]);
0634
0635 case PPGETTIME32:
0636 jiffies_to_timespec64(pp->pdev->timeout, &ts);
0637 time32[0] = ts.tv_sec;
0638 time32[1] = ts.tv_nsec / NSEC_PER_USEC;
0639
0640 if (copy_to_user(argp, time32, sizeof(time32)))
0641 return -EFAULT;
0642
0643 return 0;
0644
0645 case PPGETTIME64:
0646 jiffies_to_timespec64(pp->pdev->timeout, &ts);
0647 time64[0] = ts.tv_sec;
0648 time64[1] = ts.tv_nsec / NSEC_PER_USEC;
0649
0650 if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
0651 time64[1] <<= 32;
0652
0653 if (copy_to_user(argp, time64, sizeof(time64)))
0654 return -EFAULT;
0655
0656 return 0;
0657
0658 default:
0659 dev_dbg(&pp->pdev->dev, "What? (cmd=0x%x)\n", cmd);
0660 return -EINVAL;
0661 }
0662
0663
0664 return 0;
0665 }
0666
0667 static long pp_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
0668 {
0669 long ret;
0670
0671 mutex_lock(&pp_do_mutex);
0672 ret = pp_do_ioctl(file, cmd, arg);
0673 mutex_unlock(&pp_do_mutex);
0674 return ret;
0675 }
0676
0677 static int pp_open(struct inode *inode, struct file *file)
0678 {
0679 unsigned int minor = iminor(inode);
0680 struct pp_struct *pp;
0681
0682 if (minor >= PARPORT_MAX)
0683 return -ENXIO;
0684
0685 pp = kmalloc(sizeof(struct pp_struct), GFP_KERNEL);
0686 if (!pp)
0687 return -ENOMEM;
0688
0689 pp->state.mode = IEEE1284_MODE_COMPAT;
0690 pp->state.phase = init_phase(pp->state.mode);
0691 pp->flags = 0;
0692 pp->irqresponse = 0;
0693 atomic_set(&pp->irqc, 0);
0694 init_waitqueue_head(&pp->irq_wait);
0695
0696
0697
0698
0699
0700 pp->pdev = NULL;
0701 file->private_data = pp;
0702
0703 return 0;
0704 }
0705
0706 static int pp_release(struct inode *inode, struct file *file)
0707 {
0708 unsigned int minor = iminor(inode);
0709 struct pp_struct *pp = file->private_data;
0710 int compat_negot;
0711
0712 compat_negot = 0;
0713 if (!(pp->flags & PP_CLAIMED) && pp->pdev &&
0714 (pp->state.mode != IEEE1284_MODE_COMPAT)) {
0715 struct ieee1284_info *info;
0716
0717
0718 parport_claim_or_block(pp->pdev);
0719 pp->flags |= PP_CLAIMED;
0720 info = &pp->pdev->port->ieee1284;
0721 pp->saved_state.mode = info->mode;
0722 pp->saved_state.phase = info->phase;
0723 info->mode = pp->state.mode;
0724 info->phase = pp->state.phase;
0725 compat_negot = 1;
0726 } else if ((pp->flags & PP_CLAIMED) && pp->pdev &&
0727 (pp->pdev->port->ieee1284.mode != IEEE1284_MODE_COMPAT)) {
0728 compat_negot = 2;
0729 }
0730 if (compat_negot) {
0731 parport_negotiate(pp->pdev->port, IEEE1284_MODE_COMPAT);
0732 dev_dbg(&pp->pdev->dev,
0733 "negotiated back to compatibility mode because user-space forgot\n");
0734 }
0735
0736 if ((pp->flags & PP_CLAIMED) && pp->pdev) {
0737 struct ieee1284_info *info;
0738
0739 info = &pp->pdev->port->ieee1284;
0740 pp->state.mode = info->mode;
0741 pp->state.phase = info->phase;
0742 info->mode = pp->saved_state.mode;
0743 info->phase = pp->saved_state.phase;
0744 parport_release(pp->pdev);
0745 if (compat_negot != 1) {
0746 pr_debug(CHRDEV "%x: released pardevice "
0747 "because user-space forgot\n", minor);
0748 }
0749 }
0750
0751 if (pp->pdev) {
0752 parport_unregister_device(pp->pdev);
0753 ida_simple_remove(&ida_index, pp->index);
0754 pp->pdev = NULL;
0755 pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
0756 }
0757
0758 kfree(pp);
0759
0760 return 0;
0761 }
0762
0763
0764 static __poll_t pp_poll(struct file *file, poll_table *wait)
0765 {
0766 struct pp_struct *pp = file->private_data;
0767 __poll_t mask = 0;
0768
0769 poll_wait(file, &pp->irq_wait, wait);
0770 if (atomic_read(&pp->irqc))
0771 mask |= EPOLLIN | EPOLLRDNORM;
0772
0773 return mask;
0774 }
0775
0776 static struct class *ppdev_class;
0777
0778 static const struct file_operations pp_fops = {
0779 .owner = THIS_MODULE,
0780 .llseek = no_llseek,
0781 .read = pp_read,
0782 .write = pp_write,
0783 .poll = pp_poll,
0784 .unlocked_ioctl = pp_ioctl,
0785 .compat_ioctl = compat_ptr_ioctl,
0786 .open = pp_open,
0787 .release = pp_release,
0788 };
0789
0790 static void pp_attach(struct parport *port)
0791 {
0792 struct device *ret;
0793
0794 if (devices[port->number])
0795 return;
0796
0797 ret = device_create(ppdev_class, port->dev,
0798 MKDEV(PP_MAJOR, port->number), NULL,
0799 "parport%d", port->number);
0800 if (IS_ERR(ret)) {
0801 pr_err("Failed to create device parport%d\n",
0802 port->number);
0803 return;
0804 }
0805 devices[port->number] = ret;
0806 }
0807
0808 static void pp_detach(struct parport *port)
0809 {
0810 if (!devices[port->number])
0811 return;
0812
0813 device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number));
0814 devices[port->number] = NULL;
0815 }
0816
0817 static int pp_probe(struct pardevice *par_dev)
0818 {
0819 struct device_driver *drv = par_dev->dev.driver;
0820 int len = strlen(drv->name);
0821
0822 if (strncmp(par_dev->name, drv->name, len))
0823 return -ENODEV;
0824
0825 return 0;
0826 }
0827
0828 static struct parport_driver pp_driver = {
0829 .name = CHRDEV,
0830 .probe = pp_probe,
0831 .match_port = pp_attach,
0832 .detach = pp_detach,
0833 .devmodel = true,
0834 };
0835
0836 static int __init ppdev_init(void)
0837 {
0838 int err = 0;
0839
0840 if (register_chrdev(PP_MAJOR, CHRDEV, &pp_fops)) {
0841 pr_warn(CHRDEV ": unable to get major %d\n", PP_MAJOR);
0842 return -EIO;
0843 }
0844 ppdev_class = class_create(THIS_MODULE, CHRDEV);
0845 if (IS_ERR(ppdev_class)) {
0846 err = PTR_ERR(ppdev_class);
0847 goto out_chrdev;
0848 }
0849 err = parport_register_driver(&pp_driver);
0850 if (err < 0) {
0851 pr_warn(CHRDEV ": unable to register with parport\n");
0852 goto out_class;
0853 }
0854
0855 pr_info(PP_VERSION "\n");
0856 goto out;
0857
0858 out_class:
0859 class_destroy(ppdev_class);
0860 out_chrdev:
0861 unregister_chrdev(PP_MAJOR, CHRDEV);
0862 out:
0863 return err;
0864 }
0865
0866 static void __exit ppdev_cleanup(void)
0867 {
0868
0869 parport_unregister_driver(&pp_driver);
0870 class_destroy(ppdev_class);
0871 unregister_chrdev(PP_MAJOR, CHRDEV);
0872 }
0873
0874 module_init(ppdev_init);
0875 module_exit(ppdev_cleanup);
0876
0877 MODULE_LICENSE("GPL");
0878 MODULE_ALIAS_CHARDEV_MAJOR(PP_MAJOR);