Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] mceusb: hook debug print spew directly into parser routine

Provides more complete debug spew, parses individual commands and raw IR
data one chunk at a time.

Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Jarod Wilson and committed by
Mauro Carvalho Chehab
36e9d260 4a883918

+25 -20
+25 -20
drivers/media/IR/mceusb.c
··· 421 421 } 422 422 423 423 static void mceusb_dev_printdata(struct mceusb_dev *ir, char *buf, 424 - int len, bool out) 424 + int offset, int len, bool out) 425 425 { 426 426 char codes[USB_BUFLEN * 3 + 1]; 427 427 char inout[9]; 428 - int i; 429 428 u8 cmd, subcmd, data1, data2; 430 429 struct device *dev = ir->dev; 431 - int idx = 0; 430 + int i, start, skip = 0; 431 + 432 + if (!debug) 433 + return; 432 434 433 435 /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ 434 436 if (ir->flags.microsoft_gen1 && !out) 435 - idx = 2; 437 + skip = 2; 436 438 437 - if (len <= idx) 439 + if (len <= skip) 438 440 return; 439 441 440 442 for (i = 0; i < len && i < USB_BUFLEN; i++) 441 - snprintf(codes + i * 3, 4, "%02x ", buf[i] & 0xff); 443 + snprintf(codes + i * 3, 4, "%02x ", buf[i + offset] & 0xff); 442 444 443 - dev_info(dev, "%sx data: %s (length=%d)\n", 445 + dev_info(dev, "%sx data: %s(length=%d)\n", 444 446 (out ? "t" : "r"), codes, len); 445 447 446 448 if (out) ··· 450 448 else 451 449 strcpy(inout, "Got\0"); 452 450 453 - cmd = buf[idx] & 0xff; 454 - subcmd = buf[idx + 1] & 0xff; 455 - data1 = buf[idx + 2] & 0xff; 456 - data2 = buf[idx + 3] & 0xff; 451 + start = offset + skip; 452 + cmd = buf[start] & 0xff; 453 + subcmd = buf[start + 1] & 0xff; 454 + data1 = buf[start + 2] & 0xff; 455 + data2 = buf[start + 3] & 0xff; 457 456 458 457 switch (cmd) { 459 458 case MCE_COMMAND_NULL: ··· 473 470 else 474 471 dev_info(dev, "hw/sw rev 0x%02x 0x%02x " 475 472 "0x%02x 0x%02x\n", data1, data2, 476 - buf[idx + 4], buf[idx + 5]); 473 + buf[start + 4], buf[start + 5]); 477 474 break; 478 475 case MCE_CMD_DEVICE_RESET: 479 476 dev_info(dev, "Device reset requested\n"); ··· 546 543 default: 547 544 break; 548 545 } 546 + 547 + if (cmd == MCE_IRDATA_TRAILER) 548 + dev_info(dev, "End of raw IR data\n"); 549 + else if ((cmd != MCE_COMMAND_HEADER) && 550 + ((cmd & MCE_COMMAND_MASK) == MCE_COMMAND_IRDATA)) 551 + dev_info(dev, "Raw IR data, %d pulse/space samples\n", ir->rem); 549 552 } 550 553 551 554 static void mce_async_callback(struct urb *urb, struct pt_regs *regs) ··· 569 560 dev_dbg(ir->dev, "callback called (status=%d len=%d)\n", 570 561 urb->status, len); 571 562 572 - if (debug) 573 - mceusb_dev_printdata(ir, urb->transfer_buffer, 574 - len, true); 563 + mceusb_dev_printdata(ir, urb->transfer_buffer, 0, len, true); 575 564 } 576 565 577 566 } ··· 795 788 switch (ir->parser_state) { 796 789 case SUBCMD: 797 790 ir->rem = mceusb_cmdsize(ir->cmd, ir->buf_in[i]); 791 + mceusb_dev_printdata(ir, ir->buf_in, i - 1, 792 + ir->rem + 2, false); 798 793 ir->parser_state = CMD_DATA; 799 794 break; 800 795 case PARSE_IRDATA: ··· 839 830 continue; 840 831 } 841 832 ir->rem = (ir->cmd & MCE_PACKET_LENGTH_MASK); 842 - dev_dbg(ir->dev, "Processing RX data: len = %d\n", 843 - ir->rem); 833 + mceusb_dev_printdata(ir, ir->buf_in, i, ir->rem + 1, false); 844 834 if (ir->rem) { 845 835 ir->parser_state = PARSE_IRDATA; 846 836 break; ··· 875 867 } 876 868 877 869 buf_len = urb->actual_length; 878 - 879 - if (debug) 880 - mceusb_dev_printdata(ir, urb->transfer_buffer, buf_len, false); 881 870 882 871 if (ir->send_flags == RECV_FLAG_IN_PROGRESS) { 883 872 ir->send_flags = SEND_FLAG_COMPLETE;