With some minor kfifo-related changes, lirc_dev ir-lirc-codec can be built
on a 2.6.32-based kernel (Red Hat Enterprise Linux 6). The mceusb and imon
drivers build fine without any changes, modulo a warning about pr_fmt
being redefined in the imon driver.

Signed-off-by: Jarod Wilson <ja...@redhat.com>

---
 backports/v2.6.32/kfifo.patch |  105 +++++++++++++++++++++++++++++++++++++++++
 v4l/versions.txt              |    4 --
 2 files changed, 105 insertions(+), 4 deletions(-)

diff --git a/backports/v2.6.32/kfifo.patch b/backports/v2.6.32/kfifo.patch
index a612f1b..df97d07 100644
--- a/backports/v2.6.32/kfifo.patch
+++ b/backports/v2.6.32/kfifo.patch
@@ -426,3 +426,108 @@ diff -r 5254948f88c4 drivers/media/video/meye.h
        spinlock_t doneq_lock;          /* lock protecting the queue */
        wait_queue_head_t proc_list;    /* wait queue */
        struct video_device *vdev;      /* video device parameters */
+diff --git a/include/media/lirc_dev.h b/include/media/lirc_dev.h
+index 54780a5..87b2ca6 100644
+--- a/include/media/lirc_dev.h
++++ b/include/media/lirc_dev.h
+@@ -28,19 +28,15 @@ struct lirc_buffer {
+       unsigned int size; /* in chunks */
+       /* Using chunks instead of bytes pretends to simplify boundary checking
+        * And should allow for some performance fine tunning later */
+-      struct kfifo fifo;
++      struct kfifo *fifo;
+       u8 fifo_initialized;
+ };
+ 
+ static inline void lirc_buffer_clear(struct lirc_buffer *buf)
+ {
+-      unsigned long flags;
+-
+-      if (buf->fifo_initialized) {
+-              spin_lock_irqsave(&buf->fifo_lock, flags);
+-              kfifo_reset(&buf->fifo);
+-              spin_unlock_irqrestore(&buf->fifo_lock, flags);
+-      } else
++      if (buf->fifo)
++              kfifo_reset(buf->fifo);
++      else
+               WARN(1, "calling %s on an uninitialized lirc_buffer\n",
+                    __func__);
+ }
+@@ -49,25 +45,23 @@ static inline int lirc_buffer_init(struct lirc_buffer *buf,
+                                   unsigned int chunk_size,
+                                   unsigned int size)
+ {
+-      int ret;
+-
+       init_waitqueue_head(&buf->wait_poll);
+       spin_lock_init(&buf->fifo_lock);
+       buf->chunk_size = chunk_size;
+       buf->size = size;
+-      ret = kfifo_alloc(&buf->fifo, size * chunk_size, GFP_KERNEL);
+-      if (ret == 0)
+-              buf->fifo_initialized = 1;
++      buf->fifo = kfifo_alloc(size * chunk_size, GFP_KERNEL,
++                              &buf->fifo_lock);
++      if (!buf->fifo)
++              return -ENOMEM;
+ 
+-      return ret;
++      return 0;
+ }
+ 
+ static inline void lirc_buffer_free(struct lirc_buffer *buf)
+ {
+-      if (buf->fifo_initialized) {
+-              kfifo_free(&buf->fifo);
+-              buf->fifo_initialized = 0;
+-      } else
++      if (buf->fifo)
++              kfifo_free(buf->fifo);
++      else
+               WARN(1, "calling %s on an uninitialized lirc_buffer\n",
+                    __func__);
+ }
+@@ -75,11 +69,8 @@ static inline void lirc_buffer_free(struct lirc_buffer *buf)
+ static inline int lirc_buffer_len(struct lirc_buffer *buf)
+ {
+       int len;
+-      unsigned long flags;
+ 
+-      spin_lock_irqsave(&buf->fifo_lock, flags);
+-      len = kfifo_len(&buf->fifo);
+-      spin_unlock_irqrestore(&buf->fifo_lock, flags);
++      len = kfifo_len(buf->fifo);
+ 
+       return len;
+ }
+@@ -102,24 +93,19 @@ static inline int lirc_buffer_available(struct 
lirc_buffer *buf)
+ static inline unsigned int lirc_buffer_read(struct lirc_buffer *buf,
+                                           unsigned char *dest)
+ {
+-      unsigned int ret = 0;
+-
+       if (lirc_buffer_len(buf) >= buf->chunk_size)
+-              ret = kfifo_out_locked(&buf->fifo, dest, buf->chunk_size,
+-                                     &buf->fifo_lock);
+-      return ret;
++              kfifo_get(buf->fifo, dest, buf->chunk_size);
++
++      return 0;
+ 
+ }
+ 
+ static inline unsigned int lirc_buffer_write(struct lirc_buffer *buf,
+                                            unsigned char *orig)
+ {
+-      unsigned int ret;
+-
+-      ret = kfifo_in_locked(&buf->fifo, orig, buf->chunk_size,
+-                            &buf->fifo_lock);
++      kfifo_put(buf->fifo, orig, buf->chunk_size);
+ 
+-      return ret;
++      return 0;
+ }
+ 
+ struct lirc_driver {
diff --git a/v4l/versions.txt b/v4l/versions.txt
index 46db158..6465418 100644
--- a/v4l/versions.txt
+++ b/v4l/versions.txt
@@ -6,10 +6,6 @@
 VIDEO_VIA_CAMERA
 
 [2.6.36]
-LIRC
-IR_LIRC_CODEC
-IR_IMON
-IR_MCEUSB
 
 [2.6.34]
 MACH_DAVINCI_DM6467_EVM

-- 
Jarod Wilson
ja...@redhat.com

--
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

Reply via email to