diff options
Diffstat (limited to 'drivers/usb/class/usblp.c')
-rw-r--r-- | drivers/usb/class/usblp.c | 371 |
1 files changed, 185 insertions, 186 deletions
diff --git a/drivers/usb/class/usblp.c b/drivers/usb/class/usblp.c index 84f9e52327f2..e325162859b0 100644 --- a/drivers/usb/class/usblp.c +++ b/drivers/usb/class/usblp.c | |||
@@ -135,7 +135,7 @@ MFG:HEWLETT-PACKARD;MDL:DESKJET 970C;CMD:MLC,PCL,PML;CLASS:PRINTER;DESCRIPTION:H | |||
135 | * ->lock locks what interrupt accesses. | 135 | * ->lock locks what interrupt accesses. |
136 | */ | 136 | */ |
137 | struct usblp { | 137 | struct usblp { |
138 | struct usb_device *dev; /* USB device */ | 138 | struct usb_device *dev; /* USB device */ |
139 | struct mutex wmut; | 139 | struct mutex wmut; |
140 | struct mutex mut; | 140 | struct mutex mut; |
141 | spinlock_t lock; /* locks rcomplete, wcomplete */ | 141 | spinlock_t lock; /* locks rcomplete, wcomplete */ |
@@ -169,7 +169,8 @@ struct usblp { | |||
169 | }; | 169 | }; |
170 | 170 | ||
171 | #ifdef DEBUG | 171 | #ifdef DEBUG |
172 | static void usblp_dump(struct usblp *usblp) { | 172 | static void usblp_dump(struct usblp *usblp) |
173 | { | ||
173 | int p; | 174 | int p; |
174 | 175 | ||
175 | dbg("usblp=0x%p", usblp); | 176 | dbg("usblp=0x%p", usblp); |
@@ -216,8 +217,8 @@ static const struct quirk_printer_struct quirk_printers[] = { | |||
216 | { 0x03f0, 0x0304, USBLP_QUIRK_BIDIR }, /* HP DeskJet 810C/812C */ | 217 | { 0x03f0, 0x0304, USBLP_QUIRK_BIDIR }, /* HP DeskJet 810C/812C */ |
217 | { 0x03f0, 0x0404, USBLP_QUIRK_BIDIR }, /* HP DeskJet 830C */ | 218 | { 0x03f0, 0x0404, USBLP_QUIRK_BIDIR }, /* HP DeskJet 830C */ |
218 | { 0x03f0, 0x0504, USBLP_QUIRK_BIDIR }, /* HP DeskJet 885C */ | 219 | { 0x03f0, 0x0504, USBLP_QUIRK_BIDIR }, /* HP DeskJet 885C */ |
219 | { 0x03f0, 0x0604, USBLP_QUIRK_BIDIR }, /* HP DeskJet 840C */ | 220 | { 0x03f0, 0x0604, USBLP_QUIRK_BIDIR }, /* HP DeskJet 840C */ |
220 | { 0x03f0, 0x0804, USBLP_QUIRK_BIDIR }, /* HP DeskJet 816C */ | 221 | { 0x03f0, 0x0804, USBLP_QUIRK_BIDIR }, /* HP DeskJet 816C */ |
221 | { 0x03f0, 0x1104, USBLP_QUIRK_BIDIR }, /* HP Deskjet 959C */ | 222 | { 0x03f0, 0x1104, USBLP_QUIRK_BIDIR }, /* HP Deskjet 959C */ |
222 | { 0x0409, 0xefbe, USBLP_QUIRK_BIDIR }, /* NEC Picty900 (HP OEM) */ | 223 | { 0x0409, 0xefbe, USBLP_QUIRK_BIDIR }, /* NEC Picty900 (HP OEM) */ |
223 | { 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */ | 224 | { 0x0409, 0xbef4, USBLP_QUIRK_BIDIR }, /* NEC Picty760 (HP OEM) */ |
@@ -254,9 +255,8 @@ static int usblp_ctrl_msg(struct usblp *usblp, int request, int type, int dir, i | |||
254 | /* High byte has the interface index. | 255 | /* High byte has the interface index. |
255 | Low byte has the alternate setting. | 256 | Low byte has the alternate setting. |
256 | */ | 257 | */ |
257 | if ((request == USBLP_REQ_GET_ID) && (type == USB_TYPE_CLASS)) { | 258 | if ((request == USBLP_REQ_GET_ID) && (type == USB_TYPE_CLASS)) |
258 | index = (usblp->ifnum<<8)|usblp->protocol[usblp->current_protocol].alt_setting; | 259 | index = (usblp->ifnum<<8)|usblp->protocol[usblp->current_protocol].alt_setting; |
259 | } | ||
260 | 260 | ||
261 | retval = usb_control_msg(usblp->dev, | 261 | retval = usb_control_msg(usblp->dev, |
262 | dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0), | 262 | dir ? usb_rcvctrlpipe(usblp->dev, 0) : usb_sndctrlpipe(usblp->dev, 0), |
@@ -372,7 +372,7 @@ static int usblp_check_status(struct usblp *usblp, int err) | |||
372 | return newerr; | 372 | return newerr; |
373 | } | 373 | } |
374 | 374 | ||
375 | static int handle_bidir (struct usblp *usblp) | 375 | static int handle_bidir(struct usblp *usblp) |
376 | { | 376 | { |
377 | if (usblp->bidir && usblp->used) { | 377 | if (usblp->bidir && usblp->used) { |
378 | if (usblp_submit_read(usblp) < 0) | 378 | if (usblp_submit_read(usblp) < 0) |
@@ -395,14 +395,13 @@ static int usblp_open(struct inode *inode, struct file *file) | |||
395 | if (minor < 0) | 395 | if (minor < 0) |
396 | return -ENODEV; | 396 | return -ENODEV; |
397 | 397 | ||
398 | mutex_lock (&usblp_mutex); | 398 | mutex_lock(&usblp_mutex); |
399 | 399 | ||
400 | retval = -ENODEV; | 400 | retval = -ENODEV; |
401 | intf = usb_find_interface(&usblp_driver, minor); | 401 | intf = usb_find_interface(&usblp_driver, minor); |
402 | if (!intf) { | 402 | if (!intf) |
403 | goto out; | 403 | goto out; |
404 | } | 404 | usblp = usb_get_intfdata(intf); |
405 | usblp = usb_get_intfdata (intf); | ||
406 | if (!usblp || !usblp->dev || !usblp->present) | 405 | if (!usblp || !usblp->dev || !usblp->present) |
407 | goto out; | 406 | goto out; |
408 | 407 | ||
@@ -433,18 +432,18 @@ static int usblp_open(struct inode *inode, struct file *file) | |||
433 | retval = -EIO; | 432 | retval = -EIO; |
434 | } | 433 | } |
435 | out: | 434 | out: |
436 | mutex_unlock (&usblp_mutex); | 435 | mutex_unlock(&usblp_mutex); |
437 | return retval; | 436 | return retval; |
438 | } | 437 | } |
439 | 438 | ||
440 | static void usblp_cleanup (struct usblp *usblp) | 439 | static void usblp_cleanup(struct usblp *usblp) |
441 | { | 440 | { |
442 | printk(KERN_INFO "usblp%d: removed\n", usblp->minor); | 441 | printk(KERN_INFO "usblp%d: removed\n", usblp->minor); |
443 | 442 | ||
444 | kfree(usblp->readbuf); | 443 | kfree(usblp->readbuf); |
445 | kfree (usblp->device_id_string); | 444 | kfree(usblp->device_id_string); |
446 | kfree (usblp->statusbuf); | 445 | kfree(usblp->statusbuf); |
447 | kfree (usblp); | 446 | kfree(usblp); |
448 | } | 447 | } |
449 | 448 | ||
450 | static void usblp_unlink_urbs(struct usblp *usblp) | 449 | static void usblp_unlink_urbs(struct usblp *usblp) |
@@ -458,14 +457,14 @@ static int usblp_release(struct inode *inode, struct file *file) | |||
458 | 457 | ||
459 | usblp->flags &= ~LP_ABORT; | 458 | usblp->flags &= ~LP_ABORT; |
460 | 459 | ||
461 | mutex_lock (&usblp_mutex); | 460 | mutex_lock(&usblp_mutex); |
462 | usblp->used = 0; | 461 | usblp->used = 0; |
463 | if (usblp->present) { | 462 | if (usblp->present) { |
464 | usblp_unlink_urbs(usblp); | 463 | usblp_unlink_urbs(usblp); |
465 | usb_autopm_put_interface(usblp->intf); | 464 | usb_autopm_put_interface(usblp->intf); |
466 | } else /* finish cleanup from disconnect */ | 465 | } else /* finish cleanup from disconnect */ |
467 | usblp_cleanup (usblp); | 466 | usblp_cleanup(usblp); |
468 | mutex_unlock (&usblp_mutex); | 467 | mutex_unlock(&usblp_mutex); |
469 | return 0; | 468 | return 0; |
470 | } | 469 | } |
471 | 470 | ||
@@ -495,190 +494,190 @@ static long usblp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
495 | int twoints[2]; | 494 | int twoints[2]; |
496 | int retval = 0; | 495 | int retval = 0; |
497 | 496 | ||
498 | mutex_lock (&usblp->mut); | 497 | mutex_lock(&usblp->mut); |
499 | if (!usblp->present) { | 498 | if (!usblp->present) { |
500 | retval = -ENODEV; | 499 | retval = -ENODEV; |
501 | goto done; | 500 | goto done; |
502 | } | 501 | } |
503 | 502 | ||
504 | dbg("usblp_ioctl: cmd=0x%x (%c nr=%d len=%d dir=%d)", cmd, _IOC_TYPE(cmd), | 503 | dbg("usblp_ioctl: cmd=0x%x (%c nr=%d len=%d dir=%d)", cmd, _IOC_TYPE(cmd), |
505 | _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd) ); | 504 | _IOC_NR(cmd), _IOC_SIZE(cmd), _IOC_DIR(cmd)); |
506 | 505 | ||
507 | if (_IOC_TYPE(cmd) == 'P') /* new-style ioctl number */ | 506 | if (_IOC_TYPE(cmd) == 'P') /* new-style ioctl number */ |
508 | 507 | ||
509 | switch (_IOC_NR(cmd)) { | 508 | switch (_IOC_NR(cmd)) { |
510 | 509 | ||
511 | case IOCNR_GET_DEVICE_ID: /* get the DEVICE_ID string */ | 510 | case IOCNR_GET_DEVICE_ID: /* get the DEVICE_ID string */ |
512 | if (_IOC_DIR(cmd) != _IOC_READ) { | 511 | if (_IOC_DIR(cmd) != _IOC_READ) { |
513 | retval = -EINVAL; | 512 | retval = -EINVAL; |
514 | goto done; | 513 | goto done; |
515 | } | 514 | } |
516 | 515 | ||
517 | length = usblp_cache_device_id_string(usblp); | 516 | length = usblp_cache_device_id_string(usblp); |
518 | if (length < 0) { | 517 | if (length < 0) { |
519 | retval = length; | 518 | retval = length; |
520 | goto done; | 519 | goto done; |
521 | } | 520 | } |
522 | if (length > _IOC_SIZE(cmd)) | 521 | if (length > _IOC_SIZE(cmd)) |
523 | length = _IOC_SIZE(cmd); /* truncate */ | 522 | length = _IOC_SIZE(cmd); /* truncate */ |
524 | 523 | ||
525 | if (copy_to_user((void __user *) arg, | 524 | if (copy_to_user((void __user *) arg, |
526 | usblp->device_id_string, | 525 | usblp->device_id_string, |
527 | (unsigned long) length)) { | 526 | (unsigned long) length)) { |
528 | retval = -EFAULT; | 527 | retval = -EFAULT; |
529 | goto done; | 528 | goto done; |
530 | } | 529 | } |
531 | 530 | ||
532 | break; | 531 | break; |
533 | 532 | ||
534 | case IOCNR_GET_PROTOCOLS: | 533 | case IOCNR_GET_PROTOCOLS: |
535 | if (_IOC_DIR(cmd) != _IOC_READ || | 534 | if (_IOC_DIR(cmd) != _IOC_READ || |
536 | _IOC_SIZE(cmd) < sizeof(twoints)) { | 535 | _IOC_SIZE(cmd) < sizeof(twoints)) { |
537 | retval = -EINVAL; | 536 | retval = -EINVAL; |
538 | goto done; | 537 | goto done; |
539 | } | 538 | } |
540 | 539 | ||
541 | twoints[0] = usblp->current_protocol; | 540 | twoints[0] = usblp->current_protocol; |
542 | twoints[1] = 0; | 541 | twoints[1] = 0; |
543 | for (i = USBLP_FIRST_PROTOCOL; | 542 | for (i = USBLP_FIRST_PROTOCOL; |
544 | i <= USBLP_LAST_PROTOCOL; i++) { | 543 | i <= USBLP_LAST_PROTOCOL; i++) { |
545 | if (usblp->protocol[i].alt_setting >= 0) | 544 | if (usblp->protocol[i].alt_setting >= 0) |
546 | twoints[1] |= (1<<i); | 545 | twoints[1] |= (1<<i); |
547 | } | 546 | } |
548 | 547 | ||
549 | if (copy_to_user((void __user *)arg, | 548 | if (copy_to_user((void __user *)arg, |
550 | (unsigned char *)twoints, | 549 | (unsigned char *)twoints, |
551 | sizeof(twoints))) { | 550 | sizeof(twoints))) { |
552 | retval = -EFAULT; | 551 | retval = -EFAULT; |
553 | goto done; | 552 | goto done; |
554 | } | 553 | } |
555 | 554 | ||
556 | break; | 555 | break; |
557 | 556 | ||
558 | case IOCNR_SET_PROTOCOL: | 557 | case IOCNR_SET_PROTOCOL: |
559 | if (_IOC_DIR(cmd) != _IOC_WRITE) { | 558 | if (_IOC_DIR(cmd) != _IOC_WRITE) { |
560 | retval = -EINVAL; | 559 | retval = -EINVAL; |
561 | goto done; | 560 | goto done; |
562 | } | 561 | } |
563 | 562 | ||
564 | #ifdef DEBUG | 563 | #ifdef DEBUG |
565 | if (arg == -10) { | 564 | if (arg == -10) { |
566 | usblp_dump(usblp); | 565 | usblp_dump(usblp); |
567 | break; | 566 | break; |
568 | } | 567 | } |
569 | #endif | 568 | #endif |
570 | 569 | ||
571 | usblp_unlink_urbs(usblp); | 570 | usblp_unlink_urbs(usblp); |
572 | retval = usblp_set_protocol(usblp, arg); | 571 | retval = usblp_set_protocol(usblp, arg); |
573 | if (retval < 0) { | 572 | if (retval < 0) { |
574 | usblp_set_protocol(usblp, | 573 | usblp_set_protocol(usblp, |
575 | usblp->current_protocol); | 574 | usblp->current_protocol); |
576 | } | 575 | } |
577 | break; | 576 | break; |
578 | 577 | ||
579 | case IOCNR_HP_SET_CHANNEL: | 578 | case IOCNR_HP_SET_CHANNEL: |
580 | if (_IOC_DIR(cmd) != _IOC_WRITE || | 579 | if (_IOC_DIR(cmd) != _IOC_WRITE || |
581 | le16_to_cpu(usblp->dev->descriptor.idVendor) != 0x03F0 || | 580 | le16_to_cpu(usblp->dev->descriptor.idVendor) != 0x03F0 || |
582 | usblp->quirks & USBLP_QUIRK_BIDIR) { | 581 | usblp->quirks & USBLP_QUIRK_BIDIR) { |
583 | retval = -EINVAL; | 582 | retval = -EINVAL; |
584 | goto done; | 583 | goto done; |
585 | } | 584 | } |
586 | 585 | ||
587 | err = usblp_hp_channel_change_request(usblp, | 586 | err = usblp_hp_channel_change_request(usblp, |
588 | arg, &newChannel); | 587 | arg, &newChannel); |
589 | if (err < 0) { | 588 | if (err < 0) { |
590 | dev_err(&usblp->dev->dev, | 589 | dev_err(&usblp->dev->dev, |
591 | "usblp%d: error = %d setting " | 590 | "usblp%d: error = %d setting " |
592 | "HP channel\n", | 591 | "HP channel\n", |
593 | usblp->minor, err); | 592 | usblp->minor, err); |
594 | retval = -EIO; | 593 | retval = -EIO; |
595 | goto done; | 594 | goto done; |
596 | } | 595 | } |
597 | 596 | ||
598 | dbg("usblp%d requested/got HP channel %ld/%d", | 597 | dbg("usblp%d requested/got HP channel %ld/%d", |
599 | usblp->minor, arg, newChannel); | 598 | usblp->minor, arg, newChannel); |
600 | break; | 599 | break; |
601 | 600 | ||
602 | case IOCNR_GET_BUS_ADDRESS: | 601 | case IOCNR_GET_BUS_ADDRESS: |
603 | if (_IOC_DIR(cmd) != _IOC_READ || | 602 | if (_IOC_DIR(cmd) != _IOC_READ || |
604 | _IOC_SIZE(cmd) < sizeof(twoints)) { | 603 | _IOC_SIZE(cmd) < sizeof(twoints)) { |
605 | retval = -EINVAL; | 604 | retval = -EINVAL; |
606 | goto done; | 605 | goto done; |
607 | } | 606 | } |
608 | 607 | ||
609 | twoints[0] = usblp->dev->bus->busnum; | 608 | twoints[0] = usblp->dev->bus->busnum; |
610 | twoints[1] = usblp->dev->devnum; | 609 | twoints[1] = usblp->dev->devnum; |
611 | if (copy_to_user((void __user *)arg, | 610 | if (copy_to_user((void __user *)arg, |
612 | (unsigned char *)twoints, | 611 | (unsigned char *)twoints, |
613 | sizeof(twoints))) { | 612 | sizeof(twoints))) { |
614 | retval = -EFAULT; | 613 | retval = -EFAULT; |
615 | goto done; | 614 | goto done; |
616 | } | 615 | } |
617 | 616 | ||
618 | dbg("usblp%d is bus=%d, device=%d", | 617 | dbg("usblp%d is bus=%d, device=%d", |
619 | usblp->minor, twoints[0], twoints[1]); | 618 | usblp->minor, twoints[0], twoints[1]); |
620 | break; | 619 | break; |
621 | 620 | ||
622 | case IOCNR_GET_VID_PID: | 621 | case IOCNR_GET_VID_PID: |
623 | if (_IOC_DIR(cmd) != _IOC_READ || | 622 | if (_IOC_DIR(cmd) != _IOC_READ || |
624 | _IOC_SIZE(cmd) < sizeof(twoints)) { | 623 | _IOC_SIZE(cmd) < sizeof(twoints)) { |
625 | retval = -EINVAL; | 624 | retval = -EINVAL; |
626 | goto done; | 625 | goto done; |
627 | } | 626 | } |
628 | 627 | ||
629 | twoints[0] = le16_to_cpu(usblp->dev->descriptor.idVendor); | 628 | twoints[0] = le16_to_cpu(usblp->dev->descriptor.idVendor); |
630 | twoints[1] = le16_to_cpu(usblp->dev->descriptor.idProduct); | 629 | twoints[1] = le16_to_cpu(usblp->dev->descriptor.idProduct); |
631 | if (copy_to_user((void __user *)arg, | 630 | if (copy_to_user((void __user *)arg, |
632 | (unsigned char *)twoints, | 631 | (unsigned char *)twoints, |
633 | sizeof(twoints))) { | 632 | sizeof(twoints))) { |
634 | retval = -EFAULT; | 633 | retval = -EFAULT; |
635 | goto done; | 634 | goto done; |
636 | } | 635 | } |
637 | 636 | ||
638 | dbg("usblp%d is VID=0x%4.4X, PID=0x%4.4X", | 637 | dbg("usblp%d is VID=0x%4.4X, PID=0x%4.4X", |
639 | usblp->minor, twoints[0], twoints[1]); | 638 | usblp->minor, twoints[0], twoints[1]); |
640 | break; | 639 | break; |
641 | 640 | ||
642 | case IOCNR_SOFT_RESET: | 641 | case IOCNR_SOFT_RESET: |
643 | if (_IOC_DIR(cmd) != _IOC_NONE) { | 642 | if (_IOC_DIR(cmd) != _IOC_NONE) { |
644 | retval = -EINVAL; | 643 | retval = -EINVAL; |
645 | goto done; | 644 | goto done; |
646 | } | 645 | } |
647 | retval = usblp_reset(usblp); | 646 | retval = usblp_reset(usblp); |
648 | break; | 647 | break; |
649 | default: | 648 | default: |
650 | retval = -ENOTTY; | 649 | retval = -ENOTTY; |
651 | } | 650 | } |
652 | else /* old-style ioctl value */ | 651 | else /* old-style ioctl value */ |
653 | switch (cmd) { | 652 | switch (cmd) { |
654 | 653 | ||
655 | case LPGETSTATUS: | 654 | case LPGETSTATUS: |
656 | if ((retval = usblp_read_status(usblp, usblp->statusbuf))) { | 655 | if ((retval = usblp_read_status(usblp, usblp->statusbuf))) { |
657 | if (printk_ratelimit()) | 656 | if (printk_ratelimit()) |
658 | printk(KERN_ERR "usblp%d:" | 657 | printk(KERN_ERR "usblp%d:" |
659 | "failed reading printer status (%d)\n", | 658 | "failed reading printer status (%d)\n", |
660 | usblp->minor, retval); | 659 | usblp->minor, retval); |
661 | retval = -EIO; | 660 | retval = -EIO; |
662 | goto done; | 661 | goto done; |
663 | } | 662 | } |
664 | status = *usblp->statusbuf; | 663 | status = *usblp->statusbuf; |
665 | if (copy_to_user ((void __user *)arg, &status, sizeof(int))) | 664 | if (copy_to_user((void __user *)arg, &status, sizeof(int))) |
666 | retval = -EFAULT; | 665 | retval = -EFAULT; |
667 | break; | 666 | break; |
668 | 667 | ||
669 | case LPABORT: | 668 | case LPABORT: |
670 | if (arg) | 669 | if (arg) |
671 | usblp->flags |= LP_ABORT; | 670 | usblp->flags |= LP_ABORT; |
672 | else | 671 | else |
673 | usblp->flags &= ~LP_ABORT; | 672 | usblp->flags &= ~LP_ABORT; |
674 | break; | 673 | break; |
675 | 674 | ||
676 | default: | 675 | default: |
677 | retval = -ENOTTY; | 676 | retval = -ENOTTY; |
678 | } | 677 | } |
679 | 678 | ||
680 | done: | 679 | done: |
681 | mutex_unlock (&usblp->mut); | 680 | mutex_unlock(&usblp->mut); |
682 | return retval; | 681 | return retval; |
683 | } | 682 | } |
684 | 683 | ||
@@ -840,7 +839,7 @@ static ssize_t usblp_read(struct file *file, char __user *buffer, size_t len, lo | |||
840 | } | 839 | } |
841 | 840 | ||
842 | done: | 841 | done: |
843 | mutex_unlock (&usblp->mut); | 842 | mutex_unlock(&usblp->mut); |
844 | return count; | 843 | return count; |
845 | } | 844 | } |
846 | 845 | ||
@@ -1023,7 +1022,7 @@ raise_urb: | |||
1023 | * while you are sending print data, and you don't try to query the | 1022 | * while you are sending print data, and you don't try to query the |
1024 | * printer status every couple of milliseconds, you will probably be OK. | 1023 | * printer status every couple of milliseconds, you will probably be OK. |
1025 | */ | 1024 | */ |
1026 | static unsigned int usblp_quirks (__u16 vendor, __u16 product) | 1025 | static unsigned int usblp_quirks(__u16 vendor, __u16 product) |
1027 | { | 1026 | { |
1028 | int i; | 1027 | int i; |
1029 | 1028 | ||
@@ -1031,7 +1030,7 @@ static unsigned int usblp_quirks (__u16 vendor, __u16 product) | |||
1031 | if (vendor == quirk_printers[i].vendorId && | 1030 | if (vendor == quirk_printers[i].vendorId && |
1032 | product == quirk_printers[i].productId) | 1031 | product == quirk_printers[i].productId) |
1033 | return quirk_printers[i].quirks; | 1032 | return quirk_printers[i].quirks; |
1034 | } | 1033 | } |
1035 | return 0; | 1034 | return 0; |
1036 | } | 1035 | } |
1037 | 1036 | ||
@@ -1061,7 +1060,7 @@ static struct usb_class_driver usblp_class = { | |||
1061 | static ssize_t usblp_show_ieee1284_id(struct device *dev, struct device_attribute *attr, char *buf) | 1060 | static ssize_t usblp_show_ieee1284_id(struct device *dev, struct device_attribute *attr, char *buf) |
1062 | { | 1061 | { |
1063 | struct usb_interface *intf = to_usb_interface(dev); | 1062 | struct usb_interface *intf = to_usb_interface(dev); |
1064 | struct usblp *usblp = usb_get_intfdata (intf); | 1063 | struct usblp *usblp = usb_get_intfdata(intf); |
1065 | 1064 | ||
1066 | if (usblp->device_id_string[0] == 0 && | 1065 | if (usblp->device_id_string[0] == 0 && |
1067 | usblp->device_id_string[1] == 0) | 1066 | usblp->device_id_string[1] == 0) |
@@ -1075,7 +1074,7 @@ static DEVICE_ATTR(ieee1284_id, S_IRUGO, usblp_show_ieee1284_id, NULL); | |||
1075 | static int usblp_probe(struct usb_interface *intf, | 1074 | static int usblp_probe(struct usb_interface *intf, |
1076 | const struct usb_device_id *id) | 1075 | const struct usb_device_id *id) |
1077 | { | 1076 | { |
1078 | struct usb_device *dev = interface_to_usbdev (intf); | 1077 | struct usb_device *dev = interface_to_usbdev(intf); |
1079 | struct usblp *usblp; | 1078 | struct usblp *usblp; |
1080 | int protocol; | 1079 | int protocol; |
1081 | int retval; | 1080 | int retval; |
@@ -1089,7 +1088,7 @@ static int usblp_probe(struct usb_interface *intf, | |||
1089 | } | 1088 | } |
1090 | usblp->dev = dev; | 1089 | usblp->dev = dev; |
1091 | mutex_init(&usblp->wmut); | 1090 | mutex_init(&usblp->wmut); |
1092 | mutex_init (&usblp->mut); | 1091 | mutex_init(&usblp->mut); |
1093 | spin_lock_init(&usblp->lock); | 1092 | spin_lock_init(&usblp->lock); |
1094 | init_waitqueue_head(&usblp->rwait); | 1093 | init_waitqueue_head(&usblp->rwait); |
1095 | init_waitqueue_head(&usblp->wwait); | 1094 | init_waitqueue_head(&usblp->wwait); |
@@ -1153,7 +1152,7 @@ static int usblp_probe(struct usb_interface *intf, | |||
1153 | usblp_check_status(usblp, 0); | 1152 | usblp_check_status(usblp, 0); |
1154 | #endif | 1153 | #endif |
1155 | 1154 | ||
1156 | usb_set_intfdata (intf, usblp); | 1155 | usb_set_intfdata(intf, usblp); |
1157 | 1156 | ||
1158 | usblp->present = 1; | 1157 | usblp->present = 1; |
1159 | 1158 | ||
@@ -1177,7 +1176,7 @@ static int usblp_probe(struct usb_interface *intf, | |||
1177 | return 0; | 1176 | return 0; |
1178 | 1177 | ||
1179 | abort_intfdata: | 1178 | abort_intfdata: |
1180 | usb_set_intfdata (intf, NULL); | 1179 | usb_set_intfdata(intf, NULL); |
1181 | device_remove_file(&intf->dev, &dev_attr_ieee1284_id); | 1180 | device_remove_file(&intf->dev, &dev_attr_ieee1284_id); |
1182 | abort: | 1181 | abort: |
1183 | kfree(usblp->readbuf); | 1182 | kfree(usblp->readbuf); |
@@ -1340,35 +1339,35 @@ static int usblp_cache_device_id_string(struct usblp *usblp) | |||
1340 | 1339 | ||
1341 | static void usblp_disconnect(struct usb_interface *intf) | 1340 | static void usblp_disconnect(struct usb_interface *intf) |
1342 | { | 1341 | { |
1343 | struct usblp *usblp = usb_get_intfdata (intf); | 1342 | struct usblp *usblp = usb_get_intfdata(intf); |
1344 | 1343 | ||
1345 | usb_deregister_dev(intf, &usblp_class); | 1344 | usb_deregister_dev(intf, &usblp_class); |
1346 | 1345 | ||
1347 | if (!usblp || !usblp->dev) { | 1346 | if (!usblp || !usblp->dev) { |
1348 | dev_err(&intf->dev, "bogus disconnect\n"); | 1347 | dev_err(&intf->dev, "bogus disconnect\n"); |
1349 | BUG (); | 1348 | BUG(); |
1350 | } | 1349 | } |
1351 | 1350 | ||
1352 | device_remove_file(&intf->dev, &dev_attr_ieee1284_id); | 1351 | device_remove_file(&intf->dev, &dev_attr_ieee1284_id); |
1353 | 1352 | ||
1354 | mutex_lock (&usblp_mutex); | 1353 | mutex_lock(&usblp_mutex); |
1355 | mutex_lock (&usblp->mut); | 1354 | mutex_lock(&usblp->mut); |
1356 | usblp->present = 0; | 1355 | usblp->present = 0; |
1357 | wake_up(&usblp->wwait); | 1356 | wake_up(&usblp->wwait); |
1358 | wake_up(&usblp->rwait); | 1357 | wake_up(&usblp->rwait); |
1359 | usb_set_intfdata (intf, NULL); | 1358 | usb_set_intfdata(intf, NULL); |
1360 | 1359 | ||
1361 | usblp_unlink_urbs(usblp); | 1360 | usblp_unlink_urbs(usblp); |
1362 | mutex_unlock (&usblp->mut); | 1361 | mutex_unlock(&usblp->mut); |
1363 | 1362 | ||
1364 | if (!usblp->used) | 1363 | if (!usblp->used) |
1365 | usblp_cleanup (usblp); | 1364 | usblp_cleanup(usblp); |
1366 | mutex_unlock (&usblp_mutex); | 1365 | mutex_unlock(&usblp_mutex); |
1367 | } | 1366 | } |
1368 | 1367 | ||
1369 | static int usblp_suspend(struct usb_interface *intf, pm_message_t message) | 1368 | static int usblp_suspend(struct usb_interface *intf, pm_message_t message) |
1370 | { | 1369 | { |
1371 | struct usblp *usblp = usb_get_intfdata (intf); | 1370 | struct usblp *usblp = usb_get_intfdata(intf); |
1372 | 1371 | ||
1373 | usblp_unlink_urbs(usblp); | 1372 | usblp_unlink_urbs(usblp); |
1374 | #if 0 /* XXX Do we want this? What if someone is reading, should we fail? */ | 1373 | #if 0 /* XXX Do we want this? What if someone is reading, should we fail? */ |
@@ -1382,10 +1381,10 @@ static int usblp_suspend(struct usb_interface *intf, pm_message_t message) | |||
1382 | 1381 | ||
1383 | static int usblp_resume(struct usb_interface *intf) | 1382 | static int usblp_resume(struct usb_interface *intf) |
1384 | { | 1383 | { |
1385 | struct usblp *usblp = usb_get_intfdata (intf); | 1384 | struct usblp *usblp = usb_get_intfdata(intf); |
1386 | int r; | 1385 | int r; |
1387 | 1386 | ||
1388 | r = handle_bidir (usblp); | 1387 | r = handle_bidir(usblp); |
1389 | 1388 | ||
1390 | return r; | 1389 | return r; |
1391 | } | 1390 | } |
@@ -1401,7 +1400,7 @@ static const struct usb_device_id usblp_ids[] = { | |||
1401 | { } /* Terminating entry */ | 1400 | { } /* Terminating entry */ |
1402 | }; | 1401 | }; |
1403 | 1402 | ||
1404 | MODULE_DEVICE_TABLE (usb, usblp_ids); | 1403 | MODULE_DEVICE_TABLE(usb, usblp_ids); |
1405 | 1404 | ||
1406 | static struct usb_driver usblp_driver = { | 1405 | static struct usb_driver usblp_driver = { |
1407 | .name = "usblp", | 1406 | .name = "usblp", |
@@ -1426,8 +1425,8 @@ static void __exit usblp_exit(void) | |||
1426 | module_init(usblp_init); | 1425 | module_init(usblp_init); |
1427 | module_exit(usblp_exit); | 1426 | module_exit(usblp_exit); |
1428 | 1427 | ||
1429 | MODULE_AUTHOR( DRIVER_AUTHOR ); | 1428 | MODULE_AUTHOR(DRIVER_AUTHOR); |
1430 | MODULE_DESCRIPTION( DRIVER_DESC ); | 1429 | MODULE_DESCRIPTION(DRIVER_DESC); |
1431 | module_param(proto_bias, int, S_IRUGO | S_IWUSR); | 1430 | module_param(proto_bias, int, S_IRUGO | S_IWUSR); |
1432 | MODULE_PARM_DESC(proto_bias, "Favourite protocol number"); | 1431 | MODULE_PARM_DESC(proto_bias, "Favourite protocol number"); |
1433 | MODULE_LICENSE("GPL"); | 1432 | MODULE_LICENSE("GPL"); |