[media] lirc: remove lirc_ttusbir driver
authorSean Young <sean@mess.org>
Mon, 13 Aug 2012 11:59:50 +0000 (08:59 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 13 Aug 2012 19:19:14 +0000 (16:19 -0300)
This has been replaced by the ttusbir driver.

Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/staging/media/lirc/Kconfig
drivers/staging/media/lirc/Makefile
drivers/staging/media/lirc/lirc_ttusbir.c [deleted file]

index 526ec0fc2f042703b0237d9e29887dfd47fb23f8..e60a59fc252bd22255739b5053fe25fb8363e5d7 100644 (file)
@@ -63,12 +63,6 @@ config LIRC_SIR
        help
          Driver for the SIR IrDA port
 
-config LIRC_TTUSBIR
-       tristate "Technotrend USB IR Receiver"
-       depends on LIRC && USB
-       help
-         Driver for the Technotrend USB IR Receiver
-
 config LIRC_ZILOG
        tristate "Zilog/Hauppauge IR Transmitter"
        depends on LIRC && I2C
index d76b0fa2af53413bbfe4b318fda00e0beb060a73..b90fcabddab6fe48dbe93066cdf01d5b4674a5a4 100644 (file)
@@ -10,5 +10,4 @@ obj-$(CONFIG_LIRC_PARALLEL)   += lirc_parallel.o
 obj-$(CONFIG_LIRC_SASEM)       += lirc_sasem.o
 obj-$(CONFIG_LIRC_SERIAL)      += lirc_serial.o
 obj-$(CONFIG_LIRC_SIR)         += lirc_sir.o
-obj-$(CONFIG_LIRC_TTUSBIR)     += lirc_ttusbir.o
 obj-$(CONFIG_LIRC_ZILOG)       += lirc_zilog.o
diff --git a/drivers/staging/media/lirc/lirc_ttusbir.c b/drivers/staging/media/lirc/lirc_ttusbir.c
deleted file mode 100644 (file)
index 3bb865c..0000000
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * lirc_ttusbir.c
- *
- * lirc_ttusbir - LIRC device driver for the TechnoTrend USB IR Receiver
- *
- * Copyright (C) 2007 Stefan Macher <st_maker-lirc@yahoo.de>
- *
- * This LIRC driver provides access to the TechnoTrend USB IR Receiver.
- * The receiver delivers the IR signal as raw sampled true/false data in
- * isochronous USB packets each of size 128 byte.
- * Currently the driver reduces the sampling rate by factor of 8 as this
- * is still more than enough to decode RC-5 - others should be analyzed.
- * But the driver does not rely on RC-5 it should be able to decode every
- * IR signal that is not too fast.
- */
-
-/*
- *  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/init.h>
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/slab.h>
-#include <linux/usb.h>
-
-#include <media/lirc.h>
-#include <media/lirc_dev.h>
-
-MODULE_DESCRIPTION("TechnoTrend USB IR device driver for LIRC");
-MODULE_AUTHOR("Stefan Macher (st_maker-lirc@yahoo.de)");
-MODULE_LICENSE("GPL");
-
-/* #define DEBUG */
-#ifdef DEBUG
-#define DPRINTK printk
-#else
-#define DPRINTK(_x_, a...)
-#endif
-
-/* function declarations */
-static int probe(struct usb_interface *intf, const struct usb_device_id *id);
-static void disconnect(struct usb_interface *intf);
-static void urb_complete(struct urb *urb);
-static int set_use_inc(void *data);
-static void set_use_dec(void *data);
-
-static int num_urbs = 2;
-module_param(num_urbs, int, S_IRUGO);
-MODULE_PARM_DESC(num_urbs,
-                "Number of URBs in queue. Try to increase to 4 in case "
-                "of problems (default: 2; minimum: 2)");
-
-/* table of devices that work with this driver */
-static struct usb_device_id device_id_table[] = {
-       /* TechnoTrend USB IR Receiver */
-       { USB_DEVICE(0x0B48, 0x2003) },
-       /* Terminating entry */
-       { }
-};
-MODULE_DEVICE_TABLE(usb, device_id_table);
-
-/* USB driver definition */
-static struct usb_driver usb_driver = {
-       .name = "TTUSBIR",
-       .id_table = &(device_id_table[0]),
-       .probe = probe,
-       .disconnect = disconnect,
-};
-
-/* USB device definition */
-struct ttusbir_device {
-       struct usb_driver *usb_driver;
-       struct usb_device *udev;
-       struct usb_interface *interf;
-       struct usb_class_driver class_driver;
-       unsigned int ifnum; /* Interface number to use */
-       unsigned int alt_setting; /* alternate setting to use */
-       unsigned int endpoint; /* Endpoint to use */
-       struct urb **urb; /* num_urb URB pointers*/
-       char **buffer; /* 128 byte buffer for each URB */
-       struct lirc_buffer rbuf; /* Buffer towards LIRC */
-       struct lirc_driver driver;
-       int minor;
-       int last_pulse; /* remembers if last received byte was pulse or space */
-       int last_num; /* remembers how many last bytes appeared */
-       int opened;
-};
-
-/*** LIRC specific functions ***/
-static int set_use_inc(void *data)
-{
-       int i, retval;
-       struct ttusbir_device *ttusbir = data;
-
-       DPRINTK("Sending first URBs\n");
-       /* @TODO Do I need to check if I am already opened */
-       ttusbir->opened = 1;
-
-       for (i = 0; i < num_urbs; i++) {
-               retval = usb_submit_urb(ttusbir->urb[i], GFP_KERNEL);
-               if (retval) {
-                       dev_err(&ttusbir->interf->dev,
-                               "%s: usb_submit_urb failed on urb %d\n",
-                               __func__, i);
-                       return retval;
-               }
-       }
-       return 0;
-}
-
-static void set_use_dec(void *data)
-{
-       struct ttusbir_device *ttusbir = data;
-
-       DPRINTK("Device closed\n");
-
-       ttusbir->opened = 0;
-}
-
-/*** USB specific functions ***/
-
-/*
- * This mapping table is used to do a very simple filtering of the
- * input signal.
- * For a value with at least 4 bits set it returns 0xFF otherwise
- * 0x00.  For faster IR signals this can not be used. But for RC-5 we
- * still have about 14 samples per pulse/space, i.e. we sample with 14
- * times higher frequency than the signal frequency
- */
-const unsigned char map_table[] = {
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0x00, 0x00, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0xFF,
-       0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
-       0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
-};
-
-static void urb_complete(struct urb *urb)
-{
-       struct ttusbir_device *ttusbir;
-       unsigned char *buf;
-       int i;
-       int l;
-
-       ttusbir = urb->context;
-
-       if (!ttusbir->opened)
-               return;
-
-       buf = (unsigned char *)urb->transfer_buffer;
-
-       for (i = 0; i < 128; i++) {
-               /* Here we do the filtering and some kind of down sampling */
-               buf[i] = ~map_table[buf[i]];
-               if (ttusbir->last_pulse == buf[i]) {
-                       if (ttusbir->last_num < PULSE_MASK/63)
-                               ttusbir->last_num++;
-               /*
-                * else we are in a idle period and do not need to
-                * increment any longer
-                */
-               } else {
-                       l = ttusbir->last_num * 62; /* about 62 = us/byte */
-                       if (ttusbir->last_pulse) /* pulse or space? */
-                               l |= PULSE_BIT;
-                       if (!lirc_buffer_full(&ttusbir->rbuf)) {
-                               lirc_buffer_write(&ttusbir->rbuf, (void *)&l);
-                               wake_up_interruptible(&ttusbir->rbuf.wait_poll);
-                       }
-                       ttusbir->last_num = 0;
-                       ttusbir->last_pulse = buf[i];
-               }
-       }
-       usb_submit_urb(urb, GFP_ATOMIC); /* keep data rolling :-) */
-}
-
-/*
- * Called whenever the USB subsystem thinks we could be the right driver
- * to handle this device
- */
-static int probe(struct usb_interface *intf, const struct usb_device_id *id)
-{
-       int alt_set, endp;
-       int found = 0;
-       int i, j;
-       int struct_size;
-       struct usb_host_interface *host_interf;
-       struct usb_interface_descriptor *interf_desc;
-       struct usb_host_endpoint *host_endpoint;
-       struct ttusbir_device *ttusbir;
-
-       DPRINTK("Module ttusbir probe\n");
-
-       /* To reduce memory fragmentation we use only one allocation */
-       struct_size =  sizeof(struct ttusbir_device) +
-               (sizeof(struct urb *) * num_urbs) +
-               (sizeof(char *) * num_urbs) +
-               (num_urbs * 128);
-       ttusbir = kzalloc(struct_size, GFP_KERNEL);
-       if (!ttusbir)
-               return -ENOMEM;
-
-       ttusbir->urb = (struct urb **)((char *)ttusbir +
-                                     sizeof(struct ttusbir_device));
-       ttusbir->buffer = (char **)((char *)ttusbir->urb +
-                                  (sizeof(struct urb *) * num_urbs));
-       for (i = 0; i < num_urbs; i++)
-               ttusbir->buffer[i] = (char *)ttusbir->buffer +
-                       (sizeof(char *)*num_urbs) + (i * 128);
-
-       ttusbir->usb_driver = &usb_driver;
-       ttusbir->alt_setting = -1;
-       /* @TODO check if error can be returned */
-       ttusbir->udev = usb_get_dev(interface_to_usbdev(intf));
-       ttusbir->interf = intf;
-       ttusbir->last_pulse = 0x00;
-       ttusbir->last_num = 0;
-
-       /*
-        * Now look for interface setting we can handle
-        * We are searching for the alt setting where end point
-        * 0x82 has max packet size 16
-        */
-       for (alt_set = 0; alt_set < intf->num_altsetting && !found; alt_set++) {
-               host_interf = &intf->altsetting[alt_set];
-               interf_desc = &host_interf->desc;
-               for (endp = 0; endp < interf_desc->bNumEndpoints; endp++) {
-                       host_endpoint = &host_interf->endpoint[endp];
-                       if ((host_endpoint->desc.bEndpointAddress == 0x82) &&
-                           (host_endpoint->desc.wMaxPacketSize == 0x10)) {
-                               ttusbir->alt_setting = alt_set;
-                               ttusbir->endpoint = endp;
-                               found = 1;
-                               break;
-                       }
-               }
-       }
-       if (ttusbir->alt_setting != -1)
-               DPRINTK("alt setting: %d\n", ttusbir->alt_setting);
-       else {
-               dev_err(&intf->dev, "Could not find alternate setting\n");
-               kfree(ttusbir);
-               return -EINVAL;
-       }
-
-       /* OK lets setup this interface setting */
-       usb_set_interface(ttusbir->udev, 0, ttusbir->alt_setting);
-
-       /* Store device info in interface structure */
-       usb_set_intfdata(intf, ttusbir);
-
-       /* Register as a LIRC driver */
-       if (lirc_buffer_init(&ttusbir->rbuf, sizeof(int), 256) < 0) {
-               dev_err(&intf->dev, "Could not get memory for LIRC data buffer\n");
-               usb_set_intfdata(intf, NULL);
-               kfree(ttusbir);
-               return -ENOMEM;
-       }
-       strcpy(ttusbir->driver.name, "TTUSBIR");
-       ttusbir->driver.minor = -1;
-       ttusbir->driver.code_length = 1;
-       ttusbir->driver.sample_rate = 0;
-       ttusbir->driver.data = ttusbir;
-       ttusbir->driver.add_to_buf = NULL;
-       ttusbir->driver.rbuf = &ttusbir->rbuf;
-       ttusbir->driver.set_use_inc = set_use_inc;
-       ttusbir->driver.set_use_dec = set_use_dec;
-       ttusbir->driver.dev = &intf->dev;
-       ttusbir->driver.owner = THIS_MODULE;
-       ttusbir->driver.features = LIRC_CAN_REC_MODE2;
-       ttusbir->minor = lirc_register_driver(&ttusbir->driver);
-       if (ttusbir->minor < 0) {
-               dev_err(&intf->dev, "Error registering as LIRC driver\n");
-               usb_set_intfdata(intf, NULL);
-               lirc_buffer_free(&ttusbir->rbuf);
-               kfree(ttusbir);
-               return -EIO;
-       }
-
-       /* Allocate and setup the URB that we will use to talk to the device */
-       for (i = 0; i < num_urbs; i++) {
-               ttusbir->urb[i] = usb_alloc_urb(8, GFP_KERNEL);
-               if (!ttusbir->urb[i]) {
-                       dev_err(&intf->dev, "Could not allocate memory for the URB\n");
-                       for (j = i - 1; j >= 0; j--)
-                               kfree(ttusbir->urb[j]);
-                       lirc_buffer_free(&ttusbir->rbuf);
-                       lirc_unregister_driver(ttusbir->minor);
-                       kfree(ttusbir);
-                       usb_set_intfdata(intf, NULL);
-                       return -ENOMEM;
-               }
-               ttusbir->urb[i]->dev = ttusbir->udev;
-               ttusbir->urb[i]->context = ttusbir;
-               ttusbir->urb[i]->pipe = usb_rcvisocpipe(ttusbir->udev,
-                                                       ttusbir->endpoint);
-               ttusbir->urb[i]->interval = 1;
-               ttusbir->urb[i]->transfer_flags = URB_ISO_ASAP;
-               ttusbir->urb[i]->transfer_buffer = &ttusbir->buffer[i][0];
-               ttusbir->urb[i]->complete = urb_complete;
-               ttusbir->urb[i]->number_of_packets = 8;
-               ttusbir->urb[i]->transfer_buffer_length = 128;
-               for (j = 0; j < 8; j++) {
-                       ttusbir->urb[i]->iso_frame_desc[j].offset = j*16;
-                       ttusbir->urb[i]->iso_frame_desc[j].length = 16;
-               }
-       }
-       return 0;
-}
-
-/**
- * Called when the driver is unloaded or the device is unplugged
- */
-static void disconnect(struct usb_interface *intf)
-{
-       int i;
-       struct ttusbir_device *ttusbir;
-
-       DPRINTK("Module ttusbir disconnect\n");
-
-       ttusbir = (struct ttusbir_device *) usb_get_intfdata(intf);
-       usb_set_intfdata(intf, NULL);
-       lirc_unregister_driver(ttusbir->minor);
-       DPRINTK("unregistered\n");
-
-       for (i = 0; i < num_urbs; i++) {
-               usb_kill_urb(ttusbir->urb[i]);
-               usb_free_urb(ttusbir->urb[i]);
-       }
-       DPRINTK("URBs killed\n");
-       lirc_buffer_free(&ttusbir->rbuf);
-       kfree(ttusbir);
-}
-
-module_usb_driver(usb_driver);