diff options
| -rw-r--r-- | drivers/media/rc/nuvoton-cir.c | 45 | ||||
| -rw-r--r-- | drivers/media/rc/nuvoton-cir.h | 1 |
2 files changed, 8 insertions, 38 deletions
diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c index eae05b500476..144f3f55d765 100644 --- a/drivers/media/rc/nuvoton-cir.c +++ b/drivers/media/rc/nuvoton-cir.c | |||
| @@ -618,7 +618,6 @@ static void nvt_dump_rx_buf(struct nvt_dev *nvt) | |||
| 618 | static void nvt_process_rx_ir_data(struct nvt_dev *nvt) | 618 | static void nvt_process_rx_ir_data(struct nvt_dev *nvt) |
| 619 | { | 619 | { |
| 620 | DEFINE_IR_RAW_EVENT(rawir); | 620 | DEFINE_IR_RAW_EVENT(rawir); |
| 621 | unsigned int count; | ||
| 622 | u32 carrier; | 621 | u32 carrier; |
| 623 | u8 sample; | 622 | u8 sample; |
| 624 | int i; | 623 | int i; |
| @@ -631,65 +630,38 @@ static void nvt_process_rx_ir_data(struct nvt_dev *nvt) | |||
| 631 | if (nvt->carrier_detect_enabled) | 630 | if (nvt->carrier_detect_enabled) |
| 632 | carrier = nvt_rx_carrier_detect(nvt); | 631 | carrier = nvt_rx_carrier_detect(nvt); |
| 633 | 632 | ||
| 634 | count = nvt->pkts; | 633 | nvt_dbg_verbose("Processing buffer of len %d", nvt->pkts); |
| 635 | nvt_dbg_verbose("Processing buffer of len %d", count); | ||
| 636 | 634 | ||
| 637 | init_ir_raw_event(&rawir); | 635 | init_ir_raw_event(&rawir); |
| 638 | 636 | ||
| 639 | for (i = 0; i < count; i++) { | 637 | for (i = 0; i < nvt->pkts; i++) { |
| 640 | nvt->pkts--; | ||
| 641 | sample = nvt->buf[i]; | 638 | sample = nvt->buf[i]; |
| 642 | 639 | ||
| 643 | rawir.pulse = ((sample & BUF_PULSE_BIT) != 0); | 640 | rawir.pulse = ((sample & BUF_PULSE_BIT) != 0); |
| 644 | rawir.duration = US_TO_NS((sample & BUF_LEN_MASK) | 641 | rawir.duration = US_TO_NS((sample & BUF_LEN_MASK) |
| 645 | * SAMPLE_PERIOD); | 642 | * SAMPLE_PERIOD); |
| 646 | 643 | ||
| 647 | if ((sample & BUF_LEN_MASK) == BUF_LEN_MASK) { | 644 | nvt_dbg("Storing %s with duration %d", |
| 648 | if (nvt->rawir.pulse == rawir.pulse) | 645 | rawir.pulse ? "pulse" : "space", rawir.duration); |
| 649 | nvt->rawir.duration += rawir.duration; | ||
| 650 | else { | ||
| 651 | nvt->rawir.duration = rawir.duration; | ||
| 652 | nvt->rawir.pulse = rawir.pulse; | ||
| 653 | } | ||
| 654 | continue; | ||
| 655 | } | ||
| 656 | |||
| 657 | rawir.duration += nvt->rawir.duration; | ||
| 658 | 646 | ||
| 659 | init_ir_raw_event(&nvt->rawir); | 647 | ir_raw_event_store_with_filter(nvt->rdev, &rawir); |
| 660 | nvt->rawir.duration = 0; | ||
| 661 | nvt->rawir.pulse = rawir.pulse; | ||
| 662 | |||
| 663 | if (sample == BUF_PULSE_BIT) | ||
| 664 | rawir.pulse = false; | ||
| 665 | |||
| 666 | if (rawir.duration) { | ||
| 667 | nvt_dbg("Storing %s with duration %d", | ||
| 668 | rawir.pulse ? "pulse" : "space", | ||
| 669 | rawir.duration); | ||
| 670 | |||
| 671 | ir_raw_event_store_with_filter(nvt->rdev, &rawir); | ||
| 672 | } | ||
| 673 | 648 | ||
| 674 | /* | 649 | /* |
| 675 | * BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE | 650 | * BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE |
| 676 | * indicates end of IR signal, but new data incoming. In both | 651 | * indicates end of IR signal, but new data incoming. In both |
| 677 | * cases, it means we're ready to call ir_raw_event_handle | 652 | * cases, it means we're ready to call ir_raw_event_handle |
| 678 | */ | 653 | */ |
| 679 | if ((sample == BUF_PULSE_BIT) && nvt->pkts) { | 654 | if ((sample == BUF_PULSE_BIT) && (i + 1 < nvt->pkts)) { |
| 680 | nvt_dbg("Calling ir_raw_event_handle (signal end)\n"); | 655 | nvt_dbg("Calling ir_raw_event_handle (signal end)\n"); |
| 681 | ir_raw_event_handle(nvt->rdev); | 656 | ir_raw_event_handle(nvt->rdev); |
| 682 | } | 657 | } |
| 683 | } | 658 | } |
| 684 | 659 | ||
| 660 | nvt->pkts = 0; | ||
| 661 | |||
| 685 | nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n"); | 662 | nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n"); |
| 686 | ir_raw_event_handle(nvt->rdev); | 663 | ir_raw_event_handle(nvt->rdev); |
| 687 | 664 | ||
| 688 | if (nvt->pkts) { | ||
| 689 | nvt_dbg("Odd, pkts should be 0 now... (its %u)", nvt->pkts); | ||
| 690 | nvt->pkts = 0; | ||
| 691 | } | ||
| 692 | |||
| 693 | nvt_dbg_verbose("%s done", __func__); | 665 | nvt_dbg_verbose("%s done", __func__); |
| 694 | } | 666 | } |
| 695 | 667 | ||
| @@ -1048,7 +1020,6 @@ static int nvt_probe(struct pnp_dev *pdev, const struct pnp_device_id *dev_id) | |||
| 1048 | 1020 | ||
| 1049 | spin_lock_init(&nvt->nvt_lock); | 1021 | spin_lock_init(&nvt->nvt_lock); |
| 1050 | spin_lock_init(&nvt->tx.lock); | 1022 | spin_lock_init(&nvt->tx.lock); |
| 1051 | init_ir_raw_event(&nvt->rawir); | ||
| 1052 | 1023 | ||
| 1053 | ret = -EBUSY; | 1024 | ret = -EBUSY; |
| 1054 | /* now claim resources */ | 1025 | /* now claim resources */ |
diff --git a/drivers/media/rc/nuvoton-cir.h b/drivers/media/rc/nuvoton-cir.h index 1241fc89a36c..0d5e0872a2ea 100644 --- a/drivers/media/rc/nuvoton-cir.h +++ b/drivers/media/rc/nuvoton-cir.h | |||
| @@ -67,7 +67,6 @@ static int debug; | |||
| 67 | struct nvt_dev { | 67 | struct nvt_dev { |
| 68 | struct pnp_dev *pdev; | 68 | struct pnp_dev *pdev; |
| 69 | struct rc_dev *rdev; | 69 | struct rc_dev *rdev; |
| 70 | struct ir_raw_event rawir; | ||
| 71 | 70 | ||
| 72 | spinlock_t nvt_lock; | 71 | spinlock_t nvt_lock; |
| 73 | 72 | ||
