[PATCH 2/5] IR: extend ir_raw_event and do refactoring

2010-10-15 Thread Maxim Levitsky
Add new event types for timeout  carrier report
Move timeout handling from ir_raw_event_store_with_filter to
ir-lirc-codec, where it is really needed.
Now lirc bridge ensures proper gap handling.
Extend lirc bridge for carrier  timeout reports

Note: all new ir_raw_event variables now should be initialized
like that: DEFINE_IR_RAW_EVENT(ev);

To clean an existing event, use init_ir_raw_event(ev);

Signed-off-by: Maxim Levitsky maximlevit...@gmail.com
Acked-by: Jarod Wilson ja...@redhat.com
---
 drivers/media/IR/ene_ir.c  |4 +-
 drivers/media/IR/ir-core-priv.h|   13 -
 drivers/media/IR/ir-jvc-decoder.c  |5 +-
 drivers/media/IR/ir-lirc-codec.c   |  128 +---
 drivers/media/IR/ir-nec-decoder.c  |5 +-
 drivers/media/IR/ir-raw-event.c|   45 +
 drivers/media/IR/ir-rc5-decoder.c  |5 +-
 drivers/media/IR/ir-rc6-decoder.c  |5 +-
 drivers/media/IR/ir-sony-decoder.c |5 +-
 drivers/media/IR/mceusb.c  |3 +-
 drivers/media/IR/streamzap.c   |8 ++-
 include/media/ir-core.h|   40 ++--
 12 files changed, 176 insertions(+), 90 deletions(-)

diff --git a/drivers/media/IR/ene_ir.c b/drivers/media/IR/ene_ir.c
index 7880d9c..dc32509 100644
--- a/drivers/media/IR/ene_ir.c
+++ b/drivers/media/IR/ene_ir.c
@@ -701,7 +701,7 @@ static irqreturn_t ene_isr(int irq, void *data)
unsigned long flags;
irqreturn_t retval = IRQ_NONE;
struct ene_device *dev = (struct ene_device *)data;
-   struct ir_raw_event ev;
+   DEFINE_IR_RAW_EVENT(ev);
 
spin_lock_irqsave(dev-hw_lock, flags);
 
@@ -904,7 +904,7 @@ static int ene_set_learning_mode(void *data, int enable)
 }
 
 /* outside interface: enable or disable idle mode */
-static void ene_rx_set_idle(void *data, int idle)
+static void ene_rx_set_idle(void *data, bool idle)
 {
struct ene_device *dev = (struct ene_device *)data;
 
diff --git a/drivers/media/IR/ir-core-priv.h b/drivers/media/IR/ir-core-priv.h
index 5d7e08f..2559e72 100644
--- a/drivers/media/IR/ir-core-priv.h
+++ b/drivers/media/IR/ir-core-priv.h
@@ -82,6 +82,12 @@ struct ir_raw_event_ctrl {
struct ir_input_dev *ir_dev;
struct lirc_driver *drv;
int carrier_low;
+
+   ktime_t gap_start;
+   u64 gap_duration;
+   bool gap;
+   bool send_timeout_reports;
+
} lirc;
 };
 
@@ -109,9 +115,14 @@ static inline void decrease_duration(struct ir_raw_event 
*ev, unsigned duration)
ev-duration -= duration;
 }
 
+/* Returns true if event is normal pulse/space event */
+static inline bool is_timing_event(struct ir_raw_event ev)
+{
+   return !ev.carrier_report  !ev.reset;
+}
+
 #define TO_US(duration)DIV_ROUND_CLOSEST((duration), 
1000)
 #define TO_STR(is_pulse)   ((is_pulse) ? pulse : space)
-#define IS_RESET(ev)   (ev.duration == 0)
 /*
  * Routines from ir-sysfs.c - Meant to be called only internally inside
  * ir-core
diff --git a/drivers/media/IR/ir-jvc-decoder.c 
b/drivers/media/IR/ir-jvc-decoder.c
index 77a89c4..63dca6e 100644
--- a/drivers/media/IR/ir-jvc-decoder.c
+++ b/drivers/media/IR/ir-jvc-decoder.c
@@ -50,8 +50,9 @@ static int ir_jvc_decode(struct input_dev *input_dev, struct 
ir_raw_event ev)
if (!(ir_dev-raw-enabled_protocols  IR_TYPE_JVC))
return 0;
 
-   if (IS_RESET(ev)) {
-   data-state = STATE_INACTIVE;
+   if (!is_timing_event(ev)) {
+   if (ev.reset)
+   data-state = STATE_INACTIVE;
return 0;
}
 
diff --git a/drivers/media/IR/ir-lirc-codec.c b/drivers/media/IR/ir-lirc-codec.c
index e63f757..9317be8 100644
--- a/drivers/media/IR/ir-lirc-codec.c
+++ b/drivers/media/IR/ir-lirc-codec.c
@@ -32,6 +32,7 @@
 static int ir_lirc_decode(struct input_dev *input_dev, struct ir_raw_event ev)
 {
struct ir_input_dev *ir_dev = input_get_drvdata(input_dev);
+   struct lirc_codec *lirc = ir_dev-raw-lirc;
int sample;
 
if (!(ir_dev-raw-enabled_protocols  IR_TYPE_LIRC))
@@ -40,21 +41,57 @@ static int ir_lirc_decode(struct input_dev *input_dev, 
struct ir_raw_event ev)
if (!ir_dev-raw-lirc.drv || !ir_dev-raw-lirc.drv-rbuf)
return -EINVAL;
 
-   if (IS_RESET(ev))
+   /* Packet start */
+   if (ev.reset)
return 0;
 
-   IR_dprintk(2, LIRC data transfer started (%uus %s)\n,
-  TO_US(ev.duration), TO_STR(ev.pulse));
+   /* Carrier reports */
+   if (ev.carrier_report) {
+   sample = LIRC_FREQUENCY(ev.carrier);
+
+   /* Packet end */
+   } else if (ev.timeout) {
+
+   if (lirc-gap)
+   return 0;
+
+   lirc-gap_start = ktime_get();
+   lirc-gap = true;
+   lirc-gap_duration = ev.duration;
+
+   if 

Re: [PATCH 2/5] IR: extend ir_raw_event and do refactoring

2010-10-15 Thread Mauro Carvalho Chehab
Em 15-10-2010 13:06, Maxim Levitsky escreveu:
 Add new event types for timeout  carrier report
 Move timeout handling from ir_raw_event_store_with_filter to
 ir-lirc-codec, where it is really needed.
 Now lirc bridge ensures proper gap handling.
 Extend lirc bridge for carrier  timeout reports
 
 Note: all new ir_raw_event variables now should be initialized
 like that: DEFINE_IR_RAW_EVENT(ev);
 
 To clean an existing event, use init_ir_raw_event(ev);
 
 Signed-off-by: Maxim Levitsky maximlevit...@gmail.com
 Acked-by: Jarod Wilson ja...@redhat.com


Applying patch 
patches/lmml_257371_2_5_ir_extend_ir_raw_event_and_do_refactoring.patch
patching file drivers/media/IR/ene_ir.c
patching file drivers/media/IR/ir-core-priv.h
Hunk #1 succeeded at 88 (offset 6 lines).
Hunk #2 succeeded at 121 (offset 6 lines).
patching file drivers/media/IR/ir-jvc-decoder.c
patching file drivers/media/IR/ir-lirc-codec.c
Hunk #3 FAILED at 139.
Hunk #4 FAILED at 167.
Hunk #7 succeeded at 330 (offset 3 lines).
2 out of 7 hunks FAILED -- rejects in file drivers/media/IR/ir-lirc-codec.c
patching file drivers/media/IR/ir-nec-decoder.c
patching file drivers/media/IR/ir-raw-event.c
patching file drivers/media/IR/ir-rc5-decoder.c
patching file drivers/media/IR/ir-rc6-decoder.c
patching file drivers/media/IR/ir-sony-decoder.c
patching file drivers/media/IR/mceusb.c
patching file drivers/media/IR/streamzap.c
Hunk #1 FAILED at 170.
Hunk #2 FAILED at 215.
Hunk #3 FAILED at 233.
Hunk #4 succeeded at 373 (offset -139 lines).
3 out of 4 hunks FAILED -- rejects in file drivers/media/IR/streamzap.c
patching file include/media/ir-core.h
Hunk #3 succeeded at 165 (offset 1 line).
Patch patches/lmml_257371_2_5_ir_extend_ir_raw_event_and_do_refactoring.patch 
does not apply (enforce with -f)
Patch didn't apply. Aborting

Too much fails for me... -EABORTING...

I won't apply this patch... there are two copies of it, and it has several 
broken hunks.


Please fix.

 ---
  drivers/media/IR/ene_ir.c  |4 +-
  drivers/media/IR/ir-core-priv.h|   13 -
  drivers/media/IR/ir-jvc-decoder.c  |5 +-
  drivers/media/IR/ir-lirc-codec.c   |  128 
 +---
  drivers/media/IR/ir-nec-decoder.c  |5 +-
  drivers/media/IR/ir-raw-event.c|   45 +
  drivers/media/IR/ir-rc5-decoder.c  |5 +-
  drivers/media/IR/ir-rc6-decoder.c  |5 +-
  drivers/media/IR/ir-sony-decoder.c |5 +-
  drivers/media/IR/mceusb.c  |3 +-
  drivers/media/IR/streamzap.c   |8 ++-
  include/media/ir-core.h|   40 ++--
  12 files changed, 176 insertions(+), 90 deletions(-)
 
 diff --git a/drivers/media/IR/ene_ir.c b/drivers/media/IR/ene_ir.c
 index 7880d9c..dc32509 100644
 --- a/drivers/media/IR/ene_ir.c
 +++ b/drivers/media/IR/ene_ir.c
 @@ -701,7 +701,7 @@ static irqreturn_t ene_isr(int irq, void *data)
   unsigned long flags;
   irqreturn_t retval = IRQ_NONE;
   struct ene_device *dev = (struct ene_device *)data;
 - struct ir_raw_event ev;
 + DEFINE_IR_RAW_EVENT(ev);
  
   spin_lock_irqsave(dev-hw_lock, flags);
  
 @@ -904,7 +904,7 @@ static int ene_set_learning_mode(void *data, int enable)
  }
  
  /* outside interface: enable or disable idle mode */
 -static void ene_rx_set_idle(void *data, int idle)
 +static void ene_rx_set_idle(void *data, bool idle)
  {
   struct ene_device *dev = (struct ene_device *)data;
  
 diff --git a/drivers/media/IR/ir-core-priv.h b/drivers/media/IR/ir-core-priv.h
 index 5d7e08f..2559e72 100644
 --- a/drivers/media/IR/ir-core-priv.h
 +++ b/drivers/media/IR/ir-core-priv.h
 @@ -82,6 +82,12 @@ struct ir_raw_event_ctrl {
   struct ir_input_dev *ir_dev;
   struct lirc_driver *drv;
   int carrier_low;
 +
 + ktime_t gap_start;
 + u64 gap_duration;
 + bool gap;
 + bool send_timeout_reports;
 +
   } lirc;
  };
  
 @@ -109,9 +115,14 @@ static inline void decrease_duration(struct ir_raw_event 
 *ev, unsigned duration)
   ev-duration -= duration;
  }
  
 +/* Returns true if event is normal pulse/space event */
 +static inline bool is_timing_event(struct ir_raw_event ev)
 +{
 + return !ev.carrier_report  !ev.reset;
 +}
 +
  #define TO_US(duration)  DIV_ROUND_CLOSEST((duration), 
 1000)
  #define TO_STR(is_pulse) ((is_pulse) ? pulse : space)
 -#define IS_RESET(ev) (ev.duration == 0)
  /*
   * Routines from ir-sysfs.c - Meant to be called only internally inside
   * ir-core
 diff --git a/drivers/media/IR/ir-jvc-decoder.c 
 b/drivers/media/IR/ir-jvc-decoder.c
 index 77a89c4..63dca6e 100644
 --- a/drivers/media/IR/ir-jvc-decoder.c
 +++ b/drivers/media/IR/ir-jvc-decoder.c
 @@ -50,8 +50,9 @@ static int ir_jvc_decode(struct input_dev *input_dev, 
 struct ir_raw_event ev)
   if (!(ir_dev-raw-enabled_protocols  IR_TYPE_JVC))
   return 0;
  
 - if (IS_RESET(ev)) {
 - 

Re: [PATCH 2/5] IR: extend ir_raw_event and do refactoring

2010-10-15 Thread Maxim Levitsky
On Sat, 2010-10-16 at 00:29 -0300, Mauro Carvalho Chehab wrote:
 Em 15-10-2010 13:06, Maxim Levitsky escreveu:
  Add new event types for timeout  carrier report
  Move timeout handling from ir_raw_event_store_with_filter to
  ir-lirc-codec, where it is really needed.
  Now lirc bridge ensures proper gap handling.
  Extend lirc bridge for carrier  timeout reports
  
  Note: all new ir_raw_event variables now should be initialized
  like that: DEFINE_IR_RAW_EVENT(ev);
  
  To clean an existing event, use init_ir_raw_event(ev);
  
  Signed-off-by: Maxim Levitsky maximlevit...@gmail.com
  Acked-by: Jarod Wilson ja...@redhat.com
 
 
 Applying patch 
 patches/lmml_257371_2_5_ir_extend_ir_raw_event_and_do_refactoring.patch
 patching file drivers/media/IR/ene_ir.c
 patching file drivers/media/IR/ir-core-priv.h
 Hunk #1 succeeded at 88 (offset 6 lines).
 Hunk #2 succeeded at 121 (offset 6 lines).
 patching file drivers/media/IR/ir-jvc-decoder.c
 patching file drivers/media/IR/ir-lirc-codec.c
 Hunk #3 FAILED at 139.
 Hunk #4 FAILED at 167.
 Hunk #7 succeeded at 330 (offset 3 lines).
 2 out of 7 hunks FAILED -- rejects in file drivers/media/IR/ir-lirc-codec.c
 patching file drivers/media/IR/ir-nec-decoder.c
 patching file drivers/media/IR/ir-raw-event.c
 patching file drivers/media/IR/ir-rc5-decoder.c
 patching file drivers/media/IR/ir-rc6-decoder.c
 patching file drivers/media/IR/ir-sony-decoder.c
 patching file drivers/media/IR/mceusb.c
 patching file drivers/media/IR/streamzap.c
 Hunk #1 FAILED at 170.
 Hunk #2 FAILED at 215.
 Hunk #3 FAILED at 233.
 Hunk #4 succeeded at 373 (offset -139 lines).
 3 out of 4 hunks FAILED -- rejects in file drivers/media/IR/streamzap.c
 patching file include/media/ir-core.h
 Hunk #3 succeeded at 165 (offset 1 line).
 Patch patches/lmml_257371_2_5_ir_extend_ir_raw_event_and_do_refactoring.patch 
 does not apply (enforce with -f)
 Patch didn't apply. Aborting
 
 Too much fails for me... -EABORTING...
 
 I won't apply this patch... there are two copies of it, and it has several 
 broken hunks.
 
 
 Please fix.

Not surprising as v4l tree got many changes and that patch touches many
places.

Will redo that really against the media_tree :-)
Sorry!

Best regards,
Maxim Levitsky



--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html