Fix lirc compilation on 2.6.26
authorflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 5 Aug 2008 20:51:13 +0000 (20:51 +0000)
committerflorian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Tue, 5 Aug 2008 20:51:13 +0000 (20:51 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/packages@12160 3c298f89-4303-0410-b956-a3cf2f4a3e73

utils/lirc/patches/001-class_kcompat.patch [new file with mode: 0644]

diff --git a/utils/lirc/patches/001-class_kcompat.patch b/utils/lirc/patches/001-class_kcompat.patch
new file mode 100644 (file)
index 0000000..1e16ec2
--- /dev/null
@@ -0,0 +1,116 @@
+Kernel 2.6.26 removes an API previously used by lirc:
+  - http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c3b19ff06e0808555403491d61e8f0cbbb53e933
+
+* add compatibility patch for kernels >= 2.6.26, based on upstream CVS.
+  - http://lirc.cvs.sourceforge.net/lirc/lirc/drivers/kcompat.h?r1=5.34&r2=5.36
+  - http://lirc.cvs.sourceforge.net/lirc/lirc/drivers/lirc_dev/lirc_dev.c?r1=1.57&r2=1.58
+
+Copyright: (C) 2008 Christoph Bartelmus <lirc@bartelmus.de>
+
+--- a/drivers/kcompat.h
++++ b/drivers/kcompat.h
+@@ -36,10 +36,10 @@
+       class_simple_destroy(cls);
+ }
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+-      class_simple_device_add(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++      class_simple_device_add(cs, dev, parent, fmt, ## args)
+-static inline void class_device_destroy(lirc_class_t *cls, dev_t devt)
++static inline void lirc_device_destroy(lirc_class_t *cls, dev_t devt)
+ {
+       class_simple_device_remove(devt);
+ }
+@@ -48,20 +48,40 @@
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15)
+-#define lirc_class_device_create(cs, parent, dev, device, fmt, args...) \
+-      class_device_create(cs, dev, device, fmt, ## args)
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++      class_device_create(cs, dev, parent, fmt, ## args)
+ #else /* >= 2.6.15 */
+-#define lirc_class_device_create class_device_create
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_create(cs, parent, dev, fmt, args...) \
++      class_device_create(cs, NULL, dev, parent, fmt, ## args)
++
++#else /* >= 2.6.26 */
++
++#define lirc_device_create device_create
++
++#endif /* >= 2.6.26 */
++
+ #define LIRC_DEVFS_PREFIX
+-#endif
++#endif /* >= 2.6.15 */
+ typedef struct class lirc_class_t;
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26)
++
++#define lirc_device_destroy class_device_destroy
++
++#else
++
++#define lirc_device_destroy device_destroy
++
+ #endif
++#endif /* >= 2.6.13 */
++
+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 0)
+ #define LIRC_HAVE_DEVFS
+ #define LIRC_HAVE_DEVFS_24
+@@ -133,8 +153,8 @@
+ #ifndef LIRC_HAVE_SYSFS
+ #define class_destroy(x) do { } while (0)
+ #define class_create(x, y) NULL
+-#define class_device_destroy(x, y) do { } while (0)
+-#define lirc_class_device_create(x, y, z, xx, yy, zz) 0
++#define lirc_class_destroy(x, y) do { } while (0)
++#define lirc_class_create(x, y, z, xx, yy, zz) 0
+ #define IS_ERR(x) 0
+ typedef struct class_simple
+ {
+--- a/drivers/lirc_dev/lirc_dev.c
++++ b/drivers/lirc_dev/lirc_dev.c
+@@ -145,7 +145,8 @@
+ #ifdef LIRC_HAVE_DEVFS_26
+       devfs_remove(DEV_LIRC "/%u", ir->p.minor);
+ #endif
+-      class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++      lirc_device_destroy(lirc_class,
++                          MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+       if (ir->buf != ir->p.rbuf) {
+               lirc_buffer_free(ir->buf);
+@@ -400,9 +401,9 @@
+                       S_IFCHR|S_IRUSR|S_IWUSR,
+                       DEV_LIRC "/%u", ir->p.minor);
+ #endif
+-      (void) lirc_class_device_create(lirc_class, NULL,
+-                                      MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
+-                                      ir->p.dev, "lirc%u", ir->p.minor);
++      (void) lirc_device_create(lirc_class, ir->p.dev,
++                                MKDEV(IRCTL_DEV_MAJOR, ir->p.minor),
++                                "lirc%u", ir->p.minor);
+       if (p->sample_rate || p->get_queue) {
+               /* try to fire up polling thread */
+@@ -441,7 +442,8 @@
+       return minor;
+ out_sysfs:
+-      class_device_destroy(lirc_class, MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
++      lirc_device_destroy(lirc_class,
++                          MKDEV(IRCTL_DEV_MAJOR, ir->p.minor));
+ #ifdef LIRC_HAVE_DEVFS_24
+       devfs_unregister(ir->devfs_handle);
+ #endif