linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Jarod Wilson <jarod@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org,
	linux-media@vger.kernel.org, Janne Grunau <j@jannau.net>,
	Christoph Bartelmus <lirc@bartelmus.de>
Subject: Re: [PATCH 2/3 v2] lirc driver for Windows MCE IR transceivers
Date: Mon, 23 Nov 2009 10:46:07 -0200	[thread overview]
Message-ID: <4B0A840F.1040804@redhat.com> (raw)
In-Reply-To: <200910201000.00372.jarod@redhat.com>

Jarod Wilson wrote:
> lirc driver for Windows Media Center Ed. IR transceivers
> 
> Successfully tested with the mce v2 transceiver and remote that shipped with a
> Hauppauge HVR-1500 expresscard tuner and an mce v1 transceiver from an old HP
> Media Center system.
> 
> Changes from prior submission:
> - both v1 and v2 transceivers supported by one driver now
> - transmit works on the v1 devices
> - support for several new devices
> - now uses dev_dbg (and friends) instead of its own dprintk
> 
> Signed-off-by: Jarod Wilson <jarod@redhat.com>
> Signed-off-by: Janne Grunau <j@jannau.net>
> CC: Christoph Bartelmus <lirc@bartelmus.de>
> Tested-by: Jarod Wilson <jarod@redhat.com>
> 
> ---
>  drivers/input/lirc/Kconfig       |    6 
>  drivers/input/lirc/Makefile      |    1 
>  drivers/input/lirc/lirc_mceusb.c | 1235 +++++++++++++++++++++++++++++++++++++++
>  3 files changed, 1241 insertions(+), 1 deletion(-)
> 
> Index: b/drivers/input/lirc/Kconfig
> ===================================================================
> --- a/drivers/input/lirc/Kconfig
> +++ b/drivers/input/lirc/Kconfig
> @@ -11,6 +11,10 @@ menuconfig INPUT_LIRC
>  
>  if INPUT_LIRC
>  
> -# Device-specific drivers go here
> +config LIRC_MCEUSB
> +	tristate "Windows Media Center Ed. USB IR Transceiver"
> +	depends on LIRC_DEV && USB
> +	help
> +	  Driver for Windows Media Center Ed. USB IR Transceivers
>  
>  endif
> Index: b/drivers/input/lirc/Makefile
> ===================================================================
> --- a/drivers/input/lirc/Makefile
> +++ b/drivers/input/lirc/Makefile
> @@ -4,3 +4,4 @@
>  # Each configuration option enables a list of files.
>  
>  obj-$(CONFIG_INPUT_LIRC)	+= lirc_dev.o
> +obj-$(CONFIG_LIRC_MCEUSB)	+= lirc_mceusb.o
> Index: b/drivers/input/lirc/lirc_mceusb.c
> ===================================================================
> --- /dev/null
> +++ b/drivers/input/lirc/lirc_mceusb.c
> @@ -0,0 +1,1235 @@
> +/*
> + * LIRC driver for Windows Media Center Edition USB Infrared Transceivers
> + *
> + * (C) by Martin A. Blatter <martin_a_blatter@yahoo.com>
> + *
> + * Transmitter support and reception code cleanup.
> + * (C) by Daniel Melander <lirc@rajidae.se>
> + *
> + * Original lirc_mceusb driver for 1st-gen device:
> + * Copyright (c) 2003-2004 Dan Conti <dconti@acm.wwu.edu>
> + *
> + * Original lirc_mceusb driver deprecated in favor of this driver, which
> + * supports the 1st-gen device now too. Transmitting on the 1st-gen device
> + * only functions on port #2 at the moment.
> + *
> + * Support for 1st-gen device added June 2009,
> + * by Jarod Wilson <jarod@wilsonet.com>
> + *
> + * Initial transmission support for 1st-gen device added August 2009,
> + * by Patrick Calhoun <phineas@ou.edu>
> + *
> + * Derived from ATI USB driver by Paul Miller and the original
> + * MCE USB driver by Dan Conti (and now including chunks of the latter
> + * relevant to the 1st-gen device initialization)
> + *
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + *
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/errno.h>
> +#include <linux/init.h>
> +#include <linux/slab.h>
> +#include <linux/module.h>
> +#include <linux/kmod.h>
> +#include <linux/smp_lock.h>
> +#include <linux/completion.h>
> +#include <linux/uaccess.h>
> +#include <linux/usb.h>
> +#include <linux/wait.h>
> +#include <linux/time.h>
> +
> +#include "lirc.h"
> +#include "lirc_dev.h"
> +
> +#define DRIVER_VERSION	"1.90"
> +#define DRIVER_AUTHOR	"Daniel Melander <lirc@rajidae.se>, " \
> +			"Martin Blatter <martin_a_blatter@yahoo.com>, " \
> +			"Dan Conti <dconti@acm.wwu.edu>"
> +#define DRIVER_DESC	"Windows Media Center Edition USB IR Transceiver " \
> +			"driver for LIRC"
> +#define DRIVER_NAME	"lirc_mceusb"
> +
> +#define USB_BUFLEN	32	/* USB reception buffer length */
> +#define LIRCBUF_SIZE	256	/* LIRC work buffer length */
> +
> +/* MCE constants */
> +#define MCE_CMDBUF_SIZE	384 /* MCE Command buffer length */
> +#define MCE_TIME_UNIT	50 /* Approx 50us resolution */
> +#define MCE_CODE_LENGTH	5 /* Normal length of packet (with header) */
> +#define MCE_PACKET_SIZE	4 /* Normal length of packet (without header) */
> +#define MCE_PACKET_HEADER 0x84 /* Actual header format is 0x80 + num_bytes */
> +#define MCE_CONTROL_HEADER 0x9F /* MCE status header */
> +#define MCE_TX_HEADER_LENGTH 3 /* # of bytes in the initializing tx header */
> +#define MCE_MAX_CHANNELS 2 /* Two transmitters, hardware dependent? */
> +#define MCE_DEFAULT_TX_MASK 0x03 /* Val opts: TX1=0x01, TX2=0x02, ALL=0x03 */
> +#define MCE_PULSE_BIT	0x80 /* Pulse bit, MSB set == PULSE else SPACE */
> +#define MCE_PULSE_MASK	0x7F /* Pulse mask */
> +#define MCE_MAX_PULSE_LENGTH 0x7F /* Longest transmittable pulse symbol */
> +#define MCE_PACKET_LENGTH_MASK  0x7F /* Pulse mask */
> +
> +
> +/* module parameters */
> +#ifdef CONFIG_USB_DEBUG
> +static int debug = 1;
> +#else
> +static int debug;
> +#endif
> +
> +/* general constants */
> +#define SEND_FLAG_IN_PROGRESS	1
> +#define SEND_FLAG_COMPLETE	2
> +#define RECV_FLAG_IN_PROGRESS	3
> +#define RECV_FLAG_COMPLETE	4
> +
> +#define MCEUSB_INBOUND		1
> +#define MCEUSB_OUTBOUND		2
> +
> +#define VENDOR_PHILIPS		0x0471
> +#define VENDOR_SMK		0x0609
> +#define VENDOR_TATUNG		0x1460
> +#define VENDOR_GATEWAY		0x107b
> +#define VENDOR_SHUTTLE		0x1308
> +#define VENDOR_SHUTTLE2		0x051c
> +#define VENDOR_MITSUMI		0x03ee
> +#define VENDOR_TOPSEED		0x1784
> +#define VENDOR_RICAVISION	0x179d
> +#define VENDOR_ITRON		0x195d
> +#define VENDOR_FIC		0x1509
> +#define VENDOR_LG		0x043e
> +#define VENDOR_MICROSOFT	0x045e
> +#define VENDOR_FORMOSA		0x147a
> +#define VENDOR_FINTEK		0x1934
> +#define VENDOR_PINNACLE		0x2304
> +#define VENDOR_ECS		0x1019
> +#define VENDOR_WISTRON		0x0fb8
> +#define VENDOR_COMPRO		0x185b
> +#define VENDOR_NORTHSTAR	0x04eb

Hmm... we should consider moving the USB ID's to a global kernel header, just like
what we have with PCI IDs...We have some of those ID's on some common headers:

drivers/hid/hid-ids.h
drivers/media/dvb/dvb-usb/dvb-usb-ids.h

Unfortunately, it seems that each subsystem have their own place to store it, and
several drivers have the ID's at their own code.

> +#if 0
> +	Uncomment this if the last 100ms "infinity"-space should be transmitted
> +	to lirc directly instead of at the beginning of the next transmission.
> +	Changes pulse/space order.
> +
> +			if (++i < buf_len && ir->buf_in[i] == 0x01)
> +				send_packet_to_lirc(ir);
> +
> +#endif

Hmm... Generating a different code if uncommenting it doesn't seem nice. It should
be checked what code will produce the right RC5 protocol and uncomment the #if or
remove it completely to avoid temptation of latter change the behavior by uncommenting
it.

> +
> +
> +static int mceusb_lirc_ioctl(struct inode *node, struct file *filep,
> +			     unsigned int cmd, unsigned long arg)
> +{
> +	int result;
> +	unsigned int ivalue;
> +	unsigned long lvalue;
> +	struct mceusb_dev *ir = NULL;
> +
> +	/* Retrieve lirc_driver data for the device */
> +	ir = lirc_get_pdata(filep);
> +	if (!ir || !ir->usb_ep_out)
> +		return -EFAULT;
> +
> +
> +	switch (cmd) {
> +	case LIRC_SET_TRANSMITTER_MASK:
> +
> +		result = get_user(ivalue, (unsigned int *) arg);
> +		if (result)
> +			return result;
> +		switch (ivalue) {
> +		case 0x01: /* Transmitter 1     => 0x04 */
> +		case 0x02: /* Transmitter 2     => 0x02 */
> +		case 0x03: /* Transmitter 1 & 2 => 0x06 */
> +			set_transmitter_mask(ir, ivalue);
> +			break;
> +
> +		default: /* Unsupported transmitter mask */
> +			return MCE_MAX_CHANNELS;
> +		}
> +
> +		dev_dbg(ir->d->dev, ": SET_TRANSMITTERS mask=%d\n", ivalue);
> +		break;
> +
> +	case LIRC_GET_SEND_MODE:
> +
> +		result = put_user(LIRC_SEND2MODE(LIRC_CAN_SEND_PULSE &
> +						 LIRC_CAN_SEND_MASK),
> +				  (unsigned long *) arg);
> +
> +		if (result)
> +			return result;
> +		break;
> +
> +	case LIRC_SET_SEND_MODE:
> +
> +		result = get_user(lvalue, (unsigned long *) arg);
> +
> +		if (result)
> +			return result;
> +		if (lvalue != (LIRC_MODE_PULSE&LIRC_CAN_SEND_MASK))
> +			return -EINVAL;
> +		break;
> +
> +	case LIRC_SET_SEND_CARRIER:
> +
> +		result = get_user(ivalue, (unsigned int *) arg);
> +		if (result)
> +			return result;
> +
> +		set_send_carrier(ir, ivalue);
> +		break;
> +
> +	default:
> +		return lirc_dev_fop_ioctl(node, filep, cmd, arg);
> +	}
> +
> +	return 0;
> +}
> +
> +static struct file_operations lirc_fops = {
> +	.owner		= THIS_MODULE,
> +	.write		= mceusb_transmit_ir,
> +	.ioctl		= mceusb_lirc_ioctl,
> +	.read		= lirc_dev_fop_read,
> +	.poll		= lirc_dev_fop_poll,
> +	.open		= lirc_dev_fop_open,
> +	.release	= lirc_dev_fop_close,
> +};
> +
> +static int mceusb_gen1_init(struct mceusb_dev *ir)
> +{
> +	int i, ret;
> +	char junk[64], data[8];
> +	int partial = 0;
> +
> +	/*
> +	 * Clear off the first few messages. These look like calibration
> +	 * or test data, I can't really tell. This also flushes in case
> +	 * we have random ir data queued up.
> +	 */
> +	for (i = 0; i < 40; i++)
> +		usb_bulk_msg(ir->usbdev,
> +			usb_rcvbulkpipe(ir->usbdev,
> +				ir->usb_ep_in->bEndpointAddress),
> +			junk, 64, &partial, HZ * 10);
> +
> +	ir->is_pulse = 1;
> +
> +	memset(data, 0, 8);

Please use, instead:
	memset(data, 0, sizeof(data));

> +
> +	/* Get Status */
> +	ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
> +			      USB_REQ_GET_STATUS, USB_DIR_IN,
> +			      0, 0, data, 2, HZ * 3);
> +
> +	/*    ret = usb_get_status( ir->usbdev, 0, 0, data ); */
> +	dev_dbg(ir->d->dev, "%s - ret = %d status = 0x%x 0x%x\n", __func__,
> +		ret, data[0], data[1]);
> +
> +	/*
> +	 * This is a strange one. They issue a set address to the device
> +	 * on the receive control pipe and expect a certain value pair back
> +	 */
> +	memset(data, 0, 8);

Please use, instead:
	memset(data, 0, sizeof(data));


> +
> +	ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0),
> +			      USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0,
> +			      data, 2, HZ * 3);
> +	dev_dbg(ir->d->dev, "%s - ret = %d, devnum = %d\n",
> +		__func__, ret, ir->usbdev->devnum);
> +	dev_dbg(ir->d->dev, "%s - data[0] = %d, data[1] = %d\n",
> +		__func__, data[0], data[1]);
> +
> +	/* set feature: bit rate 38400 bps */
> +	ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
> +			      USB_REQ_SET_FEATURE, USB_TYPE_VENDOR,
> +			      0xc04e, 0x0000, NULL, 0, HZ * 3);
> +
> +	dev_dbg(ir->d->dev, "%s - ret = %d\n", __func__, ret);
> +
> +	/* bRequest 4: set char length to 8 bits */
> +	ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
> +			      4, USB_TYPE_VENDOR,
> +			      0x0808, 0x0000, NULL, 0, HZ * 3);
> +	dev_dbg(ir->d->dev, "%s - retB = %d\n", __func__, ret);
> +
> +	/* bRequest 2: set handshaking to use DTR/DSR */
> +	ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0),
> +			      2, USB_TYPE_VENDOR,
> +			      0x0000, 0x0100, NULL, 0, HZ * 3);
> +	dev_dbg(ir->d->dev, "%s - retC = %d\n", __func__, ret);
> +
> +	return ret;
> +
> +};
> +
> +static int mceusb_dev_probe(struct usb_interface *intf,
> +				const struct usb_device_id *id)
> +{
> +	struct usb_device *dev = interface_to_usbdev(intf);
> +	struct usb_host_interface *idesc;
> +	struct usb_endpoint_descriptor *ep = NULL;
> +	struct usb_endpoint_descriptor *ep_in = NULL;
> +	struct usb_endpoint_descriptor *ep_out = NULL;
> +	struct usb_host_config *config;
> +	struct mceusb_dev *ir = NULL;
> +	struct lirc_driver *driver = NULL;
> +	struct lirc_buffer *rbuf = NULL;
> +	int devnum, pipe, maxp;
> +	int minor = 0;
> +	int i;
> +	char buf[63], name[128] = "";
> +	int mem_failure = 0;
> +	int is_pinnacle;
> +	int is_microsoft_gen1;
> +
> +	dev_dbg(&intf->dev, ": %s called\n", __func__);
> +
> +	usb_reset_device(dev);
> +
> +	config = dev->actconfig;
> +
> +	idesc = intf->cur_altsetting;
> +
> +	is_pinnacle = usb_match_id(intf, pinnacle_list) ? 1 : 0;
> +
> +	is_microsoft_gen1 = usb_match_id(intf, microsoft_gen1_list) ? 1 : 0;
> +
> +	/* step through the endpoints to find first bulk in and out endpoint */
> +	for (i = 0; i < idesc->desc.bNumEndpoints; ++i) {
> +		ep = &idesc->endpoint[i].desc;
> +
> +		if ((ep_in == NULL)
> +			&& ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
> +			    == USB_DIR_IN)
> +			&& (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_BULK)
> +			|| ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_INT))) {
> +
> +			dev_dbg(&intf->dev, ": acceptable inbound endpoint "
> +				"found\n");
> +			ep_in = ep;
> +			ep_in->bmAttributes = USB_ENDPOINT_XFER_INT;
> +			if (is_pinnacle)
> +				/*
> +				 * setting seems to 1 seem to cause issues with
> +				 * Pinnacle timing out on transfer.
> +				 */
> +				ep_in->bInterval = ep->bInterval;
> +			else
> +				ep_in->bInterval = 1;
> +		}
> +
> +		if ((ep_out == NULL)
> +			&& ((ep->bEndpointAddress & USB_ENDPOINT_DIR_MASK)
> +			    == USB_DIR_OUT)
> +			&& (((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_BULK)
> +			|| ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
> +			    == USB_ENDPOINT_XFER_INT))) {
> +
> +			dev_dbg(&intf->dev, ": acceptable outbound endpoint "
> +				"found\n");
> +			ep_out = ep;
> +			ep_out->bmAttributes = USB_ENDPOINT_XFER_INT;
> +			if (is_pinnacle)
> +				/*
> +				 * setting seems to 1 seem to cause issues with
> +				 * Pinnacle timing out on transfer.
> +				 */
> +				ep_out->bInterval = ep->bInterval;
> +			else
> +				ep_out->bInterval = 1;
> +		}
> +	}
> +	if (ep_in == NULL) {
> +		dev_dbg(&intf->dev, ": inbound and/or endpoint not found\n");
> +		return -ENODEV;
> +	}
> +
> +	devnum = dev->devnum;
> +	pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress);
> +	maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));
> +
> +	mem_failure = 0;
> +	ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL);
> +	if (!ir) {
> +		mem_failure = 1;
> +		goto mem_failure_switch;
> +	}
> +
> +	driver = kzalloc(sizeof(struct lirc_driver), GFP_KERNEL);
> +	if (!driver) {
> +		mem_failure = 2;
> +		goto mem_failure_switch;
> +	}
> +
> +	rbuf = kmalloc(sizeof(struct lirc_buffer), GFP_KERNEL);

kzalloc?

> +	if (!rbuf) {
> +		mem_failure = 3;
> +		goto mem_failure_switch;
> +	}
> +
> +	if (lirc_buffer_init(rbuf, sizeof(int), LIRCBUF_SIZE)) {
> +		mem_failure = 4;
> +		goto mem_failure_switch;
> +	}
> +
> +	ir->buf_in = usb_buffer_alloc(dev, maxp, GFP_ATOMIC, &ir->dma_in);
> +	if (!ir->buf_in) {
> +		mem_failure = 5;
> +		goto mem_failure_switch;
> +	}
> +
> +	ir->urb_in = usb_alloc_urb(0, GFP_KERNEL);
> +	if (!ir->urb_in) {
> +		mem_failure = 7;
> +		goto mem_failure_switch;
> +	}
> +
> +	strcpy(driver->name, DRIVER_NAME);
> +	driver->minor = -1;
> +	driver->features = LIRC_CAN_SEND_PULSE |
> +		LIRC_CAN_SET_TRANSMITTER_MASK |
> +		LIRC_CAN_REC_MODE2 |
> +		LIRC_CAN_SET_SEND_CARRIER;
> +	driver->data = ir;
> +	driver->rbuf = rbuf;
> +	driver->set_use_inc = &mceusb_ir_open;
> +	driver->set_use_dec = &mceusb_ir_close;
> +	driver->code_length = sizeof(int) * 8;
> +	driver->fops  = &lirc_fops;
> +	driver->dev   = &intf->dev;
> +	driver->owner = THIS_MODULE;
> +
> +	mutex_init(&ir->lock);
> +	init_waitqueue_head(&ir->wait_out);
> +
> +	minor = lirc_register_driver(driver);
> +	if (minor < 0)
> +		mem_failure = 9;
> +
> +mem_failure_switch:
> +
> +	switch (mem_failure) {
> +	case 9:
> +		usb_free_urb(ir->urb_in);
> +	case 7:
> +		usb_buffer_free(dev, maxp, ir->buf_in, ir->dma_in);
> +	case 5:
> +		lirc_buffer_free(rbuf);
> +	case 4:
> +		kfree(rbuf);
> +	case 3:
> +		kfree(driver);
> +	case 2:
> +		kfree(ir);
> +	case 1:
> +		dev_info(&intf->dev, "out of memory (code=%d)\n", mem_failure);
> +		return -ENOMEM;
> +	}

That seems ugly, IMHO ;) Better to use the standard way for it. Also, as kfree(NULL) is
valid, you could simply remove cases 3, 2 and 1.

The better is to use the standard way for errors, like:

error_free_urb:
	usb_free_urb(ir->urb_in);
error_free_usb_buf:
	usb_buffer_free(dev, maxp, ir->buf_in, ir->dma_in);
error_free_lirc_buf:
	lirc_buffer_free(rbuf);
error:
	kfree(rbuf);
	kfree(driver);
	kfree(ir);
	dev_info(&intf->dev, "out of memory (code=%d)\n", mem_failure);

	return -ENOMEM;
	

> +
> +	driver->minor = minor;
> +	ir->d = driver;
> +	ir->devnum = devnum;
> +	ir->usbdev = dev;
> +	ir->len_in = maxp;

> +	ir->overflow_len = 0;
> +	ir->flags.connected = 0;

There's no need to initialize with 0, since kzalloc were used.

> +	ir->flags.pinnacle = is_pinnacle;
> +	ir->flags.microsoft_gen1 = is_microsoft_gen1;
> +	ir->flags.transmitter_mask_inverted =
> +		usb_match_id(intf, transmitter_mask_list) ? 0 : 1;
> +
> +	ir->lircdata = PULSE_MASK;

> +	ir->is_pulse = 0;

There's no need to initialize with 0, since kzalloc were used.

Cheers,
Mauro

  parent reply	other threads:[~2009-11-23 12:46 UTC|newest]

Thread overview: 196+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-20 13:56 [PATCH 0/3 v2] linux infrared remote control drivers Jarod Wilson
2009-10-20 13:58 ` [PATCH 1/3 v2] lirc core device driver infrastructure Jarod Wilson
2009-11-23 11:47   ` Mauro Carvalho Chehab
2009-11-23 12:36     ` [RFC] Should we create a raw input interface for IR's ? - Was: " Mauro Carvalho Chehab
2009-11-23 14:14       ` Krzysztof Halasa
2009-11-23 15:20         ` Devin Heitmueller
2009-11-23 16:53           ` James Mastros
2009-11-23 20:09             ` Krzysztof Halasa
2009-11-23 17:05           ` James Mastros
2009-11-23 17:12             ` Devin Heitmueller
2009-11-23 17:50             ` Mauro Carvalho Chehab
2009-11-23 20:14               ` Krzysztof Halasa
2009-11-23 16:19         ` Stefan Richter
2009-11-23 17:39           ` Mauro Carvalho Chehab
2009-11-23 20:23             ` Krzysztof Halasa
2009-11-26 12:16               ` Mauro Carvalho Chehab
2009-11-26 18:18                 ` Krzysztof Halasa
2009-11-26 19:06                   ` Mauro Carvalho Chehab
2009-11-28  2:39                     ` Mauro Carvalho Chehab
2009-11-28  2:54                       ` Dmitry Torokhov
2009-11-28  9:43                         ` Mauro Carvalho Chehab
2009-11-28 10:31                           ` Stefan Richter
2009-11-28 10:43                           ` Arnd Bergmann
2009-11-23 17:29         ` Mauro Carvalho Chehab
2009-11-23 19:17           ` Jarod Wilson
2009-11-23 20:46             ` Krzysztof Halasa
2009-11-23 21:10             ` Christoph Bartelmus
2009-11-24  4:18               ` Jarod Wilson
2009-11-23 20:41           ` Krzysztof Halasa
2009-11-26 12:36             ` Mauro Carvalho Chehab
2009-11-26 13:22               ` Andy Walls
2009-11-26 18:24               ` Krzysztof Halasa
2009-11-26 19:08                 ` Mauro Carvalho Chehab
2009-11-26 20:33                   ` Krzysztof Halasa
2009-11-26 21:05                     ` Mauro Carvalho Chehab
2009-11-26 21:27                       ` Krzysztof Halasa
2009-11-26 22:07                         ` Mauro Carvalho Chehab
2009-11-27  0:19                           ` Krzysztof Halasa
2009-11-27  0:34                             ` Arnd Bergmann
2009-11-26 23:14                         ` Dmitry Torokhov
2009-11-26 23:10                       ` Dmitry Torokhov
2009-11-26 22:59                   ` Trent Piepho
2009-11-27  0:45                     ` Krzysztof Halasa
2009-11-27  2:50                     ` hermann pitton
2009-11-26 20:37               ` Christoph Bartelmus
2009-11-26 20:59                 ` Mauro Carvalho Chehab
2009-11-26 22:05                   ` Christoph Bartelmus
2009-11-26 22:14                     ` Mauro Carvalho Chehab
2009-11-26 23:09                   ` Trent Piepho
2009-11-23 17:37         ` Dmitry Torokhov
2009-11-23 20:51           ` Krzysztof Halasa
2009-11-26  5:21             ` Dmitry Torokhov
2009-11-26 17:46               ` Krzysztof Halasa
2009-11-26 17:50                 ` Mauro Carvalho Chehab
2009-11-26 21:39                 ` Dmitry Torokhov
2009-11-27  0:13                   ` Krzysztof Halasa
2009-11-27  0:26                     ` Dmitry Torokhov
2009-11-27  0:37                       ` Krzysztof Halasa
2009-11-24  4:37           ` Jarod Wilson
2009-11-24 23:32             ` IR raw input is not sutable for input system Maxim Levitsky
2009-11-25  3:32               ` Trent Piepho
2009-11-25 13:28                 ` Maxim Levitsky
2009-11-25 21:32                   ` Sean Young
2009-11-25 22:30                     ` Krzysztof Halasa
2009-11-25 22:52                       ` Maxim Levitsky
2009-11-26 18:36                         ` Krzysztof Halasa
2009-11-25 17:18                 ` Krzysztof Halasa
2009-11-26  5:41                 ` Dmitry Torokhov
2009-11-25 17:12               ` Krzysztof Halasa
2009-11-26  5:38               ` Dmitry Torokhov
2009-11-26  5:31             ` [RFC] Should we create a raw input interface for IR's ? - Was: Re: [PATCH 1/3 v2] lirc core device driver infrastructure Dmitry Torokhov
2009-11-26  6:16               ` Jarod Wilson
2009-11-26 16:07                 ` Mauro Carvalho Chehab
2009-11-26 23:23                 ` Dmitry Torokhov
2009-11-27  2:28                   ` Jarod Wilson
2009-11-27  3:08                     ` Jon Smirl
2009-11-27  4:33                       ` Dmitry Torokhov
2009-11-27  5:06                         ` Jon Smirl
2009-11-27  7:33                           ` Christoph Bartelmus
2009-11-27 15:33                             ` Jon Smirl
2009-11-30  5:01                           ` Jarod Wilson
2009-11-27  4:30                     ` Dmitry Torokhov
2009-11-23 21:11         ` Christoph Bartelmus
2009-11-23 21:46           ` Krzysztof Halasa
2009-11-23 21:54             ` Devin Heitmueller
2009-11-23 22:31               ` Krzysztof Halasa
2009-11-23 22:37                 ` Devin Heitmueller
2009-11-23 22:53                   ` Krzysztof Halasa
2009-12-12 22:04                 ` david
2009-11-24  1:14             ` Andy Walls
2009-11-26 13:25               ` Mauro Carvalho Chehab
2009-11-26 13:48                 ` Andy Walls
2009-11-26 16:35                   ` Mauro Carvalho Chehab
2009-11-24  0:53           ` Andy Walls
2009-11-24 13:32             ` Jarod Wilson
2009-11-25 16:53               ` Krzysztof Halasa
2009-11-25 17:20                 ` Christoph Bartelmus
2009-11-25 17:40                   ` Krzysztof Halasa
2009-11-25 18:07                     ` Jarod Wilson
2009-11-25 18:20                       ` Devin Heitmueller
2009-11-25 18:43                         ` [RFC] Should we create a raw input interface for IR's ? Jarod Wilson
2009-11-25 20:49                           ` Krzysztof Halasa
2009-11-26  5:53                             ` Dmitry Torokhov
2009-11-26 18:40                               ` Krzysztof Halasa
2009-11-26 23:28                                 ` Dmitry Torokhov
2009-11-27  0:28                                   ` Krzysztof Halasa
2009-11-25 20:47                         ` [RFC] Should we create a raw input interface for IR's ? - Was: Re: [PATCH 1/3 v2] lirc core device driver infrastructure Krzysztof Halasa
2009-11-25 21:58                         ` Gerd Hoffmann
2009-11-25 22:31                           ` Christoph Bartelmus
2009-11-25 23:22                             ` Gerd Hoffmann
2009-11-26  7:28                               ` Christoph Bartelmus
2009-11-26  8:39                                 ` Gerd Hoffmann
2009-11-26 16:41                               ` Krzysztof Halasa
2009-11-26  4:26                           ` Andy Walls
2009-11-26 14:45                           ` Mauro Carvalho Chehab
2009-11-26 15:48                             ` Jon Smirl
2009-11-26 16:03                               ` Jon Smirl
2009-11-26 23:45                           ` Dmitry Torokhov
2009-11-26  3:50                         ` Andy Walls
2009-11-25 20:44                       ` Krzysztof Halasa
2009-11-26  3:31                       ` Andy Walls
2009-11-26  4:00                         ` hermann pitton
2009-11-26  5:41                         ` Jarod Wilson
2009-11-26 14:28                       ` Mauro Carvalho Chehab
2009-11-25 17:44                 ` Jarod Wilson
2009-11-25 19:27                   ` Krzysztof Halasa
2009-11-26  4:46                     ` Jarod Wilson
2009-11-26  8:01                   ` Christoph Bartelmus
2009-11-26  8:08                     ` Dmitry Torokhov
2009-11-26 16:25                     ` Mauro Carvalho Chehab
2009-11-26 18:13                       ` Krzysztof Halasa
2009-11-26 18:55                         ` Mauro Carvalho Chehab
2009-11-26 20:28                           ` Krzysztof Halasa
2009-11-26 21:28                             ` Mauro Carvalho Chehab
2009-11-27  7:45                       ` Christoph Bartelmus
2009-11-26 13:54               ` Mauro Carvalho Chehab
2009-11-26 17:32                 ` Jarod Wilson
2009-11-26 17:49                   ` Mauro Carvalho Chehab
2009-11-26 23:50                     ` Dmitry Torokhov
2009-11-27  1:45                       ` Mauro Carvalho Chehab
2009-11-25 16:45             ` Krzysztof Halasa
2009-11-26 14:05               ` Mauro Carvalho Chehab
2009-11-26 19:43                 ` Andy Walls
2009-12-07 18:19                   ` Jarod Wilson
2009-12-07 23:02                     ` Mauro Carvalho Chehab
2009-12-08  2:42                     ` Andy Walls
2009-12-08  4:22                       ` Dmitry Torokhov
2009-12-08 11:44                         ` Mauro Carvalho Chehab
2009-12-08 14:13                           ` Krzysztof Halasa
2009-12-08 14:25                             ` Mauro Carvalho Chehab
2009-12-08 17:06                           ` Dmitry Torokhov
2009-12-08 12:35                         ` Andy Walls
2009-12-08 12:52                           ` Jon Smirl
2009-12-08 13:40                             ` Mauro Carvalho Chehab
2009-12-08 14:01                               ` Jon Smirl
2009-12-08 14:16                                 ` Mauro Carvalho Chehab
2009-12-08 14:31                                   ` Jon Smirl
2009-12-08 14:40                                     ` Mauro Carvalho Chehab
2009-12-08 16:19                                       ` Jon Smirl
2009-12-08 23:30                                         ` Krzysztof Halasa
2009-12-09  0:04                                           ` Mauro Carvalho Chehab
2009-12-08 17:16                             ` Dmitry Torokhov
2009-12-08 13:30                           ` Mauro Carvalho Chehab
2009-12-08 13:47                             ` Jon Smirl
2009-12-08 13:59                               ` Mauro Carvalho Chehab
2009-12-08 14:19                                 ` Jon Smirl
2009-12-08 14:34                                   ` Mauro Carvalho Chehab
2009-12-08 15:56                                     ` Jon Smirl
2009-12-08 16:27                                       ` Mauro Carvalho Chehab
2009-12-08 18:15                                         ` Jon Smirl
2009-12-09  0:28                                           ` Mauro Carvalho Chehab
2009-12-08 16:22                                     ` Ferenc Wagner
2009-12-08 11:32                       ` Mauro Carvalho Chehab
2009-12-08 12:46                         ` Andy Walls
2009-12-08 17:19                           ` Dmitry Torokhov
2009-12-09  0:07                             ` Mauro Carvalho Chehab
2009-11-26  5:49             ` Dmitry Torokhov
2009-11-26  6:23               ` Jarod Wilson
2009-11-26  9:14                 ` Gerd Hoffmann
2009-11-26 17:15                   ` Jarod Wilson
2009-11-26 12:28                 ` Andy Walls
2009-11-26 13:17             ` Mauro Carvalho Chehab
2009-11-23 22:25       ` Krzysztof Halasa
2009-11-24 23:23       ` Matthieu CASTET
2009-10-20 14:00 ` [PATCH 2/3 v2] lirc driver for Windows MCE IR transceivers Jarod Wilson
2009-11-13 20:43   ` Stefan Lippers-Hollmann
2009-11-15  6:55     ` Jarod Wilson
2009-11-23 12:46   ` Mauro Carvalho Chehab [this message]
2009-10-20 14:00 ` [PATCH 3/3 v2] lirc driver for SoundGraph iMON IR receivers and displays Jarod Wilson
2009-11-23 12:58   ` Mauro Carvalho Chehab
2009-11-24  4:31     ` Jarod Wilson
2009-11-04 22:56 ` [PATCH 0/3 v2] linux infrared remote control drivers Jarod Wilson
2009-11-05  0:07   ` Andy Walls
2009-11-05  3:28     ` Jarod Wilson
2009-11-05  0:31   ` Mauro Carvalho Chehab
2009-11-05  3:41     ` Jarod Wilson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B0A840F.1040804@redhat.com \
    --to=mchehab@redhat.com \
    --cc=j@jannau.net \
    --cc=jarod@redhat.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=lirc@bartelmus.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).