# HG changeset patch # User Florian Pose # Date 1223542848 0 # Node ID 642048176899cc8d6bf9d1a3fd0a284e16044ecd # Parent d64ed42e0d113a3866a4eca91a0f07f65e4e454b Applied patch by Mario Witkowski to support the new class/device interface from kernel 2.6.26. diff -r d64ed42e0d11 -r 642048176899 master/master.c --- a/master/master.c Thu Oct 02 15:38:35 2008 +0000 +++ b/master/master.c Thu Oct 09 09:00:48 2008 +0000 @@ -167,12 +167,16 @@ if (ec_cdev_init(&master->cdev, master, device_number)) goto out_clear_fsm; -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) - master->class_device = class_device_create(class, +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26) + master->class_device = device_create(class, NULL, + MKDEV(MAJOR(device_number), master->index), + "EtherCAT%u", master->index); +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 15) + master->class_device = class_device_create(class, NULL, MKDEV(MAJOR(device_number), master->index), NULL, "EtherCAT%u", master->index); #else - master->class_device = class_device_create(class, NULL, + master->class_device = class_device_create(class, MKDEV(MAJOR(device_number), master->index), NULL, "EtherCAT%u", master->index); #endif @@ -204,7 +208,11 @@ ec_master_t *master /**< EtherCAT master */ ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26) + device_unregister(master->class_device); +#else class_device_unregister(master->class_device); +#endif ec_cdev_clear(&master->cdev); #ifdef EC_EOE ec_master_clear_eoe_handlers(master); diff -r d64ed42e0d11 -r 642048176899 master/master.h --- a/master/master.h Thu Oct 02 15:38:35 2008 +0000 +++ b/master/master.h Thu Oct 09 09:00:48 2008 +0000 @@ -41,6 +41,7 @@ #ifndef __EC_MASTER_H__ #define __EC_MASTER_H__ +#include #include #include #include @@ -88,7 +89,12 @@ unsigned int reserved; /**< \a True, if the master is in use. */ ec_cdev_t cdev; /**< Master character device. */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 26) + struct device *class_device; /**< Master class device. */ +#else struct class_device *class_device; /**< Master class device. */ +#endif + struct semaphore master_sem; /**< Master semaphore. */ ec_device_t main_device; /**< EtherCAT main device. */