Merge branch 'for-3.0' of git://git.kernel.org/pub/scm/linux/kernel/git/lrg/asoc...
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / media / rc / mceusb.c
index 044fb7a382d6bd888898cc889b78cdba15eeec90..ad927fcaa0203e3128346b8911fc962c5008c420 100644 (file)
@@ -149,6 +149,8 @@ enum mceusb_model_type {
        POLARIS_EVK,
        CX_HYBRID_TV,
        MULTIFUNCTION,
+       TIVO_KIT,
+       MCE_GEN2_NO_TX,
 };
 
 struct mceusb_model {
@@ -172,6 +174,10 @@ static const struct mceusb_model mceusb_model[] = {
        [MCE_GEN2] = {
                .mce_gen2 = 1,
        },
+       [MCE_GEN2_NO_TX] = {
+               .mce_gen2 = 1,
+               .no_tx = 1,
+       },
        [MCE_GEN2_TX_INV] = {
                .mce_gen2 = 1,
                .tx_mask_normal = 1,
@@ -197,6 +203,10 @@ static const struct mceusb_model mceusb_model[] = {
                .mce_gen2 = 1,
                .ir_intfnum = 2,
        },
+       [TIVO_KIT] = {
+               .mce_gen2 = 1,
+               .rc_map = RC_MAP_TIVO,
+       },
 };
 
 static struct usb_device_id mceusb_dev_table[] = {
@@ -220,6 +230,8 @@ static struct usb_device_id mceusb_dev_table[] = {
        { USB_DEVICE(VENDOR_PHILIPS, 0x206c) },
        /* Philips/Spinel plus IR transceiver for ASUS */
        { USB_DEVICE(VENDOR_PHILIPS, 0x2088) },
+       /* Philips IR transceiver (Dell branded) */
+       { USB_DEVICE(VENDOR_PHILIPS, 0x2093) },
        /* Realtek MCE IR Receiver and card reader */
        { USB_DEVICE(VENDOR_REALTEK, 0x0161),
          .driver_info = MULTIFUNCTION },
@@ -277,7 +289,8 @@ static struct usb_device_id mceusb_dev_table[] = {
        /* Formosa21 / eHome Infrared Receiver */
        { USB_DEVICE(VENDOR_FORMOSA, 0xe016) },
        /* Formosa aim / Trust MCE Infrared Receiver */
-       { USB_DEVICE(VENDOR_FORMOSA, 0xe017) },
+       { USB_DEVICE(VENDOR_FORMOSA, 0xe017),
+         .driver_info = MCE_GEN2_NO_TX },
        /* Formosa Industrial Computing / Beanbag Emulation Device */
        { USB_DEVICE(VENDOR_FORMOSA, 0xe018) },
        /* Formosa21 / eHome Infrared Receiver */
@@ -306,7 +319,8 @@ static struct usb_device_id mceusb_dev_table[] = {
        /* Northstar Systems, Inc. eHome Infrared Transceiver */
        { USB_DEVICE(VENDOR_NORTHSTAR, 0xe004) },
        /* TiVo PC IR Receiver */
-       { USB_DEVICE(VENDOR_TIVO, 0x2000) },
+       { USB_DEVICE(VENDOR_TIVO, 0x2000),
+         .driver_info = TIVO_KIT },
        /* Conexant Hybrid TV "Shelby" Polaris SDK */
        { USB_DEVICE(VENDOR_CONEXANT, 0x58a1),
          .driver_info = POLARIS_EVK },
@@ -601,11 +615,10 @@ static void mce_async_callback(struct urb *urb, struct pt_regs *regs)
 }
 
 /* request incoming or send outgoing usb packet - used to initialize remote */
-static void mce_request_packet(struct mceusb_dev *ir,
-                              struct usb_endpoint_descriptor *ep,
-                              unsigned char *data, int size, int urb_type)
+static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data,
+                              int size, int urb_type)
 {
-       int res;
+       int res, pipe;
        struct urb *async_urb;
        struct device *dev = ir->dev;
        unsigned char *async_buf;
@@ -625,10 +638,11 @@ static void mce_request_packet(struct mceusb_dev *ir,
                }
 
                /* outbound data */
-               usb_fill_int_urb(async_urb, ir->usbdev,
-                       usb_sndintpipe(ir->usbdev, ep->bEndpointAddress),
+               pipe = usb_sndintpipe(ir->usbdev,
+                                     ir->usb_ep_out->bEndpointAddress);
+               usb_fill_int_urb(async_urb, ir->usbdev, pipe,
                        async_buf, size, (usb_complete_t)mce_async_callback,
-                       ir, ep->bInterval);
+                       ir, ir->usb_ep_out->bInterval);
                memcpy(async_buf, data, size);
 
        } else if (urb_type == MCEUSB_RX) {
@@ -656,12 +670,12 @@ static void mce_request_packet(struct mceusb_dev *ir,
 
 static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size)
 {
-       mce_request_packet(ir, ir->usb_ep_out, data, size, MCEUSB_TX);
+       mce_request_packet(ir, data, size, MCEUSB_TX);
 }
 
 static void mce_sync_in(struct mceusb_dev *ir, unsigned char *data, int size)
 {
-       mce_request_packet(ir, ir->usb_ep_in, data, size, MCEUSB_RX);
+       mce_request_packet(ir, data, size, MCEUSB_RX);
 }
 
 /* Send data out the IR blaster port(s) */