Just tested sending ir with the updated lirc and mceusb...

Juergen Lock nox at jelal.kn-bremen.de
Sun Feb 20 11:37:25 UTC 2011


..and found a few more lirc ioctls that needed fixing (or at
least for 64 bit hosts), so here is an update to my remote patch
in webcamd svn:

Index: patches/lirc-patches.diff
===================================================================
--- patches/lirc-patches.diff	(revision 1750)
+++ patches/lirc-patches.diff	(working copy)
@@ -1,3 +1,46 @@
+--- ../v4l-dvb/linux/drivers/media/IR/ir-lirc-codec.c.orig
++++ ../v4l-dvb/linux/drivers/media/IR/ir-lirc-codec.c
+@@ -104,7 +104,7 @@ static int ir_lirc_ioctl(struct inode *n
+ 	struct ir_input_dev *ir_dev;
+ 	int ret = 0;
+ 	void *drv_data;
+-	unsigned long val;
++	__u32 val;
+ 
+ 	lirc = lirc_get_pdata(filep);
+ 	if (!lirc)
+@@ -118,7 +118,7 @@ static int ir_lirc_ioctl(struct inode *n
+ 
+ 	switch (cmd) {
+ 	case LIRC_SET_TRANSMITTER_MASK:
+-		ret = get_user(val, (unsigned long *)arg);
++		ret = get_user(val, (__u32 *)arg);
+ 		if (ret)
+ 			return ret;
+ 
+@@ -129,7 +129,7 @@ static int ir_lirc_ioctl(struct inode *n
+ 		break;
+ 
+ 	case LIRC_SET_SEND_CARRIER:
+-		ret = get_user(val, (unsigned long *)arg);
++		ret = get_user(val, (__u32 *)arg);
+ 		if (ret)
+ 			return ret;
+ 
+@@ -141,11 +141,11 @@ static int ir_lirc_ioctl(struct inode *n
+ 
+ 	case LIRC_GET_SEND_MODE:
+ 		val = LIRC_CAN_SEND_PULSE & LIRC_CAN_SEND_MASK;
+-		ret = put_user(val, (unsigned long *)arg);
++		ret = put_user(val, (__u32 *)arg);
+ 		break;
+ 
+ 	case LIRC_SET_SEND_MODE:
+-		ret = get_user(val, (unsigned long *)arg);
++		ret = get_user(val, (__u32 *)arg);
+ 		if (ret)
+ 			return ret;
+ 
 --- ../v4l-dvb/linux/drivers/media/IR/lirc_dev.c.orig
 +++ ../v4l-dvb/linux/drivers/media/IR/lirc_dev.c
 @@ -519,7 +519,7 @@ EXPORT_SYMBOL(lirc_dev_fop_poll);
@@ -36,6 +79,33 @@
  		if (!result && !(LIRC_MODE2REC(mode) & ir->d.features))
  			result = -EINVAL;
  		/*
+@@ -563,7 +563,7 @@ int lirc_dev_fop_ioctl(struct inode *ino
+ 		 */
+ 		break;
+ 	case LIRC_GET_LENGTH:
+-		result = put_user(ir->d.code_length, (unsigned long *)arg);
++		result = put_user(ir->d.code_length, (__u32 *)arg);
+ 		break;
+ 	case LIRC_GET_MIN_TIMEOUT:
+ 		if (!(ir->d.features & LIRC_CAN_SET_REC_TIMEOUT) ||
+@@ -572,7 +572,7 @@ int lirc_dev_fop_ioctl(struct inode *ino
+ 			break;
+ 		}
+ 
+-		result = put_user(ir->d.min_timeout, (unsigned long *)arg);
++		result = put_user(ir->d.min_timeout, (__u32 *)arg);
+ 		break;
+ 	case LIRC_GET_MAX_TIMEOUT:
+ 		if (!(ir->d.features & LIRC_CAN_SET_REC_TIMEOUT) ||
+@@ -581,7 +581,7 @@ int lirc_dev_fop_ioctl(struct inode *ino
+ 			break;
+ 		}
+ 
+-		result = put_user(ir->d.max_timeout, (unsigned long *)arg);
++		result = put_user(ir->d.max_timeout, (__u32 *)arg);
+ 		break;
+ 	default:
+ 		result = -EINVAL;
 --- ../v4l-dvb/linux/drivers/media/IR/lirc_dev.h.orig
 +++ ../v4l-dvb/linux/drivers/media/IR/lirc_dev.h
 @@ -128,7 +128,7 @@ struct lirc_driver {


More information about the freebsd-multimedia mailing list