Skip to contentSkip to conversation

Add EV_IR bit

PATCH In review David Härdeman 2 participants 5 messages Aug 12, 2009 – Aug 13, 2009

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add EV_IR bit

This patch adds an EV_IR bit to allow input drivers to let userspace know that the hardware is an infrared remote control transceiver.

No dev->irbit is defined yet but I plan to add that later (which would be used to indicate whether the hardware supports RX, TX, etc).

If the patch is accepted I'll send followup patches adding the appropriate input_set_capability call to the relevant drivers.

drivers/input/input.c +4 -0
Index: linux-2.6/drivers/input/input.c
===================================================================
@@ -1375,6 +1375,10 @@
 		/* do nothing */
 		break;
 
+	case EV_IR:
+		/* do nothing */
+		break;
+
 	default:
 		printk(KERN_ERR
 			"input_set_capability: unknown type %u (code %u)\n",
include/linux/input.h +1 -0
Index: linux-2.6/include/linux/input.h
===================================================================
@@ -98,6 +98,7 @@
 #define EV_FF			0x15
 #define EV_PWR			0x16
 #define EV_FF_STATUS		0x17
+#define EV_IR			0x18
 #define EV_MAX			0x1f
 #define EV_CNT			(EV_MAX+1)
 

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

maintainer
#1 lore raw
Quoted 9 lines · David Härdeman

This patch adds an EV_IR bit to allow input drivers to let userspace know that the hardware is an infrared remote control transceiver.

No dev->irbit is defined yet but I plan to add that later (which would be used to indicate whether the hardware supports RX, TX, etc).

If the patch is accepted I'll send followup patches adding the appropriate input_set_capability call to the relevant drivers.

Do you expect devices to actually _send_ EV_IR events?

Signature · 5 lines
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#2 lore raw
Quoted 4 lines · Dmitry Torokhov
Quoted 3 lines · David Härdeman

This patch adds an EV_IR bit to allow input drivers to let userspace know that the hardware is an infrared remote control transceiver.

Quoted 8 lines
Quoted 6 lines

No dev->irbit is defined yet but I plan to add that later (which would be used to indicate whether the hardware supports RX, TX, etc).

If the patch is accepted I'll send followup patches adding the appropriate input_set_capability call to the relevant drivers.

Do you expect devices to actually _send_ EV_IR events?

Yes, and I have some patches going in that direction (loosely based on Jon Smirl's in-kernel IR driver patchset).

The basic idea so far would be to add:

IR_PROTOCOL
IR_TOGGLE
IR_DEVICE
IR_SUBDEVICE
IR_COMMAND

Which should be sufficient at this point for the major IR protocols. Then input drivers can report to userspace the actual command they received (and hacks like using MSC_SCAN / MSC_RAW / the sysfs attribute you commented in my winbond-cir driver would not be necessary).

It also allows userspace to know that a button was pressed even where there is no keymap for that particular remote which should help a lot in building custom keymaps.

Further along we might also add IR_RAW to signal to willing user-space apps the raw IR timings for more esoteric remotes (I guess it would need to be enabled/disabled by an ioctl).

Signature · 6 lines
David Härdeman

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
maintainer
#3 lore raw
Quoted 30 lines · David Härdeman
Quoted 4 lines · Dmitry Torokhov
Quoted 3 lines · David Härdeman

This patch adds an EV_IR bit to allow input drivers to let userspace know that the hardware is an infrared remote control transceiver.

Quoted 8 lines
Quoted 6 lines

No dev->irbit is defined yet but I plan to add that later (which would be used to indicate whether the hardware supports RX, TX, etc).

If the patch is accepted I'll send followup patches adding the appropriate input_set_capability call to the relevant drivers.

Do you expect devices to actually _send_ EV_IR events?

Yes, and I have some patches going in that direction (loosely based on Jon Smirl's in-kernel IR driver patchset).

The basic idea so far would be to add:

IR_PROTOCOL
IR_TOGGLE
IR_DEVICE
IR_SUBDEVICE
IR_COMMAND

Which should be sufficient at this point for the major IR protocols. Then input drivers can report to userspace the actual command they received (and hacks like using MSC_SCAN / MSC_RAW / the sysfs attribute you commented in my winbond-cir driver would not be necessary).

Quoted 8 lines

It also allows userspace to know that a button was pressed even where there is no keymap for that particular remote which should help a lot in building custom keymaps.

Further along we might also add IR_RAW to signal to willing user-space apps the raw IR timings for more esoteric remotes (I guess it would need to be enabled/disabled by an ioctl).

Would you mind posting the complete patchset?

Signature · 5 lines
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#4 lore raw
Quoted 6 lines · Dmitry Torokhov
Quoted 5 lines · David Härdeman
Quoted 1 line · Dmitry Torokhov

Do you expect devices to actually _send_ EV_IR events?

Yes, and I have some patches going in that direction (loosely based on Jon Smirl's in-kernel IR driver patchset).

...

Quoted 2 lines

Would you mind posting the complete patchset?

Here's an example of what I've been considering, it should hopefully convey the general idea. (Not actually a tested patch yet).

drivers/input/input.c +8 -0
Index: linux-2.6/drivers/input/input.c
===================================================================
@@ -274,6 +274,10 @@
 	case EV_PWR:
 		disposition = INPUT_PASS_TO_ALL;
 		break;
+
+	case EV_IR:
+		disposition = INPUT_PASS_TO_ALL;
+		break;
 	}
 
 	if (disposition != INPUT_IGNORE_EVENT && type != EV_SYN)
@@ -1375,6 +1379,10 @@
 		/* do nothing */
 		break;
 
+	case EV_IR:
+		/* do nothing */
+		break;
+
 	default:
 		printk(KERN_ERR
 			"input_set_capability: unknown type %u (code %u)\n",
include/linux/input.h +32 -0
Index: linux-2.6/include/linux/input.h
===================================================================
@@ -98,6 +98,7 @@
 #define EV_FF			0x15
 #define EV_PWR			0x16
 #define EV_FF_STATUS		0x17
+#define EV_IR			0x18
 #define EV_MAX			0x1f
 #define EV_CNT			(EV_MAX+1)
 
@@ -985,6 +986,32 @@
 #define FF_MAX		0x7f
 #define FF_CNT		(FF_MAX+1)
 
+/*
+ * IR events
+ */
+#define IR_RAW		0x00
+#define IR_PROTOCOL	0x01
+#define IR_TOGGLE	0x02
+#define IR_COMMAND	0x03
+#define IR_DEVICE	0x04
+#define IR_SUBDEVICE	0x05
+#define IR_CUSTOMER	0x06
+
+/*
+ * IR Protocol values
+ */
+#define IR_PROTOCOL_RC5		0x00
+#define IR_PROTOCOL_RC5X	0x01
+#define IR_PROTOCOL_RC6_0	0x02
+#define IR_PROTOCOL_RC6_6A	0x03
+#define IR_PROTOCOL_SONY_12	0x04
+#define IR_PROTOCOL_SONY_15	0x05
+#define IR_PROTOCOL_SONY_20	0x06
+#define IR_PROTOCOL_NEC		0x07 /* NEC1, NEC2, NEC1X, NEC2X */
+#define IR_PROTOCOL_NEC_REP	0x08
+
+/* The value of TOGGLE, COMMAND, etc, is protocol-specific */
+
 #ifdef __KERNEL__
 
 /*
@@ -1323,6 +1350,11 @@
 	input_event(dev, EV_FF_STATUS, code, value);
 }
 
+static inline void input_report_ir(struct input_dev *dev, unsigned int code, int value)
+{
+	input_event(dev, EV_IR, code, value);
+}
+
 static inline void input_report_switch(struct input_dev *dev, unsigned int code, int value)
 {
 	input_event(dev, EV_SW, code, !!value);
include/linux/input-ir.h new file +104 -0

104 lines not on this page · raw message

drivers/media/dvb/ttpci/budget-ci.c +7 -0
Index: linux-2.6/drivers/media/dvb/ttpci/budget-ci.c
===================================================================
@@ -34,6 +34,7 @@
 #include <linux/slab.h>
 #include <linux/interrupt.h>
 #include <linux/input.h>
+#include <linux/input-ir.h>
 #include <linux/spinlock.h>
 #include <media/ir-common.h>
 
@@ -173,6 +174,12 @@
 	    budget_ci->ir.rc5_device != (command & 0x1f))
 		return;
 
+	/* Report the raw RC5 event to userspace */
+	input_report_ir_rc5(budget_ci->dev,
+			    command & 0x1f,
+			    budget_ci->ir.ir_key,
+			    command & 0x20 ? 1 : 0);
+
 	/* Is this a repeated key sequence? (same device, command, toggle) */
 	raw = budget_ci->ir.ir_key | (command << 8);
 	if (budget_ci->ir.last_raw != raw || !timer_pending(&budget_ci->ir.timer_keyup)) {

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html