1 /* 2 * Driver for USB Windows Media Center Ed. eHome Infrared Transceivers 3 * 4 * Copyright (c) 2010-2011, Jarod Wilson <jarod@redhat.com> 5 * 6 * Based on the original lirc_mceusb and lirc_mceusb2 drivers, by Dan 7 * Conti, Martin Blatter and Daniel Melander, the latter of which was 8 * in turn also based on the lirc_atiusb driver by Paul Miller. The 9 * two mce drivers were merged into one by Jarod Wilson, with transmit 10 * support for the 1st-gen device added primarily by Patrick Calhoun, 11 * with a bit of tweaks by Jarod. Debugging improvements and proper 12 * support for what appears to be 3rd-gen hardware added by Jarod. 13 * Initial port from lirc driver to ir-core drivery by Jarod, based 14 * partially on a port to an earlier proposed IR infrastructure by 15 * Jon Smirl, which included enhancements and simplifications to the 16 * incoming IR buffer parsing routines. 17 * 18 * Updated in July of 2011 with the aid of Microsoft's official 19 * remote/transceiver requirements and specification document, found at 20 * download.microsoft.com, title 21 * Windows-Media-Center-RC-IR-Collection-Green-Button-Specification-03-08-2011-V2.pdf 22 * 23 * 24 * This program is free software; you can redistribute it and/or modify 25 * it under the terms of the GNU General Public License as published by 26 * the Free Software Foundation; either version 2 of the License, or 27 * (at your option) any later version. 28 * 29 * This program is distributed in the hope that it will be useful, 30 * but WITHOUT ANY WARRANTY; without even the implied warranty of 31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 32 * GNU General Public License for more details. 33 * 34 */ 35 36 #include <linux/device.h> 37 #include <linux/module.h> 38 #include <linux/slab.h> 39 #include <linux/workqueue.h> 40 #include <linux/usb.h> 41 #include <linux/usb/input.h> 42 #include <linux/pm_wakeup.h> 43 #include <media/rc-core.h> 44 45 #define DRIVER_VERSION "1.94" 46 #define DRIVER_AUTHOR "Jarod Wilson <jarod@redhat.com>" 47 #define DRIVER_DESC "Windows Media Center Ed. eHome Infrared Transceiver " \ 48 "device driver" 49 #define DRIVER_NAME "mceusb" 50 51 #define USB_CTRL_MSG_SZ 2 /* Size of usb ctrl msg on gen1 hw */ 52 #define MCE_G1_INIT_MSGS 40 /* Init messages on gen1 hw to throw out */ 53 54 /* MCE constants */ 55 #define MCE_CMDBUF_SIZE 384 /* MCE Command buffer length */ 56 #define MCE_TIME_UNIT 50 /* Approx 50us resolution */ 57 #define MCE_CODE_LENGTH 5 /* Normal length of packet (with header) */ 58 #define MCE_PACKET_SIZE 4 /* Normal length of packet (without header) */ 59 #define MCE_IRDATA_HEADER 0x84 /* Actual header format is 0x80 + num_bytes */ 60 #define MCE_IRDATA_TRAILER 0x80 /* End of IR data */ 61 #define MCE_MAX_CHANNELS 2 /* Two transmitters, hardware dependent? */ 62 #define MCE_DEFAULT_TX_MASK 0x03 /* Vals: TX1=0x01, TX2=0x02, ALL=0x03 */ 63 #define MCE_PULSE_BIT 0x80 /* Pulse bit, MSB set == PULSE else SPACE */ 64 #define MCE_PULSE_MASK 0x7f /* Pulse mask */ 65 #define MCE_MAX_PULSE_LENGTH 0x7f /* Longest transmittable pulse symbol */ 66 67 /* 68 * The interface between the host and the IR hardware is command-response 69 * based. All commands and responses have a consistent format, where a lead 70 * byte always identifies the type of data following it. The lead byte has 71 * a port value in the 3 highest bits and a length value in the 5 lowest 72 * bits. 73 * 74 * The length field is overloaded, with a value of 11111 indicating that the 75 * following byte is a command or response code, and the length of the entire 76 * message is determined by the code. If the length field is not 11111, then 77 * it specifies the number of bytes of port data that follow. 78 */ 79 #define MCE_CMD 0x1f 80 #define MCE_PORT_IR 0x4 /* (0x4 << 5) | MCE_CMD = 0x9f */ 81 #define MCE_PORT_SYS 0x7 /* (0x7 << 5) | MCE_CMD = 0xff */ 82 #define MCE_PORT_SER 0x6 /* 0xc0 thru 0xdf flush & 0x1f bytes */ 83 #define MCE_PORT_MASK 0xe0 /* Mask out command bits */ 84 85 /* Command port headers */ 86 #define MCE_CMD_PORT_IR 0x9f /* IR-related cmd/rsp */ 87 #define MCE_CMD_PORT_SYS 0xff /* System (non-IR) device cmd/rsp */ 88 89 /* Commands that set device state (2-4 bytes in length) */ 90 #define MCE_CMD_RESET 0xfe /* Reset device, 2 bytes */ 91 #define MCE_CMD_RESUME 0xaa /* Resume device after error, 2 bytes */ 92 #define MCE_CMD_SETIRCFS 0x06 /* Set tx carrier, 4 bytes */ 93 #define MCE_CMD_SETIRTIMEOUT 0x0c /* Set timeout, 4 bytes */ 94 #define MCE_CMD_SETIRTXPORTS 0x08 /* Set tx ports, 3 bytes */ 95 #define MCE_CMD_SETIRRXPORTEN 0x14 /* Set rx ports, 3 bytes */ 96 #define MCE_CMD_FLASHLED 0x23 /* Flash receiver LED, 2 bytes */ 97 98 /* Commands that query device state (all 2 bytes, unless noted) */ 99 #define MCE_CMD_GETIRCFS 0x07 /* Get carrier */ 100 #define MCE_CMD_GETIRTIMEOUT 0x0d /* Get timeout */ 101 #define MCE_CMD_GETIRTXPORTS 0x13 /* Get tx ports */ 102 #define MCE_CMD_GETIRRXPORTEN 0x15 /* Get rx ports */ 103 #define MCE_CMD_GETPORTSTATUS 0x11 /* Get tx port status, 3 bytes */ 104 #define MCE_CMD_GETIRNUMPORTS 0x16 /* Get number of ports */ 105 #define MCE_CMD_GETWAKESOURCE 0x17 /* Get wake source */ 106 #define MCE_CMD_GETEMVER 0x22 /* Get emulator interface version */ 107 #define MCE_CMD_GETDEVDETAILS 0x21 /* Get device details (em ver2 only) */ 108 #define MCE_CMD_GETWAKESUPPORT 0x20 /* Get wake details (em ver2 only) */ 109 #define MCE_CMD_GETWAKEVERSION 0x18 /* Get wake pattern (em ver2 only) */ 110 111 /* Misc commands */ 112 #define MCE_CMD_NOP 0xff /* No operation */ 113 114 /* Responses to commands (non-error cases) */ 115 #define MCE_RSP_EQIRCFS 0x06 /* tx carrier, 4 bytes */ 116 #define MCE_RSP_EQIRTIMEOUT 0x0c /* rx timeout, 4 bytes */ 117 #define MCE_RSP_GETWAKESOURCE 0x17 /* wake source, 3 bytes */ 118 #define MCE_RSP_EQIRTXPORTS 0x08 /* tx port mask, 3 bytes */ 119 #define MCE_RSP_EQIRRXPORTEN 0x14 /* rx port mask, 3 bytes */ 120 #define MCE_RSP_GETPORTSTATUS 0x11 /* tx port status, 7 bytes */ 121 #define MCE_RSP_EQIRRXCFCNT 0x15 /* rx carrier count, 4 bytes */ 122 #define MCE_RSP_EQIRNUMPORTS 0x16 /* number of ports, 4 bytes */ 123 #define MCE_RSP_EQWAKESUPPORT 0x20 /* wake capabilities, 3 bytes */ 124 #define MCE_RSP_EQWAKEVERSION 0x18 /* wake pattern details, 6 bytes */ 125 #define MCE_RSP_EQDEVDETAILS 0x21 /* device capabilities, 3 bytes */ 126 #define MCE_RSP_EQEMVER 0x22 /* emulator interface ver, 3 bytes */ 127 #define MCE_RSP_FLASHLED 0x23 /* success flashing LED, 2 bytes */ 128 129 /* Responses to error cases, must send MCE_CMD_RESUME to clear them */ 130 #define MCE_RSP_CMD_ILLEGAL 0xfe /* illegal command for port, 2 bytes */ 131 #define MCE_RSP_TX_TIMEOUT 0x81 /* tx timed out, 2 bytes */ 132 133 /* Misc commands/responses not defined in the MCE remote/transceiver spec */ 134 #define MCE_CMD_SIG_END 0x01 /* End of signal */ 135 #define MCE_CMD_PING 0x03 /* Ping device */ 136 #define MCE_CMD_UNKNOWN 0x04 /* Unknown */ 137 #define MCE_CMD_UNKNOWN2 0x05 /* Unknown */ 138 #define MCE_CMD_UNKNOWN3 0x09 /* Unknown */ 139 #define MCE_CMD_UNKNOWN4 0x0a /* Unknown */ 140 #define MCE_CMD_G_REVISION 0x0b /* Get hw/sw revision */ 141 #define MCE_CMD_UNKNOWN5 0x0e /* Unknown */ 142 #define MCE_CMD_UNKNOWN6 0x0f /* Unknown */ 143 #define MCE_CMD_UNKNOWN8 0x19 /* Unknown */ 144 #define MCE_CMD_UNKNOWN9 0x1b /* Unknown */ 145 #define MCE_CMD_NULL 0x00 /* These show up various places... */ 146 147 /* if buf[i] & MCE_PORT_MASK == 0x80 and buf[i] != MCE_CMD_PORT_IR, 148 * then we're looking at a raw IR data sample */ 149 #define MCE_COMMAND_IRDATA 0x80 150 #define MCE_PACKET_LENGTH_MASK 0x1f /* Packet length mask */ 151 152 #define VENDOR_PHILIPS 0x0471 153 #define VENDOR_SMK 0x0609 154 #define VENDOR_TATUNG 0x1460 155 #define VENDOR_GATEWAY 0x107b 156 #define VENDOR_SHUTTLE 0x1308 157 #define VENDOR_SHUTTLE2 0x051c 158 #define VENDOR_MITSUMI 0x03ee 159 #define VENDOR_TOPSEED 0x1784 160 #define VENDOR_RICAVISION 0x179d 161 #define VENDOR_ITRON 0x195d 162 #define VENDOR_FIC 0x1509 163 #define VENDOR_LG 0x043e 164 #define VENDOR_MICROSOFT 0x045e 165 #define VENDOR_FORMOSA 0x147a 166 #define VENDOR_FINTEK 0x1934 167 #define VENDOR_PINNACLE 0x2304 168 #define VENDOR_ECS 0x1019 169 #define VENDOR_WISTRON 0x0fb8 170 #define VENDOR_COMPRO 0x185b 171 #define VENDOR_NORTHSTAR 0x04eb 172 #define VENDOR_REALTEK 0x0bda 173 #define VENDOR_TIVO 0x105a 174 #define VENDOR_CONEXANT 0x0572 175 #define VENDOR_TWISTEDMELON 0x2596 176 #define VENDOR_HAUPPAUGE 0x2040 177 #define VENDOR_PCTV 0x2013 178 #define VENDOR_ADAPTEC 0x03f3 179 180 enum mceusb_model_type { 181 MCE_GEN2 = 0, /* Most boards */ 182 MCE_GEN1, 183 MCE_GEN3, 184 MCE_GEN3_BROKEN_IRTIMEOUT, 185 MCE_GEN2_TX_INV, 186 MCE_GEN2_TX_INV_RX_GOOD, 187 POLARIS_EVK, 188 CX_HYBRID_TV, 189 MULTIFUNCTION, 190 TIVO_KIT, 191 MCE_GEN2_NO_TX, 192 HAUPPAUGE_CX_HYBRID_TV, 193 EVROMEDIA_FULL_HYBRID_FULLHD, 194 ASTROMETA_T2HYBRID, 195 }; 196 197 struct mceusb_model { 198 u32 mce_gen1:1; 199 u32 mce_gen2:1; 200 u32 mce_gen3:1; 201 u32 tx_mask_normal:1; 202 u32 no_tx:1; 203 u32 broken_irtimeout:1; 204 /* 205 * 2nd IR receiver (short-range, wideband) for learning mode: 206 * 0, absent 2nd receiver (rx2) 207 * 1, rx2 present 208 * 2, rx2 which under counts IR carrier cycles 209 */ 210 u32 rx2; 211 212 int ir_intfnum; 213 214 const char *rc_map; /* Allow specify a per-board map */ 215 const char *name; /* per-board name */ 216 }; 217 218 static const struct mceusb_model mceusb_model[] = { 219 [MCE_GEN1] = { 220 .mce_gen1 = 1, 221 .tx_mask_normal = 1, 222 .rx2 = 2, 223 }, 224 [MCE_GEN2] = { 225 .mce_gen2 = 1, 226 .rx2 = 2, 227 }, 228 [MCE_GEN2_NO_TX] = { 229 .mce_gen2 = 1, 230 .no_tx = 1, 231 }, 232 [MCE_GEN2_TX_INV] = { 233 .mce_gen2 = 1, 234 .tx_mask_normal = 1, 235 .rx2 = 1, 236 }, 237 [MCE_GEN2_TX_INV_RX_GOOD] = { 238 .mce_gen2 = 1, 239 .tx_mask_normal = 1, 240 .rx2 = 2, 241 }, 242 [MCE_GEN3] = { 243 .mce_gen3 = 1, 244 .tx_mask_normal = 1, 245 .rx2 = 2, 246 }, 247 [MCE_GEN3_BROKEN_IRTIMEOUT] = { 248 .mce_gen3 = 1, 249 .tx_mask_normal = 1, 250 .rx2 = 2, 251 .broken_irtimeout = 1 252 }, 253 [POLARIS_EVK] = { 254 /* 255 * In fact, the EVK is shipped without 256 * remotes, but we should have something handy, 257 * to allow testing it 258 */ 259 .name = "Conexant Hybrid TV (cx231xx) MCE IR", 260 .rx2 = 2, 261 }, 262 [CX_HYBRID_TV] = { 263 .no_tx = 1, /* tx isn't wired up at all */ 264 .name = "Conexant Hybrid TV (cx231xx) MCE IR", 265 }, 266 [HAUPPAUGE_CX_HYBRID_TV] = { 267 .no_tx = 1, /* eeprom says it has no tx */ 268 .name = "Conexant Hybrid TV (cx231xx) MCE IR no TX", 269 }, 270 [MULTIFUNCTION] = { 271 .mce_gen2 = 1, 272 .ir_intfnum = 2, 273 .rx2 = 2, 274 }, 275 [TIVO_KIT] = { 276 .mce_gen2 = 1, 277 .rc_map = RC_MAP_TIVO, 278 .rx2 = 2, 279 }, 280 [EVROMEDIA_FULL_HYBRID_FULLHD] = { 281 .name = "Evromedia USB Full Hybrid Full HD", 282 .no_tx = 1, 283 .rc_map = RC_MAP_MSI_DIGIVOX_III, 284 }, 285 [ASTROMETA_T2HYBRID] = { 286 .name = "Astrometa T2Hybrid", 287 .no_tx = 1, 288 .rc_map = RC_MAP_ASTROMETA_T2HYBRID, 289 } 290 }; 291 292 static const struct usb_device_id mceusb_dev_table[] = { 293 /* Original Microsoft MCE IR Transceiver (often HP-branded) */ 294 { USB_DEVICE(VENDOR_MICROSOFT, 0x006d), 295 .driver_info = MCE_GEN1 }, 296 /* Philips Infrared Transceiver - Sahara branded */ 297 { USB_DEVICE(VENDOR_PHILIPS, 0x0608) }, 298 /* Philips Infrared Transceiver - HP branded */ 299 { USB_DEVICE(VENDOR_PHILIPS, 0x060c), 300 .driver_info = MCE_GEN2_TX_INV }, 301 /* Philips SRM5100 */ 302 { USB_DEVICE(VENDOR_PHILIPS, 0x060d) }, 303 /* Philips Infrared Transceiver - Omaura */ 304 { USB_DEVICE(VENDOR_PHILIPS, 0x060f) }, 305 /* Philips Infrared Transceiver - Spinel plus */ 306 { USB_DEVICE(VENDOR_PHILIPS, 0x0613) }, 307 /* Philips eHome Infrared Transceiver */ 308 { USB_DEVICE(VENDOR_PHILIPS, 0x0815) }, 309 /* Philips/Spinel plus IR transceiver for ASUS */ 310 { USB_DEVICE(VENDOR_PHILIPS, 0x206c) }, 311 /* Philips/Spinel plus IR transceiver for ASUS */ 312 { USB_DEVICE(VENDOR_PHILIPS, 0x2088) }, 313 /* Philips IR transceiver (Dell branded) */ 314 { USB_DEVICE(VENDOR_PHILIPS, 0x2093), 315 .driver_info = MCE_GEN2_TX_INV }, 316 /* Realtek MCE IR Receiver and card reader */ 317 { USB_DEVICE(VENDOR_REALTEK, 0x0161), 318 .driver_info = MULTIFUNCTION }, 319 /* SMK/Toshiba G83C0004D410 */ 320 { USB_DEVICE(VENDOR_SMK, 0x031d), 321 .driver_info = MCE_GEN2_TX_INV_RX_GOOD }, 322 /* SMK eHome Infrared Transceiver (Sony VAIO) */ 323 { USB_DEVICE(VENDOR_SMK, 0x0322), 324 .driver_info = MCE_GEN2_TX_INV }, 325 /* bundled with Hauppauge PVR-150 */ 326 { USB_DEVICE(VENDOR_SMK, 0x0334), 327 .driver_info = MCE_GEN2_TX_INV }, 328 /* SMK eHome Infrared Transceiver */ 329 { USB_DEVICE(VENDOR_SMK, 0x0338) }, 330 /* SMK/I-O Data GV-MC7/RCKIT Receiver */ 331 { USB_DEVICE(VENDOR_SMK, 0x0353), 332 .driver_info = MCE_GEN2_NO_TX }, 333 /* SMK RXX6000 Infrared Receiver */ 334 { USB_DEVICE(VENDOR_SMK, 0x0357), 335 .driver_info = MCE_GEN2_NO_TX }, 336 /* Tatung eHome Infrared Transceiver */ 337 { USB_DEVICE(VENDOR_TATUNG, 0x9150) }, 338 /* Shuttle eHome Infrared Transceiver */ 339 { USB_DEVICE(VENDOR_SHUTTLE, 0xc001) }, 340 /* Shuttle eHome Infrared Transceiver */ 341 { USB_DEVICE(VENDOR_SHUTTLE2, 0xc001) }, 342 /* Gateway eHome Infrared Transceiver */ 343 { USB_DEVICE(VENDOR_GATEWAY, 0x3009) }, 344 /* Mitsumi */ 345 { USB_DEVICE(VENDOR_MITSUMI, 0x2501) }, 346 /* Topseed eHome Infrared Transceiver */ 347 { USB_DEVICE(VENDOR_TOPSEED, 0x0001), 348 .driver_info = MCE_GEN2_TX_INV }, 349 /* Topseed HP eHome Infrared Transceiver */ 350 { USB_DEVICE(VENDOR_TOPSEED, 0x0006), 351 .driver_info = MCE_GEN2_TX_INV }, 352 /* Topseed eHome Infrared Transceiver */ 353 { USB_DEVICE(VENDOR_TOPSEED, 0x0007), 354 .driver_info = MCE_GEN2_TX_INV }, 355 /* Topseed eHome Infrared Transceiver */ 356 { USB_DEVICE(VENDOR_TOPSEED, 0x0008), 357 .driver_info = MCE_GEN3 }, 358 /* Topseed eHome Infrared Transceiver */ 359 { USB_DEVICE(VENDOR_TOPSEED, 0x000a), 360 .driver_info = MCE_GEN2_TX_INV }, 361 /* Topseed eHome Infrared Transceiver */ 362 { USB_DEVICE(VENDOR_TOPSEED, 0x0011), 363 .driver_info = MCE_GEN3_BROKEN_IRTIMEOUT }, 364 /* Ricavision internal Infrared Transceiver */ 365 { USB_DEVICE(VENDOR_RICAVISION, 0x0010) }, 366 /* Itron ione Libra Q-11 */ 367 { USB_DEVICE(VENDOR_ITRON, 0x7002) }, 368 /* FIC eHome Infrared Transceiver */ 369 { USB_DEVICE(VENDOR_FIC, 0x9242) }, 370 /* LG eHome Infrared Transceiver */ 371 { USB_DEVICE(VENDOR_LG, 0x9803) }, 372 /* Microsoft MCE Infrared Transceiver */ 373 { USB_DEVICE(VENDOR_MICROSOFT, 0x00a0) }, 374 /* Formosa eHome Infrared Transceiver */ 375 { USB_DEVICE(VENDOR_FORMOSA, 0xe015) }, 376 /* Formosa21 / eHome Infrared Receiver */ 377 { USB_DEVICE(VENDOR_FORMOSA, 0xe016) }, 378 /* Formosa aim / Trust MCE Infrared Receiver */ 379 { USB_DEVICE(VENDOR_FORMOSA, 0xe017), 380 .driver_info = MCE_GEN2_NO_TX }, 381 /* Formosa Industrial Computing / Beanbag Emulation Device */ 382 { USB_DEVICE(VENDOR_FORMOSA, 0xe018) }, 383 /* Formosa21 / eHome Infrared Receiver */ 384 { USB_DEVICE(VENDOR_FORMOSA, 0xe03a) }, 385 /* Formosa Industrial Computing AIM IR605/A */ 386 { USB_DEVICE(VENDOR_FORMOSA, 0xe03c) }, 387 /* Formosa Industrial Computing */ 388 { USB_DEVICE(VENDOR_FORMOSA, 0xe03e) }, 389 /* Formosa Industrial Computing */ 390 { USB_DEVICE(VENDOR_FORMOSA, 0xe042) }, 391 /* Fintek eHome Infrared Transceiver (HP branded) */ 392 { USB_DEVICE(VENDOR_FINTEK, 0x5168), 393 .driver_info = MCE_GEN2_TX_INV }, 394 /* Fintek eHome Infrared Transceiver */ 395 { USB_DEVICE(VENDOR_FINTEK, 0x0602) }, 396 /* Fintek eHome Infrared Transceiver (in the AOpen MP45) */ 397 { USB_DEVICE(VENDOR_FINTEK, 0x0702) }, 398 /* Pinnacle Remote Kit */ 399 { USB_DEVICE(VENDOR_PINNACLE, 0x0225), 400 .driver_info = MCE_GEN3 }, 401 /* Elitegroup Computer Systems IR */ 402 { USB_DEVICE(VENDOR_ECS, 0x0f38) }, 403 /* Wistron Corp. eHome Infrared Receiver */ 404 { USB_DEVICE(VENDOR_WISTRON, 0x0002) }, 405 /* Compro K100 */ 406 { USB_DEVICE(VENDOR_COMPRO, 0x3020) }, 407 /* Compro K100 v2 */ 408 { USB_DEVICE(VENDOR_COMPRO, 0x3082) }, 409 /* Northstar Systems, Inc. eHome Infrared Transceiver */ 410 { USB_DEVICE(VENDOR_NORTHSTAR, 0xe004) }, 411 /* TiVo PC IR Receiver */ 412 { USB_DEVICE(VENDOR_TIVO, 0x2000), 413 .driver_info = TIVO_KIT }, 414 /* Conexant Hybrid TV "Shelby" Polaris SDK */ 415 { USB_DEVICE(VENDOR_CONEXANT, 0x58a1), 416 .driver_info = POLARIS_EVK }, 417 /* Conexant Hybrid TV RDU253S Polaris */ 418 { USB_DEVICE(VENDOR_CONEXANT, 0x58a5), 419 .driver_info = CX_HYBRID_TV }, 420 /* Twisted Melon Inc. - Manta Mini Receiver */ 421 { USB_DEVICE(VENDOR_TWISTEDMELON, 0x8008) }, 422 /* Twisted Melon Inc. - Manta Pico Receiver */ 423 { USB_DEVICE(VENDOR_TWISTEDMELON, 0x8016) }, 424 /* Twisted Melon Inc. - Manta Transceiver */ 425 { USB_DEVICE(VENDOR_TWISTEDMELON, 0x8042) }, 426 /* Hauppauge WINTV-HVR-HVR 930C-HD - based on cx231xx */ 427 { USB_DEVICE(VENDOR_HAUPPAUGE, 0xb130), 428 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 429 { USB_DEVICE(VENDOR_HAUPPAUGE, 0xb131), 430 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 431 { USB_DEVICE(VENDOR_HAUPPAUGE, 0xb138), 432 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 433 { USB_DEVICE(VENDOR_HAUPPAUGE, 0xb139), 434 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 435 { USB_DEVICE(VENDOR_PCTV, 0x0259), 436 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 437 { USB_DEVICE(VENDOR_PCTV, 0x025e), 438 .driver_info = HAUPPAUGE_CX_HYBRID_TV }, 439 /* Adaptec / HP eHome Receiver */ 440 { USB_DEVICE(VENDOR_ADAPTEC, 0x0094) }, 441 /* Evromedia USB Full Hybrid Full HD */ 442 { USB_DEVICE(0x1b80, 0xd3b2), 443 .driver_info = EVROMEDIA_FULL_HYBRID_FULLHD }, 444 /* Astrometa T2hybrid */ 445 { USB_DEVICE(0x15f4, 0x0135), 446 .driver_info = ASTROMETA_T2HYBRID }, 447 448 /* Terminating entry */ 449 { } 450 }; 451 452 /* data structure for each usb transceiver */ 453 struct mceusb_dev { 454 /* ir-core bits */ 455 struct rc_dev *rc; 456 457 /* optional features we can enable */ 458 bool carrier_report_enabled; 459 bool wideband_rx_enabled; /* aka learning mode, short-range rx */ 460 461 /* core device bits */ 462 struct device *dev; 463 464 /* usb */ 465 struct usb_device *usbdev; 466 struct urb *urb_in; 467 unsigned int pipe_in; 468 struct usb_endpoint_descriptor *usb_ep_out; 469 unsigned int pipe_out; 470 471 /* buffers and dma */ 472 unsigned char *buf_in; 473 unsigned int len_in; 474 dma_addr_t dma_in; 475 476 enum { 477 CMD_HEADER = 0, 478 SUBCMD, 479 CMD_DATA, 480 PARSE_IRDATA, 481 } parser_state; 482 483 u8 cmd, rem; /* Remaining IR data bytes in packet */ 484 485 struct { 486 u32 connected:1; 487 u32 tx_mask_normal:1; 488 u32 microsoft_gen1:1; 489 u32 no_tx:1; 490 u32 rx2; 491 } flags; 492 493 /* transmit support */ 494 u32 carrier; 495 unsigned char tx_mask; 496 497 char name[128]; 498 char phys[64]; 499 enum mceusb_model_type model; 500 501 bool need_reset; /* flag to issue a device resume cmd */ 502 u8 emver; /* emulator interface version */ 503 u8 num_txports; /* number of transmit ports */ 504 u8 num_rxports; /* number of receive sensors */ 505 u8 txports_cabled; /* bitmask of transmitters with cable */ 506 u8 rxports_active; /* bitmask of active receive sensors */ 507 bool learning_active; /* wideband rx is active */ 508 509 /* receiver carrier frequency detection support */ 510 u32 pulse_tunit; /* IR pulse "on" cumulative time units */ 511 u32 pulse_count; /* pulse "on" count in measurement interval */ 512 513 /* 514 * support for async error handler mceusb_deferred_kevent() 515 * where usb_clear_halt(), usb_reset_configuration(), 516 * usb_reset_device(), etc. must be done in process context 517 */ 518 struct work_struct kevent; 519 unsigned long kevent_flags; 520 # define EVENT_TX_HALT 0 521 # define EVENT_RX_HALT 1 522 }; 523 524 /* MCE Device Command Strings, generally a port and command pair */ 525 static char DEVICE_RESUME[] = {MCE_CMD_NULL, MCE_CMD_PORT_SYS, 526 MCE_CMD_RESUME}; 527 static char GET_REVISION[] = {MCE_CMD_PORT_SYS, MCE_CMD_G_REVISION}; 528 static char GET_EMVER[] = {MCE_CMD_PORT_SYS, MCE_CMD_GETEMVER}; 529 static char GET_WAKEVERSION[] = {MCE_CMD_PORT_SYS, MCE_CMD_GETWAKEVERSION}; 530 static char FLASH_LED[] = {MCE_CMD_PORT_SYS, MCE_CMD_FLASHLED}; 531 static char GET_UNKNOWN2[] = {MCE_CMD_PORT_IR, MCE_CMD_UNKNOWN2}; 532 static char GET_CARRIER_FREQ[] = {MCE_CMD_PORT_IR, MCE_CMD_GETIRCFS}; 533 static char GET_RX_TIMEOUT[] = {MCE_CMD_PORT_IR, MCE_CMD_GETIRTIMEOUT}; 534 static char GET_NUM_PORTS[] = {MCE_CMD_PORT_IR, MCE_CMD_GETIRNUMPORTS}; 535 static char GET_TX_BITMASK[] = {MCE_CMD_PORT_IR, MCE_CMD_GETIRTXPORTS}; 536 static char GET_RX_SENSOR[] = {MCE_CMD_PORT_IR, MCE_CMD_GETIRRXPORTEN}; 537 /* sub in desired values in lower byte or bytes for full command */ 538 /* FIXME: make use of these for transmit. 539 static char SET_CARRIER_FREQ[] = {MCE_CMD_PORT_IR, 540 MCE_CMD_SETIRCFS, 0x00, 0x00}; 541 static char SET_TX_BITMASK[] = {MCE_CMD_PORT_IR, MCE_CMD_SETIRTXPORTS, 0x00}; 542 static char SET_RX_TIMEOUT[] = {MCE_CMD_PORT_IR, 543 MCE_CMD_SETIRTIMEOUT, 0x00, 0x00}; 544 static char SET_RX_SENSOR[] = {MCE_CMD_PORT_IR, 545 MCE_RSP_EQIRRXPORTEN, 0x00}; 546 */ 547 548 static int mceusb_cmd_datasize(u8 cmd, u8 subcmd) 549 { 550 int datasize = 0; 551 552 switch (cmd) { 553 case MCE_CMD_NULL: 554 if (subcmd == MCE_CMD_PORT_SYS) 555 datasize = 1; 556 break; 557 case MCE_CMD_PORT_SYS: 558 switch (subcmd) { 559 case MCE_RSP_GETPORTSTATUS: 560 datasize = 5; 561 break; 562 case MCE_RSP_EQWAKEVERSION: 563 datasize = 4; 564 break; 565 case MCE_CMD_G_REVISION: 566 datasize = 2; 567 break; 568 case MCE_RSP_EQWAKESUPPORT: 569 case MCE_RSP_GETWAKESOURCE: 570 case MCE_RSP_EQDEVDETAILS: 571 case MCE_RSP_EQEMVER: 572 datasize = 1; 573 break; 574 } 575 break; 576 case MCE_CMD_PORT_IR: 577 switch (subcmd) { 578 case MCE_CMD_UNKNOWN: 579 case MCE_RSP_EQIRCFS: 580 case MCE_RSP_EQIRTIMEOUT: 581 case MCE_RSP_EQIRRXCFCNT: 582 case MCE_RSP_EQIRNUMPORTS: 583 datasize = 2; 584 break; 585 case MCE_CMD_SIG_END: 586 case MCE_RSP_EQIRTXPORTS: 587 case MCE_RSP_EQIRRXPORTEN: 588 datasize = 1; 589 break; 590 } 591 } 592 return datasize; 593 } 594 595 static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len, 596 int offset, int len, bool out) 597 { 598 #if defined(DEBUG) || defined(CONFIG_DYNAMIC_DEBUG) 599 char *inout; 600 u8 cmd, subcmd, *data; 601 struct device *dev = ir->dev; 602 int start, skip = 0; 603 u32 carrier, period; 604 605 /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ 606 if (ir->flags.microsoft_gen1 && !out && !offset) 607 skip = 2; 608 609 if (len <= skip) 610 return; 611 612 dev_dbg(dev, "%cx data: %*ph (length=%d)", 613 (out ? 't' : 'r'), 614 min(len, buf_len - offset), buf + offset, len); 615 616 inout = out ? "Request" : "Got"; 617 618 start = offset + skip; 619 cmd = buf[start] & 0xff; 620 subcmd = buf[start + 1] & 0xff; 621 data = buf + start + 2; 622 623 switch (cmd) { 624 case MCE_CMD_NULL: 625 if (subcmd == MCE_CMD_NULL) 626 break; 627 if ((subcmd == MCE_CMD_PORT_SYS) && 628 (data[0] == MCE_CMD_RESUME)) 629 dev_dbg(dev, "Device resume requested"); 630 else 631 dev_dbg(dev, "Unknown command 0x%02x 0x%02x", 632 cmd, subcmd); 633 break; 634 case MCE_CMD_PORT_SYS: 635 switch (subcmd) { 636 case MCE_RSP_EQEMVER: 637 if (!out) 638 dev_dbg(dev, "Emulator interface version %x", 639 data[0]); 640 break; 641 case MCE_CMD_G_REVISION: 642 if (len == 2) 643 dev_dbg(dev, "Get hw/sw rev?"); 644 else 645 dev_dbg(dev, "hw/sw rev %*ph", 646 4, &buf[start + 2]); 647 break; 648 case MCE_CMD_RESUME: 649 dev_dbg(dev, "Device resume requested"); 650 break; 651 case MCE_RSP_CMD_ILLEGAL: 652 dev_dbg(dev, "Illegal PORT_SYS command"); 653 break; 654 case MCE_RSP_EQWAKEVERSION: 655 if (!out) 656 dev_dbg(dev, "Wake version, proto: 0x%02x, payload: 0x%02x, address: 0x%02x, version: 0x%02x", 657 data[0], data[1], data[2], data[3]); 658 break; 659 case MCE_RSP_GETPORTSTATUS: 660 if (!out) 661 /* We use data1 + 1 here, to match hw labels */ 662 dev_dbg(dev, "TX port %d: blaster is%s connected", 663 data[0] + 1, data[3] ? " not" : ""); 664 break; 665 case MCE_CMD_FLASHLED: 666 dev_dbg(dev, "Attempting to flash LED"); 667 break; 668 default: 669 dev_dbg(dev, "Unknown command 0x%02x 0x%02x", 670 cmd, subcmd); 671 break; 672 } 673 break; 674 case MCE_CMD_PORT_IR: 675 switch (subcmd) { 676 case MCE_CMD_SIG_END: 677 dev_dbg(dev, "End of signal"); 678 break; 679 case MCE_CMD_PING: 680 dev_dbg(dev, "Ping"); 681 break; 682 case MCE_CMD_UNKNOWN: 683 dev_dbg(dev, "Resp to 9f 05 of 0x%02x 0x%02x", 684 data[0], data[1]); 685 break; 686 case MCE_RSP_EQIRCFS: 687 period = DIV_ROUND_CLOSEST((1U << data[0] * 2) * 688 (data[1] + 1), 10); 689 if (!period) 690 break; 691 carrier = (1000 * 1000) / period; 692 dev_dbg(dev, "%s carrier of %u Hz (period %uus)", 693 inout, carrier, period); 694 break; 695 case MCE_CMD_GETIRCFS: 696 dev_dbg(dev, "Get carrier mode and freq"); 697 break; 698 case MCE_RSP_EQIRTXPORTS: 699 dev_dbg(dev, "%s transmit blaster mask of 0x%02x", 700 inout, data[0]); 701 break; 702 case MCE_RSP_EQIRTIMEOUT: 703 /* value is in units of 50us, so x*50/1000 ms */ 704 period = ((data[0] << 8) | data[1]) * 705 MCE_TIME_UNIT / 1000; 706 dev_dbg(dev, "%s receive timeout of %d ms", 707 inout, period); 708 break; 709 case MCE_CMD_GETIRTIMEOUT: 710 dev_dbg(dev, "Get receive timeout"); 711 break; 712 case MCE_CMD_GETIRTXPORTS: 713 dev_dbg(dev, "Get transmit blaster mask"); 714 break; 715 case MCE_RSP_EQIRRXPORTEN: 716 dev_dbg(dev, "%s %s-range receive sensor in use", 717 inout, data[0] == 0x02 ? "short" : "long"); 718 break; 719 case MCE_CMD_GETIRRXPORTEN: 720 /* aka MCE_RSP_EQIRRXCFCNT */ 721 if (out) 722 dev_dbg(dev, "Get receive sensor"); 723 else 724 dev_dbg(dev, "RX carrier cycle count: %d", 725 ((data[0] << 8) | data[1])); 726 break; 727 case MCE_RSP_EQIRNUMPORTS: 728 if (out) 729 break; 730 dev_dbg(dev, "Num TX ports: %x, num RX ports: %x", 731 data[0], data[1]); 732 break; 733 case MCE_RSP_CMD_ILLEGAL: 734 dev_dbg(dev, "Illegal PORT_IR command"); 735 break; 736 default: 737 dev_dbg(dev, "Unknown command 0x%02x 0x%02x", 738 cmd, subcmd); 739 break; 740 } 741 break; 742 default: 743 break; 744 } 745 746 if (cmd == MCE_IRDATA_TRAILER) 747 dev_dbg(dev, "End of raw IR data"); 748 else if ((cmd != MCE_CMD_PORT_IR) && 749 ((cmd & MCE_PORT_MASK) == MCE_COMMAND_IRDATA)) 750 dev_dbg(dev, "Raw IR data, %d pulse/space samples", ir->rem); 751 #endif 752 } 753 754 /* 755 * Schedule work that can't be done in interrupt handlers 756 * (mceusb_dev_recv() and mce_async_callback()) nor tasklets. 757 * Invokes mceusb_deferred_kevent() for recovering from 758 * error events specified by the kevent bit field. 759 */ 760 static void mceusb_defer_kevent(struct mceusb_dev *ir, int kevent) 761 { 762 set_bit(kevent, &ir->kevent_flags); 763 if (!schedule_work(&ir->kevent)) 764 dev_err(ir->dev, "kevent %d may have been dropped", kevent); 765 else 766 dev_dbg(ir->dev, "kevent %d scheduled", kevent); 767 } 768 769 static void mce_async_callback(struct urb *urb) 770 { 771 struct mceusb_dev *ir; 772 int len; 773 774 if (!urb) 775 return; 776 777 ir = urb->context; 778 779 switch (urb->status) { 780 /* success */ 781 case 0: 782 len = urb->actual_length; 783 784 mceusb_dev_printdata(ir, urb->transfer_buffer, len, 785 0, len, true); 786 break; 787 788 case -ECONNRESET: 789 case -ENOENT: 790 case -EILSEQ: 791 case -ESHUTDOWN: 792 break; 793 794 case -EPIPE: 795 dev_err(ir->dev, "Error: request urb status = %d (TX HALT)", 796 urb->status); 797 mceusb_defer_kevent(ir, EVENT_TX_HALT); 798 break; 799 800 default: 801 dev_err(ir->dev, "Error: request urb status = %d", urb->status); 802 break; 803 } 804 805 /* the transfer buffer and urb were allocated in mce_request_packet */ 806 kfree(urb->transfer_buffer); 807 usb_free_urb(urb); 808 } 809 810 /* request outgoing (send) usb packet - used to initialize remote */ 811 static void mce_request_packet(struct mceusb_dev *ir, unsigned char *data, 812 int size) 813 { 814 int res; 815 struct urb *async_urb; 816 struct device *dev = ir->dev; 817 unsigned char *async_buf; 818 819 async_urb = usb_alloc_urb(0, GFP_KERNEL); 820 if (unlikely(!async_urb)) { 821 dev_err(dev, "Error, couldn't allocate urb!"); 822 return; 823 } 824 825 async_buf = kmalloc(size, GFP_KERNEL); 826 if (!async_buf) { 827 usb_free_urb(async_urb); 828 return; 829 } 830 831 /* outbound data */ 832 if (usb_endpoint_xfer_int(ir->usb_ep_out)) 833 usb_fill_int_urb(async_urb, ir->usbdev, ir->pipe_out, 834 async_buf, size, mce_async_callback, ir, 835 ir->usb_ep_out->bInterval); 836 else 837 usb_fill_bulk_urb(async_urb, ir->usbdev, ir->pipe_out, 838 async_buf, size, mce_async_callback, ir); 839 840 memcpy(async_buf, data, size); 841 842 dev_dbg(dev, "send request called (size=%#x)", size); 843 844 res = usb_submit_urb(async_urb, GFP_ATOMIC); 845 if (res) { 846 dev_err(dev, "send request FAILED! (res=%d)", res); 847 kfree(async_buf); 848 usb_free_urb(async_urb); 849 return; 850 } 851 dev_dbg(dev, "send request complete (res=%d)", res); 852 } 853 854 static void mce_async_out(struct mceusb_dev *ir, unsigned char *data, int size) 855 { 856 int rsize = sizeof(DEVICE_RESUME); 857 858 if (ir->need_reset) { 859 ir->need_reset = false; 860 mce_request_packet(ir, DEVICE_RESUME, rsize); 861 msleep(10); 862 } 863 864 mce_request_packet(ir, data, size); 865 msleep(10); 866 } 867 868 /* Send data out the IR blaster port(s) */ 869 static int mceusb_tx_ir(struct rc_dev *dev, unsigned *txbuf, unsigned count) 870 { 871 struct mceusb_dev *ir = dev->priv; 872 int i, length, ret = 0; 873 int cmdcount = 0; 874 unsigned char cmdbuf[MCE_CMDBUF_SIZE]; 875 876 /* MCE tx init header */ 877 cmdbuf[cmdcount++] = MCE_CMD_PORT_IR; 878 cmdbuf[cmdcount++] = MCE_CMD_SETIRTXPORTS; 879 cmdbuf[cmdcount++] = ir->tx_mask; 880 881 /* Send the set TX ports command */ 882 mce_async_out(ir, cmdbuf, cmdcount); 883 cmdcount = 0; 884 885 /* Generate mce packet data */ 886 for (i = 0; (i < count) && (cmdcount < MCE_CMDBUF_SIZE); i++) { 887 txbuf[i] = txbuf[i] / MCE_TIME_UNIT; 888 889 do { /* loop to support long pulses/spaces > 127*50us=6.35ms */ 890 891 /* Insert mce packet header every 4th entry */ 892 if ((cmdcount < MCE_CMDBUF_SIZE) && 893 (cmdcount % MCE_CODE_LENGTH) == 0) 894 cmdbuf[cmdcount++] = MCE_IRDATA_HEADER; 895 896 /* Insert mce packet data */ 897 if (cmdcount < MCE_CMDBUF_SIZE) 898 cmdbuf[cmdcount++] = 899 (txbuf[i] < MCE_PULSE_BIT ? 900 txbuf[i] : MCE_MAX_PULSE_LENGTH) | 901 (i & 1 ? 0x00 : MCE_PULSE_BIT); 902 else { 903 ret = -EINVAL; 904 goto out; 905 } 906 907 } while ((txbuf[i] > MCE_MAX_PULSE_LENGTH) && 908 (txbuf[i] -= MCE_MAX_PULSE_LENGTH)); 909 } 910 911 /* Check if we have room for the empty packet at the end */ 912 if (cmdcount >= MCE_CMDBUF_SIZE) { 913 ret = -EINVAL; 914 goto out; 915 } 916 917 /* Fix packet length in last header */ 918 length = cmdcount % MCE_CODE_LENGTH; 919 cmdbuf[cmdcount - length] -= MCE_CODE_LENGTH - length; 920 921 /* All mce commands end with an empty packet (0x80) */ 922 cmdbuf[cmdcount++] = MCE_IRDATA_TRAILER; 923 924 /* Transmit the command to the mce device */ 925 mce_async_out(ir, cmdbuf, cmdcount); 926 927 out: 928 return ret ? ret : count; 929 } 930 931 /* Sets active IR outputs -- mce devices typically have two */ 932 static int mceusb_set_tx_mask(struct rc_dev *dev, u32 mask) 933 { 934 struct mceusb_dev *ir = dev->priv; 935 936 /* return number of transmitters */ 937 int emitters = ir->num_txports ? ir->num_txports : 2; 938 939 if (mask >= (1 << emitters)) 940 return emitters; 941 942 if (ir->flags.tx_mask_normal) 943 ir->tx_mask = mask; 944 else 945 ir->tx_mask = (mask != MCE_DEFAULT_TX_MASK ? 946 mask ^ MCE_DEFAULT_TX_MASK : mask) << 1; 947 948 return 0; 949 } 950 951 /* Sets the send carrier frequency and mode */ 952 static int mceusb_set_tx_carrier(struct rc_dev *dev, u32 carrier) 953 { 954 struct mceusb_dev *ir = dev->priv; 955 int clk = 10000000; 956 int prescaler = 0, divisor = 0; 957 unsigned char cmdbuf[4] = { MCE_CMD_PORT_IR, 958 MCE_CMD_SETIRCFS, 0x00, 0x00 }; 959 960 /* Carrier has changed */ 961 if (ir->carrier != carrier) { 962 963 if (carrier == 0) { 964 ir->carrier = carrier; 965 cmdbuf[2] = MCE_CMD_SIG_END; 966 cmdbuf[3] = MCE_IRDATA_TRAILER; 967 dev_dbg(ir->dev, "disabling carrier modulation"); 968 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 969 return 0; 970 } 971 972 for (prescaler = 0; prescaler < 4; ++prescaler) { 973 divisor = (clk >> (2 * prescaler)) / carrier; 974 if (divisor <= 0xff) { 975 ir->carrier = carrier; 976 cmdbuf[2] = prescaler; 977 cmdbuf[3] = divisor; 978 dev_dbg(ir->dev, "requesting %u HZ carrier", 979 carrier); 980 981 /* Transmit new carrier to mce device */ 982 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 983 return 0; 984 } 985 } 986 987 return -EINVAL; 988 989 } 990 991 return 0; 992 } 993 994 static int mceusb_set_timeout(struct rc_dev *dev, unsigned int timeout) 995 { 996 u8 cmdbuf[4] = { MCE_CMD_PORT_IR, MCE_CMD_SETIRTIMEOUT, 0, 0 }; 997 struct mceusb_dev *ir = dev->priv; 998 unsigned int units; 999 1000 units = DIV_ROUND_CLOSEST(timeout, US_TO_NS(MCE_TIME_UNIT)); 1001 1002 cmdbuf[2] = units >> 8; 1003 cmdbuf[3] = units; 1004 1005 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 1006 1007 /* get receiver timeout value */ 1008 mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT)); 1009 1010 return 0; 1011 } 1012 1013 /* 1014 * Select or deselect the 2nd receiver port. 1015 * Second receiver is learning mode, wide-band, short-range receiver. 1016 * Only one receiver (long or short range) may be active at a time. 1017 */ 1018 static int mceusb_set_rx_wideband(struct rc_dev *dev, int enable) 1019 { 1020 struct mceusb_dev *ir = dev->priv; 1021 unsigned char cmdbuf[3] = { MCE_CMD_PORT_IR, 1022 MCE_CMD_SETIRRXPORTEN, 0x00 }; 1023 1024 dev_dbg(ir->dev, "select %s-range receive sensor", 1025 enable ? "short" : "long"); 1026 if (enable) { 1027 ir->wideband_rx_enabled = true; 1028 cmdbuf[2] = 2; /* port 2 is short range receiver */ 1029 } else { 1030 ir->wideband_rx_enabled = false; 1031 cmdbuf[2] = 1; /* port 1 is long range receiver */ 1032 } 1033 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 1034 /* response from device sets ir->learning_active */ 1035 1036 return 0; 1037 } 1038 1039 /* 1040 * Enable/disable receiver carrier frequency pass through reporting. 1041 * Only the short-range receiver has carrier frequency measuring capability. 1042 * Implicitly select this receiver when enabling carrier frequency reporting. 1043 */ 1044 static int mceusb_set_rx_carrier_report(struct rc_dev *dev, int enable) 1045 { 1046 struct mceusb_dev *ir = dev->priv; 1047 unsigned char cmdbuf[3] = { MCE_CMD_PORT_IR, 1048 MCE_CMD_SETIRRXPORTEN, 0x00 }; 1049 1050 dev_dbg(ir->dev, "%s short-range receiver carrier reporting", 1051 enable ? "enable" : "disable"); 1052 if (enable) { 1053 ir->carrier_report_enabled = true; 1054 if (!ir->learning_active) { 1055 cmdbuf[2] = 2; /* port 2 is short range receiver */ 1056 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 1057 } 1058 } else { 1059 ir->carrier_report_enabled = false; 1060 /* 1061 * Revert to normal (long-range) receiver only if the 1062 * wideband (short-range) receiver wasn't explicitly 1063 * enabled. 1064 */ 1065 if (ir->learning_active && !ir->wideband_rx_enabled) { 1066 cmdbuf[2] = 1; /* port 1 is long range receiver */ 1067 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 1068 } 1069 } 1070 1071 return 0; 1072 } 1073 1074 /* 1075 * We don't do anything but print debug spew for many of the command bits 1076 * we receive from the hardware, but some of them are useful information 1077 * we want to store so that we can use them. 1078 */ 1079 static void mceusb_handle_command(struct mceusb_dev *ir, int index) 1080 { 1081 struct ir_raw_event rawir = {}; 1082 u8 hi = ir->buf_in[index + 1] & 0xff; 1083 u8 lo = ir->buf_in[index + 2] & 0xff; 1084 u32 carrier_cycles; 1085 u32 cycles_fix; 1086 1087 switch (ir->buf_in[index]) { 1088 /* the one and only 5-byte return value command */ 1089 case MCE_RSP_GETPORTSTATUS: 1090 if ((ir->buf_in[index + 4] & 0xff) == 0x00) 1091 ir->txports_cabled |= 1 << hi; 1092 break; 1093 1094 /* 2-byte return value commands */ 1095 case MCE_RSP_EQIRTIMEOUT: 1096 ir->rc->timeout = US_TO_NS((hi << 8 | lo) * MCE_TIME_UNIT); 1097 break; 1098 case MCE_RSP_EQIRNUMPORTS: 1099 ir->num_txports = hi; 1100 ir->num_rxports = lo; 1101 break; 1102 case MCE_RSP_EQIRRXCFCNT: 1103 /* 1104 * The carrier cycle counter can overflow and wrap around 1105 * without notice from the device. So frequency measurement 1106 * will be inaccurate with long duration IR. 1107 * 1108 * The long-range (non learning) receiver always reports 1109 * zero count so we always ignore its report. 1110 */ 1111 if (ir->carrier_report_enabled && ir->learning_active && 1112 ir->pulse_tunit > 0) { 1113 carrier_cycles = (hi << 8 | lo); 1114 /* 1115 * Adjust carrier cycle count by adding 1116 * 1 missed count per pulse "on" 1117 */ 1118 cycles_fix = ir->flags.rx2 == 2 ? ir->pulse_count : 0; 1119 rawir.carrier_report = 1; 1120 rawir.carrier = (1000000u / MCE_TIME_UNIT) * 1121 (carrier_cycles + cycles_fix) / 1122 ir->pulse_tunit; 1123 dev_dbg(ir->dev, "RX carrier frequency %u Hz (pulse count = %u, cycles = %u, duration = %u, rx2 = %u)", 1124 rawir.carrier, ir->pulse_count, carrier_cycles, 1125 ir->pulse_tunit, ir->flags.rx2); 1126 ir_raw_event_store(ir->rc, &rawir); 1127 } 1128 break; 1129 1130 /* 1-byte return value commands */ 1131 case MCE_RSP_EQEMVER: 1132 ir->emver = hi; 1133 break; 1134 case MCE_RSP_EQIRTXPORTS: 1135 ir->tx_mask = hi; 1136 break; 1137 case MCE_RSP_EQIRRXPORTEN: 1138 ir->learning_active = ((hi & 0x02) == 0x02); 1139 if (ir->rxports_active != hi) { 1140 dev_info(ir->dev, "%s-range (0x%x) receiver active", 1141 ir->learning_active ? "short" : "long", hi); 1142 ir->rxports_active = hi; 1143 } 1144 break; 1145 case MCE_RSP_CMD_ILLEGAL: 1146 ir->need_reset = true; 1147 break; 1148 default: 1149 break; 1150 } 1151 } 1152 1153 static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len) 1154 { 1155 struct ir_raw_event rawir = {}; 1156 bool event = false; 1157 int i = 0; 1158 1159 /* skip meaningless 0xb1 0x60 header bytes on orig receiver */ 1160 if (ir->flags.microsoft_gen1) 1161 i = 2; 1162 1163 /* if there's no data, just return now */ 1164 if (buf_len <= i) 1165 return; 1166 1167 for (; i < buf_len; i++) { 1168 switch (ir->parser_state) { 1169 case SUBCMD: 1170 ir->rem = mceusb_cmd_datasize(ir->cmd, ir->buf_in[i]); 1171 mceusb_dev_printdata(ir, ir->buf_in, buf_len, i - 1, 1172 ir->rem + 2, false); 1173 mceusb_handle_command(ir, i); 1174 ir->parser_state = CMD_DATA; 1175 break; 1176 case PARSE_IRDATA: 1177 ir->rem--; 1178 rawir.pulse = ((ir->buf_in[i] & MCE_PULSE_BIT) != 0); 1179 rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK); 1180 if (unlikely(!rawir.duration)) { 1181 dev_warn(ir->dev, "nonsensical irdata %02x with duration 0", 1182 ir->buf_in[i]); 1183 break; 1184 } 1185 if (rawir.pulse) { 1186 ir->pulse_tunit += rawir.duration; 1187 ir->pulse_count++; 1188 } 1189 rawir.duration *= US_TO_NS(MCE_TIME_UNIT); 1190 1191 dev_dbg(ir->dev, "Storing %s %u ns (%02x)", 1192 rawir.pulse ? "pulse" : "space", 1193 rawir.duration, ir->buf_in[i]); 1194 1195 if (ir_raw_event_store_with_filter(ir->rc, &rawir)) 1196 event = true; 1197 break; 1198 case CMD_DATA: 1199 ir->rem--; 1200 break; 1201 case CMD_HEADER: 1202 /* decode mce packets of the form (84),AA,BB,CC,DD */ 1203 /* IR data packets can span USB messages - rem */ 1204 ir->cmd = ir->buf_in[i]; 1205 if ((ir->cmd == MCE_CMD_PORT_IR) || 1206 ((ir->cmd & MCE_PORT_MASK) != 1207 MCE_COMMAND_IRDATA)) { 1208 ir->parser_state = SUBCMD; 1209 continue; 1210 } 1211 ir->rem = (ir->cmd & MCE_PACKET_LENGTH_MASK); 1212 mceusb_dev_printdata(ir, ir->buf_in, buf_len, 1213 i, ir->rem + 1, false); 1214 if (ir->rem) { 1215 ir->parser_state = PARSE_IRDATA; 1216 } else { 1217 struct ir_raw_event ev = { 1218 .timeout = 1, 1219 .duration = ir->rc->timeout 1220 }; 1221 1222 if (ir_raw_event_store_with_filter(ir->rc, 1223 &ev)) 1224 event = true; 1225 ir->pulse_tunit = 0; 1226 ir->pulse_count = 0; 1227 } 1228 break; 1229 } 1230 1231 if (ir->parser_state != CMD_HEADER && !ir->rem) 1232 ir->parser_state = CMD_HEADER; 1233 } 1234 if (event) { 1235 dev_dbg(ir->dev, "processed IR data"); 1236 ir_raw_event_handle(ir->rc); 1237 } 1238 } 1239 1240 static void mceusb_dev_recv(struct urb *urb) 1241 { 1242 struct mceusb_dev *ir; 1243 1244 if (!urb) 1245 return; 1246 1247 ir = urb->context; 1248 if (!ir) { 1249 usb_unlink_urb(urb); 1250 return; 1251 } 1252 1253 switch (urb->status) { 1254 /* success */ 1255 case 0: 1256 mceusb_process_ir_data(ir, urb->actual_length); 1257 break; 1258 1259 case -ECONNRESET: 1260 case -ENOENT: 1261 case -EILSEQ: 1262 case -ESHUTDOWN: 1263 usb_unlink_urb(urb); 1264 return; 1265 1266 case -EPIPE: 1267 dev_err(ir->dev, "Error: urb status = %d (RX HALT)", 1268 urb->status); 1269 mceusb_defer_kevent(ir, EVENT_RX_HALT); 1270 return; 1271 1272 default: 1273 dev_err(ir->dev, "Error: urb status = %d", urb->status); 1274 break; 1275 } 1276 1277 usb_submit_urb(urb, GFP_ATOMIC); 1278 } 1279 1280 static void mceusb_get_emulator_version(struct mceusb_dev *ir) 1281 { 1282 /* If we get no reply or an illegal command reply, its ver 1, says MS */ 1283 ir->emver = 1; 1284 mce_async_out(ir, GET_EMVER, sizeof(GET_EMVER)); 1285 } 1286 1287 static void mceusb_gen1_init(struct mceusb_dev *ir) 1288 { 1289 int ret; 1290 struct device *dev = ir->dev; 1291 char *data; 1292 1293 data = kzalloc(USB_CTRL_MSG_SZ, GFP_KERNEL); 1294 if (!data) { 1295 dev_err(dev, "%s: memory allocation failed!", __func__); 1296 return; 1297 } 1298 1299 /* 1300 * This is a strange one. Windows issues a set address to the device 1301 * on the receive control pipe and expect a certain value pair back 1302 */ 1303 ret = usb_control_msg(ir->usbdev, usb_rcvctrlpipe(ir->usbdev, 0), 1304 USB_REQ_SET_ADDRESS, USB_TYPE_VENDOR, 0, 0, 1305 data, USB_CTRL_MSG_SZ, HZ * 3); 1306 dev_dbg(dev, "set address - ret = %d", ret); 1307 dev_dbg(dev, "set address - data[0] = %d, data[1] = %d", 1308 data[0], data[1]); 1309 1310 /* set feature: bit rate 38400 bps */ 1311 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), 1312 USB_REQ_SET_FEATURE, USB_TYPE_VENDOR, 1313 0xc04e, 0x0000, NULL, 0, HZ * 3); 1314 1315 dev_dbg(dev, "set feature - ret = %d", ret); 1316 1317 /* bRequest 4: set char length to 8 bits */ 1318 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), 1319 4, USB_TYPE_VENDOR, 1320 0x0808, 0x0000, NULL, 0, HZ * 3); 1321 dev_dbg(dev, "set char length - retB = %d", ret); 1322 1323 /* bRequest 2: set handshaking to use DTR/DSR */ 1324 ret = usb_control_msg(ir->usbdev, usb_sndctrlpipe(ir->usbdev, 0), 1325 2, USB_TYPE_VENDOR, 1326 0x0000, 0x0100, NULL, 0, HZ * 3); 1327 dev_dbg(dev, "set handshake - retC = %d", ret); 1328 1329 /* device resume */ 1330 mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); 1331 1332 /* get hw/sw revision? */ 1333 mce_async_out(ir, GET_REVISION, sizeof(GET_REVISION)); 1334 1335 kfree(data); 1336 } 1337 1338 static void mceusb_gen2_init(struct mceusb_dev *ir) 1339 { 1340 /* device resume */ 1341 mce_async_out(ir, DEVICE_RESUME, sizeof(DEVICE_RESUME)); 1342 1343 /* get wake version (protocol, key, address) */ 1344 mce_async_out(ir, GET_WAKEVERSION, sizeof(GET_WAKEVERSION)); 1345 1346 /* unknown what this one actually returns... */ 1347 mce_async_out(ir, GET_UNKNOWN2, sizeof(GET_UNKNOWN2)); 1348 } 1349 1350 static void mceusb_get_parameters(struct mceusb_dev *ir) 1351 { 1352 int i; 1353 unsigned char cmdbuf[3] = { MCE_CMD_PORT_SYS, 1354 MCE_CMD_GETPORTSTATUS, 0x00 }; 1355 1356 /* defaults, if the hardware doesn't support querying */ 1357 ir->num_txports = 2; 1358 ir->num_rxports = 2; 1359 1360 /* get number of tx and rx ports */ 1361 mce_async_out(ir, GET_NUM_PORTS, sizeof(GET_NUM_PORTS)); 1362 1363 /* get the carrier and frequency */ 1364 mce_async_out(ir, GET_CARRIER_FREQ, sizeof(GET_CARRIER_FREQ)); 1365 1366 if (ir->num_txports && !ir->flags.no_tx) 1367 /* get the transmitter bitmask */ 1368 mce_async_out(ir, GET_TX_BITMASK, sizeof(GET_TX_BITMASK)); 1369 1370 /* get receiver timeout value */ 1371 mce_async_out(ir, GET_RX_TIMEOUT, sizeof(GET_RX_TIMEOUT)); 1372 1373 /* get receiver sensor setting */ 1374 mce_async_out(ir, GET_RX_SENSOR, sizeof(GET_RX_SENSOR)); 1375 1376 for (i = 0; i < ir->num_txports; i++) { 1377 cmdbuf[2] = i; 1378 mce_async_out(ir, cmdbuf, sizeof(cmdbuf)); 1379 } 1380 } 1381 1382 static void mceusb_flash_led(struct mceusb_dev *ir) 1383 { 1384 if (ir->emver < 2) 1385 return; 1386 1387 mce_async_out(ir, FLASH_LED, sizeof(FLASH_LED)); 1388 } 1389 1390 /* 1391 * Workqueue function 1392 * for resetting or recovering device after occurrence of error events 1393 * specified in ir->kevent bit field. 1394 * Function runs (via schedule_work()) in non-interrupt context, for 1395 * calls here (such as usb_clear_halt()) requiring non-interrupt context. 1396 */ 1397 static void mceusb_deferred_kevent(struct work_struct *work) 1398 { 1399 struct mceusb_dev *ir = 1400 container_of(work, struct mceusb_dev, kevent); 1401 int status; 1402 1403 if (test_bit(EVENT_RX_HALT, &ir->kevent_flags)) { 1404 usb_unlink_urb(ir->urb_in); 1405 status = usb_clear_halt(ir->usbdev, ir->pipe_in); 1406 if (status < 0) { 1407 dev_err(ir->dev, "rx clear halt error %d", 1408 status); 1409 } 1410 clear_bit(EVENT_RX_HALT, &ir->kevent_flags); 1411 if (status == 0) { 1412 status = usb_submit_urb(ir->urb_in, GFP_KERNEL); 1413 if (status < 0) { 1414 dev_err(ir->dev, 1415 "rx unhalt submit urb error %d", 1416 status); 1417 } 1418 } 1419 } 1420 1421 if (test_bit(EVENT_TX_HALT, &ir->kevent_flags)) { 1422 status = usb_clear_halt(ir->usbdev, ir->pipe_out); 1423 if (status < 0) 1424 dev_err(ir->dev, "tx clear halt error %d", status); 1425 clear_bit(EVENT_TX_HALT, &ir->kevent_flags); 1426 } 1427 } 1428 1429 static struct rc_dev *mceusb_init_rc_dev(struct mceusb_dev *ir) 1430 { 1431 struct usb_device *udev = ir->usbdev; 1432 struct device *dev = ir->dev; 1433 struct rc_dev *rc; 1434 int ret; 1435 1436 rc = rc_allocate_device(RC_DRIVER_IR_RAW); 1437 if (!rc) { 1438 dev_err(dev, "remote dev allocation failed"); 1439 goto out; 1440 } 1441 1442 snprintf(ir->name, sizeof(ir->name), "%s (%04x:%04x)", 1443 mceusb_model[ir->model].name ? 1444 mceusb_model[ir->model].name : 1445 "Media Center Ed. eHome Infrared Remote Transceiver", 1446 le16_to_cpu(ir->usbdev->descriptor.idVendor), 1447 le16_to_cpu(ir->usbdev->descriptor.idProduct)); 1448 1449 usb_make_path(ir->usbdev, ir->phys, sizeof(ir->phys)); 1450 1451 rc->device_name = ir->name; 1452 rc->input_phys = ir->phys; 1453 usb_to_input_id(ir->usbdev, &rc->input_id); 1454 rc->dev.parent = dev; 1455 rc->priv = ir; 1456 rc->allowed_protocols = RC_PROTO_BIT_ALL_IR_DECODER; 1457 rc->min_timeout = US_TO_NS(MCE_TIME_UNIT); 1458 rc->timeout = MS_TO_NS(100); 1459 if (!mceusb_model[ir->model].broken_irtimeout) { 1460 rc->s_timeout = mceusb_set_timeout; 1461 rc->max_timeout = 10 * IR_DEFAULT_TIMEOUT; 1462 } else { 1463 /* 1464 * If we can't set the timeout using CMD_SETIRTIMEOUT, we can 1465 * rely on software timeouts for timeouts < 100ms. 1466 */ 1467 rc->max_timeout = rc->timeout; 1468 } 1469 if (!ir->flags.no_tx) { 1470 rc->s_tx_mask = mceusb_set_tx_mask; 1471 rc->s_tx_carrier = mceusb_set_tx_carrier; 1472 rc->tx_ir = mceusb_tx_ir; 1473 } 1474 if (ir->flags.rx2 > 0) { 1475 rc->s_learning_mode = mceusb_set_rx_wideband; 1476 rc->s_carrier_report = mceusb_set_rx_carrier_report; 1477 } 1478 rc->driver_name = DRIVER_NAME; 1479 1480 switch (le16_to_cpu(udev->descriptor.idVendor)) { 1481 case VENDOR_HAUPPAUGE: 1482 rc->map_name = RC_MAP_HAUPPAUGE; 1483 break; 1484 case VENDOR_PCTV: 1485 rc->map_name = RC_MAP_PINNACLE_PCTV_HD; 1486 break; 1487 default: 1488 rc->map_name = RC_MAP_RC6_MCE; 1489 } 1490 if (mceusb_model[ir->model].rc_map) 1491 rc->map_name = mceusb_model[ir->model].rc_map; 1492 1493 ret = rc_register_device(rc); 1494 if (ret < 0) { 1495 dev_err(dev, "remote dev registration failed"); 1496 goto out; 1497 } 1498 1499 return rc; 1500 1501 out: 1502 rc_free_device(rc); 1503 return NULL; 1504 } 1505 1506 static int mceusb_dev_probe(struct usb_interface *intf, 1507 const struct usb_device_id *id) 1508 { 1509 struct usb_device *dev = interface_to_usbdev(intf); 1510 struct usb_host_interface *idesc; 1511 struct usb_endpoint_descriptor *ep = NULL; 1512 struct usb_endpoint_descriptor *ep_in = NULL; 1513 struct usb_endpoint_descriptor *ep_out = NULL; 1514 struct mceusb_dev *ir = NULL; 1515 int pipe, maxp, i, res; 1516 char buf[63], name[128] = ""; 1517 enum mceusb_model_type model = id->driver_info; 1518 bool is_gen3; 1519 bool is_microsoft_gen1; 1520 bool tx_mask_normal; 1521 int ir_intfnum; 1522 1523 dev_dbg(&intf->dev, "%s called", __func__); 1524 1525 idesc = intf->cur_altsetting; 1526 1527 is_gen3 = mceusb_model[model].mce_gen3; 1528 is_microsoft_gen1 = mceusb_model[model].mce_gen1; 1529 tx_mask_normal = mceusb_model[model].tx_mask_normal; 1530 ir_intfnum = mceusb_model[model].ir_intfnum; 1531 1532 /* There are multi-function devices with non-IR interfaces */ 1533 if (idesc->desc.bInterfaceNumber != ir_intfnum) 1534 return -ENODEV; 1535 1536 /* step through the endpoints to find first bulk in and out endpoint */ 1537 for (i = 0; i < idesc->desc.bNumEndpoints; ++i) { 1538 ep = &idesc->endpoint[i].desc; 1539 1540 if (ep_in == NULL) { 1541 if (usb_endpoint_is_bulk_in(ep)) { 1542 ep_in = ep; 1543 dev_dbg(&intf->dev, "acceptable bulk inbound endpoint found\n"); 1544 } else if (usb_endpoint_is_int_in(ep)) { 1545 ep_in = ep; 1546 ep_in->bInterval = 1; 1547 dev_dbg(&intf->dev, "acceptable interrupt inbound endpoint found\n"); 1548 } 1549 } 1550 1551 if (ep_out == NULL) { 1552 if (usb_endpoint_is_bulk_out(ep)) { 1553 ep_out = ep; 1554 dev_dbg(&intf->dev, "acceptable bulk outbound endpoint found\n"); 1555 } else if (usb_endpoint_is_int_out(ep)) { 1556 ep_out = ep; 1557 ep_out->bInterval = 1; 1558 dev_dbg(&intf->dev, "acceptable interrupt outbound endpoint found\n"); 1559 } 1560 } 1561 } 1562 if (!ep_in || !ep_out) { 1563 dev_dbg(&intf->dev, "required endpoints not found\n"); 1564 return -ENODEV; 1565 } 1566 1567 if (usb_endpoint_xfer_int(ep_in)) 1568 pipe = usb_rcvintpipe(dev, ep_in->bEndpointAddress); 1569 else 1570 pipe = usb_rcvbulkpipe(dev, ep_in->bEndpointAddress); 1571 maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe)); 1572 1573 ir = kzalloc(sizeof(struct mceusb_dev), GFP_KERNEL); 1574 if (!ir) 1575 goto mem_alloc_fail; 1576 1577 ir->pipe_in = pipe; 1578 ir->buf_in = usb_alloc_coherent(dev, maxp, GFP_ATOMIC, &ir->dma_in); 1579 if (!ir->buf_in) 1580 goto buf_in_alloc_fail; 1581 1582 ir->urb_in = usb_alloc_urb(0, GFP_KERNEL); 1583 if (!ir->urb_in) 1584 goto urb_in_alloc_fail; 1585 1586 ir->usbdev = usb_get_dev(dev); 1587 ir->dev = &intf->dev; 1588 ir->len_in = maxp; 1589 ir->flags.microsoft_gen1 = is_microsoft_gen1; 1590 ir->flags.tx_mask_normal = tx_mask_normal; 1591 ir->flags.no_tx = mceusb_model[model].no_tx; 1592 ir->flags.rx2 = mceusb_model[model].rx2; 1593 ir->model = model; 1594 1595 /* Saving usb interface data for use by the transmitter routine */ 1596 ir->usb_ep_out = ep_out; 1597 if (usb_endpoint_xfer_int(ep_out)) 1598 ir->pipe_out = usb_sndintpipe(ir->usbdev, 1599 ep_out->bEndpointAddress); 1600 else 1601 ir->pipe_out = usb_sndbulkpipe(ir->usbdev, 1602 ep_out->bEndpointAddress); 1603 1604 if (dev->descriptor.iManufacturer 1605 && usb_string(dev, dev->descriptor.iManufacturer, 1606 buf, sizeof(buf)) > 0) 1607 strscpy(name, buf, sizeof(name)); 1608 if (dev->descriptor.iProduct 1609 && usb_string(dev, dev->descriptor.iProduct, 1610 buf, sizeof(buf)) > 0) 1611 snprintf(name + strlen(name), sizeof(name) - strlen(name), 1612 " %s", buf); 1613 1614 /* 1615 * Initialize async USB error handler before registering 1616 * or activating any mceusb RX and TX functions 1617 */ 1618 INIT_WORK(&ir->kevent, mceusb_deferred_kevent); 1619 1620 ir->rc = mceusb_init_rc_dev(ir); 1621 if (!ir->rc) 1622 goto rc_dev_fail; 1623 1624 /* wire up inbound data handler */ 1625 if (usb_endpoint_xfer_int(ep_in)) 1626 usb_fill_int_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp, 1627 mceusb_dev_recv, ir, ep_in->bInterval); 1628 else 1629 usb_fill_bulk_urb(ir->urb_in, dev, pipe, ir->buf_in, maxp, 1630 mceusb_dev_recv, ir); 1631 1632 ir->urb_in->transfer_dma = ir->dma_in; 1633 ir->urb_in->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1634 1635 /* flush buffers on the device */ 1636 dev_dbg(&intf->dev, "Flushing receive buffers"); 1637 res = usb_submit_urb(ir->urb_in, GFP_KERNEL); 1638 if (res) 1639 dev_err(&intf->dev, "failed to flush buffers: %d", res); 1640 1641 /* figure out which firmware/emulator version this hardware has */ 1642 mceusb_get_emulator_version(ir); 1643 1644 /* initialize device */ 1645 if (ir->flags.microsoft_gen1) 1646 mceusb_gen1_init(ir); 1647 else if (!is_gen3) 1648 mceusb_gen2_init(ir); 1649 1650 mceusb_get_parameters(ir); 1651 1652 mceusb_flash_led(ir); 1653 1654 if (!ir->flags.no_tx) 1655 mceusb_set_tx_mask(ir->rc, MCE_DEFAULT_TX_MASK); 1656 1657 usb_set_intfdata(intf, ir); 1658 1659 /* enable wake via this device */ 1660 device_set_wakeup_capable(ir->dev, true); 1661 device_set_wakeup_enable(ir->dev, true); 1662 1663 dev_info(&intf->dev, "Registered %s with mce emulator interface version %x", 1664 name, ir->emver); 1665 dev_info(&intf->dev, "%x tx ports (0x%x cabled) and %x rx sensors (0x%x active)", 1666 ir->num_txports, ir->txports_cabled, 1667 ir->num_rxports, ir->rxports_active); 1668 1669 return 0; 1670 1671 /* Error-handling path */ 1672 rc_dev_fail: 1673 cancel_work_sync(&ir->kevent); 1674 usb_put_dev(ir->usbdev); 1675 usb_kill_urb(ir->urb_in); 1676 usb_free_urb(ir->urb_in); 1677 urb_in_alloc_fail: 1678 usb_free_coherent(dev, maxp, ir->buf_in, ir->dma_in); 1679 buf_in_alloc_fail: 1680 kfree(ir); 1681 mem_alloc_fail: 1682 dev_err(&intf->dev, "%s: device setup failed!", __func__); 1683 1684 return -ENOMEM; 1685 } 1686 1687 1688 static void mceusb_dev_disconnect(struct usb_interface *intf) 1689 { 1690 struct usb_device *dev = interface_to_usbdev(intf); 1691 struct mceusb_dev *ir = usb_get_intfdata(intf); 1692 1693 usb_set_intfdata(intf, NULL); 1694 1695 if (!ir) 1696 return; 1697 1698 ir->usbdev = NULL; 1699 cancel_work_sync(&ir->kevent); 1700 rc_unregister_device(ir->rc); 1701 usb_kill_urb(ir->urb_in); 1702 usb_free_urb(ir->urb_in); 1703 usb_free_coherent(dev, ir->len_in, ir->buf_in, ir->dma_in); 1704 usb_put_dev(dev); 1705 1706 kfree(ir); 1707 } 1708 1709 static int mceusb_dev_suspend(struct usb_interface *intf, pm_message_t message) 1710 { 1711 struct mceusb_dev *ir = usb_get_intfdata(intf); 1712 dev_info(ir->dev, "suspend"); 1713 usb_kill_urb(ir->urb_in); 1714 return 0; 1715 } 1716 1717 static int mceusb_dev_resume(struct usb_interface *intf) 1718 { 1719 struct mceusb_dev *ir = usb_get_intfdata(intf); 1720 dev_info(ir->dev, "resume"); 1721 if (usb_submit_urb(ir->urb_in, GFP_ATOMIC)) 1722 return -EIO; 1723 return 0; 1724 } 1725 1726 static struct usb_driver mceusb_dev_driver = { 1727 .name = DRIVER_NAME, 1728 .probe = mceusb_dev_probe, 1729 .disconnect = mceusb_dev_disconnect, 1730 .suspend = mceusb_dev_suspend, 1731 .resume = mceusb_dev_resume, 1732 .reset_resume = mceusb_dev_resume, 1733 .id_table = mceusb_dev_table 1734 }; 1735 1736 module_usb_driver(mceusb_dev_driver); 1737 1738 MODULE_DESCRIPTION(DRIVER_DESC); 1739 MODULE_AUTHOR(DRIVER_AUTHOR); 1740 MODULE_LICENSE("GPL"); 1741 MODULE_DEVICE_TABLE(usb, mceusb_dev_table); 1742