diff options
author | Sean Young <sean@mess.org> | 2014-01-20 17:10:44 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-02-04 14:35:35 -0500 |
commit | 6b4a16c36400143efe4b693bbdf65c0367b7e1ac (patch) | |
tree | b167f35360420c6c7ff7efe865af68c0ffe215aa /drivers/media/rc | |
parent | 776eced0e336f88fdbe4374306de1f8acaeffcc4 (diff) |
[media] mceusb: improve error logging
A number of recent bug reports involve usb_submit_urb() failing which was
only reported with debug parameter on. In addition, remove custom debug
function.
[m.chehab@samsung.com: patch rebased, as one of the patches on this
series need changes]
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/rc')
-rw-r--r-- | drivers/media/rc/mceusb.c | 182 |
1 files changed, 85 insertions, 97 deletions
diff --git a/drivers/media/rc/mceusb.c b/drivers/media/rc/mceusb.c index a25bb1581e46..c01b4c1f64ca 100644 --- a/drivers/media/rc/mceusb.c +++ b/drivers/media/rc/mceusb.c | |||
@@ -84,7 +84,7 @@ | |||
84 | #define MCE_PORT_IR 0x4 /* (0x4 << 5) | MCE_CMD = 0x9f */ | 84 | #define MCE_PORT_IR 0x4 /* (0x4 << 5) | MCE_CMD = 0x9f */ |
85 | #define MCE_PORT_SYS 0x7 /* (0x7 << 5) | MCE_CMD = 0xff */ | 85 | #define MCE_PORT_SYS 0x7 /* (0x7 << 5) | MCE_CMD = 0xff */ |
86 | #define MCE_PORT_SER 0x6 /* 0xc0 thru 0xdf flush & 0x1f bytes */ | 86 | #define MCE_PORT_SER 0x6 /* 0xc0 thru 0xdf flush & 0x1f bytes */ |
87 | #define MCE_PORT_MASK 0xe0 /* Mask out command bits */ | 87 | #define MCE_PORT_MASK 0xe0 /* Mask out command bits */ |
88 | 88 | ||
89 | /* Command port headers */ | 89 | /* Command port headers */ |
90 | #define MCE_CMD_PORT_IR 0x9f /* IR-related cmd/rsp */ | 90 | #define MCE_CMD_PORT_IR 0x9f /* IR-related cmd/rsp */ |
@@ -153,19 +153,6 @@ | |||
153 | #define MCE_COMMAND_IRDATA 0x80 | 153 | #define MCE_COMMAND_IRDATA 0x80 |
154 | #define MCE_PACKET_LENGTH_MASK 0x1f /* Packet length mask */ | 154 | #define MCE_PACKET_LENGTH_MASK 0x1f /* Packet length mask */ |
155 | 155 | ||
156 | /* module parameters */ | ||
157 | #ifdef CONFIG_USB_DEBUG | ||
158 | static bool debug = 1; | ||
159 | #else | ||
160 | static bool debug; | ||
161 | #endif | ||
162 | |||
163 | #define mce_dbg(dev, fmt, ...) \ | ||
164 | do { \ | ||
165 | if (debug) \ | ||
166 | dev_info(dev, fmt, ## __VA_ARGS__); \ | ||
167 | } while (0) | ||
168 | |||
169 | /* general constants */ | 156 | /* general constants */ |
170 | #define SEND_FLAG_IN_PROGRESS 1 | 157 | #define SEND_FLAG_IN_PROGRESS 1 |
171 | #define SEND_FLAG_COMPLETE 2 | 158 | #define SEND_FLAG_COMPLETE 2 |
@@ -541,16 +528,13 @@ static int mceusb_cmd_datasize(u8 cmd, u8 subcmd) | |||
541 | static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | 528 | static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, |
542 | int offset, int len, bool out) | 529 | int offset, int len, bool out) |
543 | { | 530 | { |
544 | char codes[USB_BUFLEN * 3 + 1]; | 531 | #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) |
545 | char inout[9]; | 532 | char *inout; |
546 | u8 cmd, subcmd, data1, data2, data3, data4; | 533 | u8 cmd, subcmd, data1, data2, data3, data4; |
547 | struct device *dev = ir->dev; | 534 | struct device *dev = ir->dev; |
548 | int i, start, skip = 0; | 535 | int start, skip = 0; |
549 | u32 carrier, period; | 536 | u32 carrier, period; |
550 | 537 | ||
551 | if (!debug) | ||
552 | return; | ||
553 | |||
554 | /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ | 538 | /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ |
555 | if (ir->flags.microsoft_gen1 && !out && !offset) | 539 | if (ir->flags.microsoft_gen1 && !out && !offset) |
556 | skip = 2; | 540 | skip = 2; |
@@ -558,16 +542,10 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
558 | if (len <= skip) | 542 | if (len <= skip) |
559 | return; | 543 | return; |
560 | 544 | ||
561 | for (i = 0; i < len && i < USB_BUFLEN; i++) | 545 | dev_dbg(dev, "%cx data: %*ph (length=%d)", |
562 | snprintf(codes + i * 3, 4, "%02x ", buf[i + offset] & 0xff); | 546 | (out ? 't' : 'r'), min(len, USB_BUFLEN), buf, len); |
563 | |||
564 | dev_info(dev, "%sx data: %s(length=%d)\n", | ||
565 | (out ? "t" : "r"), codes, len); | ||
566 | 547 | ||
567 | if (out) | 548 | inout = out ? "Request" : "Got"; |
568 | strcpy(inout, "Request\0"); | ||
569 | else | ||
570 | strcpy(inout, "Got\0"); | ||
571 | 549 | ||
572 | start = offset + skip; | 550 | start = offset + skip; |
573 | cmd = buf[start] & 0xff; | 551 | cmd = buf[start] & 0xff; |
@@ -583,50 +561,50 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
583 | break; | 561 | break; |
584 | if ((subcmd == MCE_CMD_PORT_SYS) && | 562 | if ((subcmd == MCE_CMD_PORT_SYS) && |
585 | (data1 == MCE_CMD_RESUME)) | 563 | (data1 == MCE_CMD_RESUME)) |
586 | dev_info(dev, "Device resume requested\n"); | 564 | dev_dbg(dev, "Device resume requested"); |
587 | else | 565 | else |
588 | dev_info(dev, "Unknown command 0x%02x 0x%02x\n", | 566 | dev_dbg(dev, "Unknown command 0x%02x 0x%02x", |
589 | cmd, subcmd); | 567 | cmd, subcmd); |
590 | break; | 568 | break; |
591 | case MCE_CMD_PORT_SYS: | 569 | case MCE_CMD_PORT_SYS: |
592 | switch (subcmd) { | 570 | switch (subcmd) { |
593 | case MCE_RSP_EQEMVER: | 571 | case MCE_RSP_EQEMVER: |
594 | if (!out) | 572 | if (!out) |
595 | dev_info(dev, "Emulator interface version %x\n", | 573 | dev_dbg(dev, "Emulator interface version %x", |
596 | data1); | 574 | data1); |
597 | break; | 575 | break; |
598 | case MCE_CMD_G_REVISION: | 576 | case MCE_CMD_G_REVISION: |
599 | if (len == 2) | 577 | if (len == 2) |
600 | dev_info(dev, "Get hw/sw rev?\n"); | 578 | dev_dbg(dev, "Get hw/sw rev?"); |
601 | else | 579 | else |
602 | dev_info(dev, "hw/sw rev 0x%02x 0x%02x " | 580 | dev_dbg(dev, "hw/sw rev 0x%02x 0x%02x 0x%02x 0x%02x", |
603 | "0x%02x 0x%02x\n", data1, data2, | 581 | data1, data2, |
604 | buf[start + 4], buf[start + 5]); | 582 | buf[start + 4], buf[start + 5]); |
605 | break; | 583 | break; |
606 | case MCE_CMD_RESUME: | 584 | case MCE_CMD_RESUME: |
607 | dev_info(dev, "Device resume requested\n"); | 585 | dev_dbg(dev, "Device resume requested"); |
608 | break; | 586 | break; |
609 | case MCE_RSP_CMD_ILLEGAL: | 587 | case MCE_RSP_CMD_ILLEGAL: |
610 | dev_info(dev, "Illegal PORT_SYS command\n"); | 588 | dev_dbg(dev, "Illegal PORT_SYS command"); |
611 | break; | 589 | break; |
612 | case MCE_RSP_EQWAKEVERSION: | 590 | case MCE_RSP_EQWAKEVERSION: |
613 | if (!out) | 591 | if (!out) |
614 | dev_info(dev, "Wake version, proto: 0x%02x, " | 592 | dev_dbg(dev, "Wake version, proto: 0x%02x, " |
615 | "payload: 0x%02x, address: 0x%02x, " | 593 | "payload: 0x%02x, address: 0x%02x, " |
616 | "version: 0x%02x\n", | 594 | "version: 0x%02x", |
617 | data1, data2, data3, data4); | 595 | data1, data2, data3, data4); |
618 | break; | 596 | break; |
619 | case MCE_RSP_GETPORTSTATUS: | 597 | case MCE_RSP_GETPORTSTATUS: |
620 | if (!out) | 598 | if (!out) |
621 | /* We use data1 + 1 here, to match hw labels */ | 599 | /* We use data1 + 1 here, to match hw labels */ |
622 | dev_info(dev, "TX port %d: blaster is%s connected\n", | 600 | dev_dbg(dev, "TX port %d: blaster is%s connected", |
623 | data1 + 1, data4 ? " not" : ""); | 601 | data1 + 1, data4 ? " not" : ""); |
624 | break; | 602 | break; |
625 | case MCE_CMD_FLASHLED: | 603 | case MCE_CMD_FLASHLED: |
626 | dev_info(dev, "Attempting to flash LED\n"); | 604 | dev_dbg(dev, "Attempting to flash LED"); |
627 | break; | 605 | break; |
628 | default: | 606 | default: |
629 | dev_info(dev, "Unknown command 0x%02x 0x%02x\n", | 607 | dev_dbg(dev, "Unknown command 0x%02x 0x%02x", |
630 | cmd, subcmd); | 608 | cmd, subcmd); |
631 | break; | 609 | break; |
632 | } | 610 | } |
@@ -634,13 +612,13 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
634 | case MCE_CMD_PORT_IR: | 612 | case MCE_CMD_PORT_IR: |
635 | switch (subcmd) { | 613 | switch (subcmd) { |
636 | case MCE_CMD_SIG_END: | 614 | case MCE_CMD_SIG_END: |
637 | dev_info(dev, "End of signal\n"); | 615 | dev_dbg(dev, "End of signal"); |
638 | break; | 616 | break; |
639 | case MCE_CMD_PING: | 617 | case MCE_CMD_PING: |
640 | dev_info(dev, "Ping\n"); | 618 | dev_dbg(dev, "Ping"); |
641 | break; | 619 | break; |
642 | case MCE_CMD_UNKNOWN: | 620 | case MCE_CMD_UNKNOWN: |
643 | dev_info(dev, "Resp to 9f 05 of 0x%02x 0x%02x\n", | 621 | dev_dbg(dev, "Resp to 9f 05 of 0x%02x 0x%02x", |
644 | data1, data2); | 622 | data1, data2); |
645 | break; | 623 | break; |
646 | case MCE_RSP_EQIRCFS: | 624 | case MCE_RSP_EQIRCFS: |
@@ -649,51 +627,51 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
649 | if (!period) | 627 | if (!period) |
650 | break; | 628 | break; |
651 | carrier = (1000 * 1000) / period; | 629 | carrier = (1000 * 1000) / period; |
652 | dev_info(dev, "%s carrier of %u Hz (period %uus)\n", | 630 | dev_dbg(dev, "%s carrier of %u Hz (period %uus)", |
653 | inout, carrier, period); | 631 | inout, carrier, period); |
654 | break; | 632 | break; |
655 | case MCE_CMD_GETIRCFS: | 633 | case MCE_CMD_GETIRCFS: |
656 | dev_info(dev, "Get carrier mode and freq\n"); | 634 | dev_dbg(dev, "Get carrier mode and freq"); |
657 | break; | 635 | break; |
658 | case MCE_RSP_EQIRTXPORTS: | 636 | case MCE_RSP_EQIRTXPORTS: |
659 | dev_info(dev, "%s transmit blaster mask of 0x%02x\n", | 637 | dev_dbg(dev, "%s transmit blaster mask of 0x%02x", |
660 | inout, data1); | 638 | inout, data1); |
661 | break; | 639 | break; |
662 | case MCE_RSP_EQIRTIMEOUT: | 640 | case MCE_RSP_EQIRTIMEOUT: |
663 | /* value is in units of 50us, so x*50/1000 ms */ | 641 | /* value is in units of 50us, so x*50/1000 ms */ |
664 | period = ((data1 << 8) | data2) * MCE_TIME_UNIT / 1000; | 642 | period = ((data1 << 8) | data2) * MCE_TIME_UNIT / 1000; |
665 | dev_info(dev, "%s receive timeout of %d ms\n", | 643 | dev_dbg(dev, "%s receive timeout of %d ms", |
666 | inout, period); | 644 | inout, period); |
667 | break; | 645 | break; |
668 | case MCE_CMD_GETIRTIMEOUT: | 646 | case MCE_CMD_GETIRTIMEOUT: |
669 | dev_info(dev, "Get receive timeout\n"); | 647 | dev_dbg(dev, "Get receive timeout"); |
670 | break; | 648 | break; |
671 | case MCE_CMD_GETIRTXPORTS: | 649 | case MCE_CMD_GETIRTXPORTS: |
672 | dev_info(dev, "Get transmit blaster mask\n"); | 650 | dev_dbg(dev, "Get transmit blaster mask"); |
673 | break; | 651 | break; |
674 | case MCE_RSP_EQIRRXPORTEN: | 652 | case MCE_RSP_EQIRRXPORTEN: |
675 | dev_info(dev, "%s %s-range receive sensor in use\n", | 653 | dev_dbg(dev, "%s %s-range receive sensor in use", |
676 | inout, data1 == 0x02 ? "short" : "long"); | 654 | inout, data1 == 0x02 ? "short" : "long"); |
677 | break; | 655 | break; |
678 | case MCE_CMD_GETIRRXPORTEN: | 656 | case MCE_CMD_GETIRRXPORTEN: |
679 | /* aka MCE_RSP_EQIRRXCFCNT */ | 657 | /* aka MCE_RSP_EQIRRXCFCNT */ |
680 | if (out) | 658 | if (out) |
681 | dev_info(dev, "Get receive sensor\n"); | 659 | dev_dbg(dev, "Get receive sensor"); |
682 | else if (ir->learning_enabled) | 660 | else if (ir->learning_enabled) |
683 | dev_info(dev, "RX pulse count: %d\n", | 661 | dev_dbg(dev, "RX pulse count: %d", |
684 | ((data1 << 8) | data2)); | 662 | ((data1 << 8) | data2)); |
685 | break; | 663 | break; |
686 | case MCE_RSP_EQIRNUMPORTS: | 664 | case MCE_RSP_EQIRNUMPORTS: |
687 | if (out) | 665 | if (out) |
688 | break; | 666 | break; |
689 | dev_info(dev, "Num TX ports: %x, num RX ports: %x\n", | 667 | dev_dbg(dev, "Num TX ports: %x, num RX ports: %x", |
690 | data1, data2); | 668 | data1, data2); |
691 | break; | 669 | break; |
692 | case MCE_RSP_CMD_ILLEGAL: | 670 | case MCE_RSP_CMD_ILLEGAL: |
693 | dev_info(dev, "Illegal PORT_IR command\n"); | 671 | dev_dbg(dev, "Illegal PORT_IR command"); |
694 | break; | 672 | break; |
695 | default: | 673 | default: |
696 | dev_info(dev, "Unknown command 0x%02x 0x%02x\n", | 674 | dev_dbg(dev, "Unknown command 0x%02x 0x%02x", |
697 | cmd, subcmd); | 675 | cmd, subcmd); |
698 | break; | 676 | break; |
699 | } | 677 | } |
@@ -703,10 +681,11 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, | |||
703 | } | 681 | } |
704 | 682 | ||
705 | if (cmd == MCE_IRDATA_TRAILER) | 683 | if (cmd == MCE_IRDATA_TRAILER) |
706 | dev_info(dev, "End of raw IR data\n"); | 684 | dev_dbg(dev, "End of raw IR data"); |
707 | else if ((cmd != MCE_CMD_PORT_IR) && | 685 | else if ((cmd != MCE_CMD_PORT_IR) && |
708 | ((cmd & MCE_PORT_MASK) == MCE_COMMAND_IRDATA)) | 686 | ((cmd & MCE_PORT_MASK) == MCE_COMMAND_IRDATA)) |
709 | dev_info(dev, "Raw IR data, %d pulse/space samples\n", ir->rem); | 687 | dev_dbg(dev, "Raw IR data, %d pulse/space samples", ir->rem); |
688 | #endif | ||
710 | } | 689 | } |
711 | 690 | ||
712 | static void mce_async_callback(struct urb *urb) | 691 | static void mce_async_callback(struct urb *urb) |
@@ -718,10 +697,25 @@ static void mce_async_callback(struct urb *urb) | |||
718 | return; | 697 | return; |
719 | 698 | ||
720 | ir = urb->context; | 699 | ir = urb->context; |
721 | if (ir) { | 700 | |
701 | switch (urb->status) { | ||
702 | /* success */ | ||
703 | case 0: | ||
722 | len = urb->actual_length; | 704 | len = urb->actual_length; |
723 | 705 | ||
724 | mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); | 706 | mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); |
707 | break; | ||
708 | |||
709 | case -ECONNRESET: | ||
710 | case -ENOENT: | ||
711 | case -EILSEQ: | ||
712 | case -ESHUTDOWN: | ||
713 | break; | ||
714 | |||
715 | case -EPIPE: | ||
716 | default: | ||
717 | dev_err(ir->dev, "Error: request urb status = %d", urb->status); | ||
718 | break; | ||
725 | } | 719 | } |
726 | 720 | ||
727 | /* the transfer buffer and urb were allocated in mce_request_packet */ | 721 | /* the transfer buffer and urb were allocated in mce_request_packet */ |
@@ -770,17 +764,17 @@ static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data, | |||
770 | return; | 764 | return; |
771 | } | 765 | } |
772 | 766 | ||
773 | mce_dbg(dev, "receive request called (size=%#x)\n", size); | 767 | dev_dbg(dev, "receive request called (size=%#x)", size); |
774 | 768 | ||
775 | async_urb->transfer_buffer_length = size; | 769 | async_urb->transfer_buffer_length = size; |
776 | async_urb->dev = ir->usbdev; | 770 | async_urb->dev = ir->usbdev; |
777 | 771 | ||
778 | res = usb_submit_urb(async_urb, GFP_ATOMIC); | 772 | res = usb_submit_urb(async_urb, GFP_ATOMIC); |
779 | if (res) { | 773 | if (res) { |
780 | mce_dbg(dev, "receive request FAILED! (res=%d)\n", res); | 774 | dev_err(dev, "receive request FAILED! (res=%d)", res); |
781 | return; | 775 | return; |
782 | } | 776 | } |
783 | mce_dbg(dev, "receive request complete (res=%d)\n", res); | 777 | dev_dbg(dev, "receive request complete (res=%d)", res); |
784 | } | 778 | } |
785 | 779 | ||
786 | static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) | 780 | static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) |
@@ -895,8 +889,7 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier) | |||
895 | ir->carrier = carrier; | 889 | ir->carrier = carrier; |
896 | cmdbuf[2] = MCE_CMD_SIG_END; | 890 | cmdbuf[2] = MCE_CMD_SIG_END; |
897 | cmdbuf[3] = MCE_IRDATA_TRAILER; | 891 | cmdbuf[3] = MCE_IRDATA_TRAILER; |
898 | mce_dbg(ir->dev, "%s: disabling carrier " | 892 | dev_dbg(ir->dev, "disabling carrier modulation"); |
899 | "modulation\n", __func__); | ||
900 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); | 893 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); |
901 | return carrier; | 894 | return carrier; |
902 | } | 895 | } |
@@ -907,8 +900,8 @@ static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier) | |||
907 | ir->carrier = carrier; | 900 | ir->carrier = carrier; |
908 | cmdbuf[2] = prescaler; | 901 | cmdbuf[2] = prescaler; |
909 | cmdbuf[3] = divisor; | 902 | cmdbuf[3] = divisor; |
910 | mce_dbg(ir->dev, "%s: requesting %u HZ " | 903 | dev_dbg(ir->dev, "requesting %u HZ carrier", |
911 | "carrier\n", __func__, carrier); | 904 | carrier); |
912 | 905 | ||
913 | /* Transmit new carrier to mce device */ | 906 | /* Transmit new carrier to mce device */ |
914 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); | 907 | mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); |
@@ -998,7 +991,7 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
998 | rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK) | 991 | rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK) |
999 | * US_TO_NS(MCE_TIME_UNIT); | 992 | * US_TO_NS(MCE_TIME_UNIT); |
1000 | 993 | ||
1001 | mce_dbg(ir->dev, "Storing %s with duration %d\n", | 994 | dev_dbg(ir->dev, "Storing %s with duration %d", |
1002 | rawir.pulse ? "pulse" : "space", | 995 | rawir.pulse ? "pulse" : "space", |
1003 | rawir.duration); | 996 | rawir.duration); |
1004 | 997 | ||
@@ -1032,7 +1025,7 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) | |||
1032 | ir->parser_state = CMD_HEADER; | 1025 | ir->parser_state = CMD_HEADER; |
1033 | } | 1026 | } |
1034 | if (event) { | 1027 | if (event) { |
1035 | mce_dbg(ir->dev, "processed IR data, calling ir_raw_event_handle\n"); | 1028 | dev_dbg(ir->dev, "processed IR data"); |
1036 | ir_raw_event_handle(ir->rc); | 1029 | ir_raw_event_handle(ir->rc); |
1037 | } | 1030 | } |
1038 | } | 1031 | } |
@@ -1055,7 +1048,7 @@ static void mceusb_dev_recv(struct urb *urb) | |||
1055 | 1048 | ||
1056 | if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { | 1049 | if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { |
1057 | ir->send_flags = SEND_FLAG_COMPLETE; | 1050 | ir->send_flags = SEND_FLAG_COMPLETE; |
1058 | mce_dbg(ir->dev, "setup answer received %d bytes\n", | 1051 | dev_dbg(ir->dev, "setup answer received %d bytes\n", |
1059 | buf_len); | 1052 | buf_len); |
1060 | } | 1053 | } |
1061 | 1054 | ||
@@ -1067,13 +1060,14 @@ static void mceusb_dev_recv(struct urb *urb) | |||
1067 | 1060 | ||
1068 | case -ECONNRESET: | 1061 | case -ECONNRESET: |
1069 | case -ENOENT: | 1062 | case -ENOENT: |
1063 | case -EILSEQ: | ||
1070 | case -ESHUTDOWN: | 1064 | case -ESHUTDOWN: |
1071 | usb_unlink_urb(urb); | 1065 | usb_unlink_urb(urb); |
1072 | return; | 1066 | return; |
1073 | 1067 | ||
1074 | case -EPIPE: | 1068 | case -EPIPE: |
1075 | default: | 1069 | default: |
1076 | mce_dbg(ir->dev, "Error: urb status = %d\n", urb->status); | 1070 | dev_err(ir->dev, "Error: urb status = %d", urb->status); |
1077 | break; | 1071 | break; |
1078 | } | 1072 | } |
1079 | 1073 | ||
@@ -1095,7 +1089,7 @@ static void mceusb_gen1_init(struct mceusb_dev *ir) | |||
1095 | 1089 | ||
1096 | data = kzalloc(USB_CTRL_MSG_SZ, GFP_KERNEL); | 1090 | data = kzalloc(USB_CTRL_MSG_SZ, GFP_KERNEL); |
1097 | if (!data) { | 1091 | if (!data) { |
1098 | dev_err(dev, "%s: memory allocation failed!\n", __func__); | 1092 | dev_err(dev, "%s: memory allocation failed!", __func__); |
1099 | return; | 1093 | return; |
1100 | } | 1094 | } |
1101 | 1095 | ||
@@ -1106,28 +1100,28 @@ static void mceusb_gen1_init(struct mceusb_dev *ir) | |||
1106 | ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), | 1100 | ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), |
1107 | USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, | 1101 | USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, |
1108 | data, USB_CTRL_MSG_SZ, HZ * 3); | 1102 | data, USB_CTRL_MSG_SZ, HZ * 3); |
1109 | mce_dbg(dev, "%s - ret = %d\n", __func__, ret); | 1103 | dev_dbg(dev, "set address - ret = %d", ret); |
1110 | mce_dbg(dev, "%s - data[0] = %d, data[1] = %d\n", | 1104 | dev_dbg(dev, "set address - data[0] = %d, data[1] = %d", |
1111 | __func__, data[0], data[1]); | 1105 | data[0], data[1]); |
1112 | 1106 | ||
1113 | /* set feature: bit rate 38400 bps */ | 1107 | /* set feature: bit rate 38400 bps */ |
1114 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), | 1108 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), |
1115 | USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, | 1109 | USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, |
1116 | 0xc04e, 0x0000, NULL, 0, HZ * 3); | 1110 | 0xc04e, 0x0000, NULL, 0, HZ * 3); |
1117 | 1111 | ||
1118 | mce_dbg(dev, "%s - ret = %d\n", __func__, ret); | 1112 | dev_dbg(dev, "set feature - ret = %d", ret); |
1119 | 1113 | ||
1120 | /* bRequest 4: set char length to 8 bits */ | 1114 | /* bRequest 4: set char length to 8 bits */ |
1121 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), | 1115 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), |
1122 | 4, USB_TYPE_VENDOR, | 1116 | 4, USB_TYPE_VENDOR, |
1123 | 0x0808, 0x0000, NULL, 0, HZ * 3); | 1117 | 0x0808, 0x0000, NULL, 0, HZ * 3); |
1124 | mce_dbg(dev, "%s - retB = %d\n", __func__, ret); | 1118 | dev_dbg(dev, "set char length - retB = %d", ret); |
1125 | 1119 | ||
1126 | /* bRequest 2: set handshaking to use DTR/DSR */ | 1120 | /* bRequest 2: set handshaking to use DTR/DSR */ |
1127 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), | 1121 | ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), |
1128 | 2, USB_TYPE_VENDOR, | 1122 | 2, USB_TYPE_VENDOR, |
1129 | 0x0000, 0x0100, NULL, 0, HZ * 3); | 1123 | 0x0000, 0x0100, NULL, 0, HZ * 3); |
1130 | mce_dbg(dev, "%s - retC = %d\n", __func__, ret); | 1124 | dev_dbg(dev, "set handshake - retC = %d", ret); |
1131 | 1125 | ||
1132 | /* device resume */ | 1126 | /* device resume */ |
1133 | mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); | 1127 | mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); |
@@ -1198,7 +1192,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) | |||
1198 | 1192 | ||
1199 | rc = rc_allocate_device(); | 1193 | rc = rc_allocate_device(); |
1200 | if (!rc) { | 1194 | if (!rc) { |
1201 | dev_err(dev, "remote dev allocation failed\n"); | 1195 | dev_err(dev, "remote dev allocation failed"); |
1202 | goto out; | 1196 | goto out; |
1203 | } | 1197 | } |
1204 | 1198 | ||
@@ -1230,7 +1224,7 @@ static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) | |||
1230 | 1224 | ||
1231 | ret = rc_register_device(rc); | 1225 | ret = rc_register_device(rc); |
1232 | if (ret < 0) { | 1226 | if (ret < 0) { |
1233 | dev_err(dev, "remote dev registration failed\n"); | 1227 | dev_err(dev, "remote dev registration failed"); |
1234 | goto out; | 1228 | goto out; |
1235 | } | 1229 | } |
1236 | 1230 | ||
@@ -1258,7 +1252,7 @@ static int mceusb_dev_probe(struct usb_interface *intf, | |||
1258 | bool tx_mask_normal; | 1252 | bool tx_mask_normal; |
1259 | int ir_intfnum; | 1253 | int ir_intfnum; |
1260 | 1254 | ||
1261 | mce_dbg(&intf->dev, "%s called\n", __func__); | 1255 | dev_dbg(&intf->dev, "%s called", __func__); |
1262 | 1256 | ||
1263 | idesc = intf->cur_altsetting; | 1257 | idesc = intf->cur_altsetting; |
1264 | 1258 | ||
@@ -1286,8 +1280,7 @@ static int mceusb_dev_probe(struct usb_interface *intf, | |||
1286 | ep_in = ep; | 1280 | ep_in = ep; |
1287 | ep_in->bmAttributes = USB_ENDPOINT_XFER_INT; | 1281 | ep_in->bmAttributes = USB_ENDPOINT_XFER_INT; |
1288 | ep_in->bInterval = 1; | 1282 | ep_in->bInterval = 1; |
1289 | mce_dbg(&intf->dev, "acceptable inbound endpoint " | 1283 | dev_dbg(&intf->dev, "acceptable inbound endpoint found"); |
1290 | "found\n"); | ||
1291 | } | 1284 | } |
1292 | 1285 | ||
1293 | if ((ep_out == NULL) | 1286 | if ((ep_out == NULL) |
@@ -1301,12 +1294,11 @@ static int mceusb_dev_probe(struct usb_interface *intf, | |||
1301 | ep_out = ep; | 1294 | ep_out = ep; |
1302 | ep_out->bmAttributes = USB_ENDPOINT_XFER_INT; | 1295 | ep_out->bmAttributes = USB_ENDPOINT_XFER_INT; |
1303 | ep_out->bInterval = 1; | 1296 | ep_out->bInterval = 1; |
1304 | mce_dbg(&intf->dev, "acceptable outbound endpoint " | 1297 | dev_dbg(&intf->dev, "acceptable outbound endpoint found"); |
1305 | "found\n"); | ||
1306 | } | 1298 | } |
1307 | } | 1299 | } |
1308 | if (ep_in == NULL) { | 1300 | if (ep_in == NULL) { |
1309 | mce_dbg(&intf->dev, "inbound and/or endpoint not found\n"); | 1301 | dev_dbg(&intf->dev, "inbound and/or endpoint not found"); |
1310 | return -ENODEV; | 1302 | return -ENODEV; |
1311 | } | 1303 | } |
1312 | 1304 | ||
@@ -1357,7 +1349,7 @@ static int mceusb_dev_probe(struct usb_interface *intf, | |||
1357 | ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | 1349 | ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
1358 | 1350 | ||
1359 | /* flush buffers on the device */ | 1351 | /* flush buffers on the device */ |
1360 | mce_dbg(&intf->dev, "Flushing receive buffers\n"); | 1352 | dev_dbg(&intf->dev, "Flushing receive buffers\n"); |
1361 | mce_flush_rx_buffer(ir, maxp); | 1353 | mce_flush_rx_buffer(ir, maxp); |
1362 | 1354 | ||
1363 | /* figure out which firmware/emulator version this hardware has */ | 1355 | /* figure out which firmware/emulator version this hardware has */ |
@@ -1382,10 +1374,9 @@ static int mceusb_dev_probe(struct usb_interface *intf, | |||
1382 | device_set_wakeup_capable(ir->dev, true); | 1374 | device_set_wakeup_capable(ir->dev, true); |
1383 | device_set_wakeup_enable(ir->dev, true); | 1375 | device_set_wakeup_enable(ir->dev, true); |
1384 | 1376 | ||
1385 | dev_info(&intf->dev, "Registered %s with mce emulator interface " | 1377 | dev_info(&intf->dev, "Registered %s with mce emulator interface version %x", |
1386 | "version %x\n", name, ir->emver); | 1378 | name, ir->emver); |
1387 | dev_info(&intf->dev, "%x tx ports (0x%x cabled) and " | 1379 | dev_info(&intf->dev, "%x tx ports (0x%x cabled) and %x rx sensors (0x%x active)", |
1388 | "%x rx sensors (0x%x active)\n", | ||
1389 | ir->num_txports, ir->txports_cabled, | 1380 | ir->num_txports, ir->txports_cabled, |
1390 | ir->num_rxports, ir->rxports_active); | 1381 | ir->num_rxports, ir->rxports_active); |
1391 | 1382 | ||
@@ -1399,7 +1390,7 @@ urb_in_alloc_fail: | |||
1399 | buf_in_alloc_fail: | 1390 | buf_in_alloc_fail: |
1400 | kfree(ir); | 1391 | kfree(ir); |
1401 | mem_alloc_fail: | 1392 | mem_alloc_fail: |
1402 | dev_err(&intf->dev, "%s: device setup failed!\n", __func__); | 1393 | dev_err(&intf->dev, "%s: device setup failed!", __func__); |
1403 | 1394 | ||
1404 | return -ENOMEM; | 1395 | return -ENOMEM; |
1405 | } | 1396 | } |
@@ -1427,7 +1418,7 @@ static void mceusb_dev_disconnect(struct usb_interface *intf) | |||
1427 | static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message) | 1418 | static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message) |
1428 | { | 1419 | { |
1429 | struct mceusb_dev *ir = usb_get_intfdata(intf); | 1420 | struct mceusb_dev *ir = usb_get_intfdata(intf); |
1430 | dev_info(ir->dev, "suspend\n"); | 1421 | dev_info(ir->dev, "suspend"); |
1431 | usb_kill_urb(ir->urb_in); | 1422 | usb_kill_urb(ir->urb_in); |
1432 | return 0; | 1423 | return 0; |
1433 | } | 1424 | } |
@@ -1435,7 +1426,7 @@ static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message) | |||
1435 | static int mceusb_dev_resume(struct usb_interface *intf) | 1426 | static int mceusb_dev_resume(struct usb_interface *intf) |
1436 | { | 1427 | { |
1437 | struct mceusb_dev *ir = usb_get_intfdata(intf); | 1428 | struct mceusb_dev *ir = usb_get_intfdata(intf); |
1438 | dev_info(ir->dev, "resume\n"); | 1429 | dev_info(ir->dev, "resume"); |
1439 | if (usb_submit_urb(ir->urb_in, GFP_ATOMIC)) | 1430 | if (usb_submit_urb(ir->urb_in, GFP_ATOMIC)) |
1440 | return -EIO; | 1431 | return -EIO; |
1441 | return 0; | 1432 | return 0; |
@@ -1457,6 +1448,3 @@ MODULE_DESCRIPTION(DRIVER_DESC); | |||
1457 | MODULE_AUTHOR(DRIVER_AUTHOR); | 1448 | MODULE_AUTHOR(DRIVER_AUTHOR); |
1458 | MODULE_LICENSE("GPL"); | 1449 | MODULE_LICENSE("GPL"); |
1459 | MODULE_DEVICE_TABLE(usb, mceusb_dev_table); | 1450 | MODULE_DEVICE_TABLE(usb, mceusb_dev_table); |
1460 | |||
1461 | module_param(debug, bool, S_IRUGO | S_IWUSR); | ||
1462 | MODULE_PARM_DESC(debug, "Debug enabled or not"); | ||