diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/IR/mceusb.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/drivers/media/IR/mceusb.c b/drivers/media/IR/mceusb.c index e368b8213c3b..78bf7f77a1a0 100644 --- a/drivers/media/IR/mceusb.c +++ b/drivers/media/IR/mceusb.c @@ -254,8 +254,7 @@ struct mceusb_dev { u32 connected:1; u32 tx_mask_inverted:1; u32 microsoft_gen1:1; - u32 gen3:1; - u32 reserved:28; + u32 reserved:29; } flags; /* transmit support */ @@ -292,6 +291,7 @@ struct mceusb_dev { static char DEVICE_RESET[] = {0x00, 0xff, 0xaa}; static char GET_REVISION[] = {0xff, 0x0b}; static char GET_UNKNOWN[] = {0xff, 0x18}; +static char GET_UNKNOWN2[] = {0x9f, 0x05}; static char GET_CARRIER_FREQ[] = {0x9f, 0x07}; static char GET_RX_TIMEOUT[] = {0x9f, 0x0d}; static char GET_TX_BITMASK[] = {0x9f, 0x13}; @@ -766,6 +766,7 @@ static void mceusb_dev_recv(struct urb *urb, struct pt_regs *regs) static void mceusb_gen1_init(struct mceusb_dev *ir) { int ret; + int maxp = ir->len_in; struct device *dev = ir->dev; char *data; @@ -805,6 +806,14 @@ static void mceusb_gen1_init(struct mceusb_dev *ir) 0x0000, 0x0100, NULL, 0, HZ * 3); dev_dbg(dev, "%s - retC = %d\n", __func__, ret); + /* device reset */ + mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); + mce_sync_in(ir, NULL, maxp); + + /* get hw/sw revision? */ + mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); + mce_sync_in(ir, NULL, maxp); + kfree(data); }; @@ -820,19 +829,17 @@ static void mceusb_gen2_init(struct mceusb_dev *ir) mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); mce_sync_in(ir, NULL, maxp); - /* unknown what this actually returns... */ + /* unknown what the next two actually return... */ mce_async_out(ir, GET_UNKNOWN, sizeof(GET_UNKNOWN)); mce_sync_in(ir, NULL, maxp); + mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2)); + mce_sync_in(ir, NULL, maxp); } -static void mceusb_gen3_init(struct mceusb_dev *ir) +static void mceusb_get_parameters(struct mceusb_dev *ir) { int maxp = ir->len_in; - /* device reset */ - mce_async_out(ir, DEVICE_RESET, sizeof(DEVICE_RESET)); - mce_sync_in(ir, NULL, maxp); - /* get the carrier and frequency */ mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ)); mce_sync_in(ir, NULL, maxp); @@ -999,7 +1006,6 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, ir->usbdev = dev; ir->dev = &intf->dev; ir->len_in = maxp; - ir->flags.gen3 = is_gen3; ir->flags.microsoft_gen1 = is_microsoft_gen1; ir->flags.tx_mask_inverted = tx_mask_inverted; @@ -1032,16 +1038,12 @@ static int __devinit mceusb_dev_probe(struct usb_interface *intf, ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; /* initialize device */ - if (ir->flags.gen3) - mceusb_gen3_init(ir); - - else if (ir->flags.microsoft_gen1) + if (ir->flags.microsoft_gen1) mceusb_gen1_init(ir); - - else + else if (!is_gen3) mceusb_gen2_init(ir); - mce_sync_in(ir, NULL, maxp); + mceusb_get_parameters(ir); mceusb_set_tx_mask(ir, MCE_DEFAULT_TX_MASK); |