--- drivers/lirc_i2c/lirc_i2c.c 2008/05/04 13:49:53 1.46 +++ drivers/lirc_i2c/lirc_i2c.c 2008/08/12 20:50:39 1.47 @@ -54,7 +54,11 @@ #include <linux/i2c.h> #include <linux/i2c-algo-bit.h> +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) #include <asm/semaphore.h> +#else +#include <linux/semaphore.h> +#endif #include "drivers/kcompat.h" #include "drivers/lirc_dev/lirc_dev.h" --- drivers/lirc_dev/lirc_dev.c 2008/01/13 10:45:02 1.56 +++ drivers/lirc_dev/lirc_dev.c 2008/09/06 07:30:16 1.60 @@ -49,7 +49,11 @@ #include <linux/uaccess.h> #include <linux/errno.h> #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 27) #include <asm/semaphore.h> +#else +#include <linux/semaphore.h> +#endif #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0) #include <linux/wrapper.h> #endif @@ -139,14 +143,6 @@ { dprintk(LOGHEAD "cleaning up\n", ir->p.name, ir->p.minor); -#ifdef LIRC_HAVE_DEVFS_24 - devfs_unregister(ir->devfs_handle); -#endif -#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)); - if (ir->buf != ir->p.rbuf) { lirc_buffer_free(ir->buf); kfree(ir->buf); @@ -400,9 +396,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 +437,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 @@ -520,7 +517,18 @@ ir->p.set_use_dec(ir->p.data); module_put(ir->p.owner); up(&ir->buffer_sem); - } else + } + +#ifdef LIRC_HAVE_DEVFS_24 + devfs_unregister(ir->devfs_handle); +#endif +#ifdef LIRC_HAVE_DEVFS_26 + devfs_remove(DEV_LIRC "/%u", ir->p.minor); +#endif + lirc_device_destroy(lirc_class, + MKDEV(IRCTL_DEV_MAJOR, ir->p.minor)); + + if (!ir->open) cleanup(ir); up(&plugin_lock); --- drivers/kcompat.h 2008/01/13 10:26:28 5.34 +++ drivers/kcompat.h 2008/05/14 16:37:49 5.36 @@ -1,4 +1,4 @@ -/* $Id: kcompat.h,v 5.34 2008/01/13 10:26:28 lirc Exp $ */ +/* $Id: kcompat.h,v 5.36 2008/05/14 16:37:49 lirc Exp $ */ #ifndef _KCOMPAT_H #define _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 {