1 /* 2 * ati_remote2 - ATI/Philips USB RF remote driver 3 * 4 * Copyright (C) 2005-2008 Ville Syrjala <syrjala@sci.fi> 5 * Copyright (C) 2007-2008 Peter Stokes <linux@dadeos.co.uk> 6 * 7 * This program is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License version 2 9 * as published by the Free Software Foundation. 10 */ 11 12 #include <linux/usb/input.h> 13 #include <linux/slab.h> 14 #include <linux/module.h> 15 16 #define DRIVER_DESC "ATI/Philips USB RF remote driver" 17 #define DRIVER_VERSION "0.3" 18 19 MODULE_DESCRIPTION(DRIVER_DESC); 20 MODULE_VERSION(DRIVER_VERSION); 21 MODULE_AUTHOR("Ville Syrjala <syrjala@sci.fi>"); 22 MODULE_LICENSE("GPL"); 23 24 /* 25 * ATI Remote Wonder II Channel Configuration 26 * 27 * The remote control can by assigned one of sixteen "channels" in order to facilitate 28 * the use of multiple remote controls within range of each other. 29 * A remote's "channel" may be altered by pressing and holding the "PC" button for 30 * approximately 3 seconds, after which the button will slowly flash the count of the 31 * currently configured "channel", using the numeric keypad enter a number between 1 and 32 * 16 and then press the "PC" button again, the button will slowly flash the count of the 33 * newly configured "channel". 34 */ 35 36 enum { 37 ATI_REMOTE2_MAX_CHANNEL_MASK = 0xFFFF, 38 ATI_REMOTE2_MAX_MODE_MASK = 0x1F, 39 }; 40 41 static int ati_remote2_set_mask(const char *val, 42 const struct kernel_param *kp, 43 unsigned int max) 44 { 45 unsigned int mask; 46 int ret; 47 48 if (!val) 49 return -EINVAL; 50 51 ret = kstrtouint(val, 0, &mask); 52 if (ret) 53 return ret; 54 55 if (mask & ~max) 56 return -EINVAL; 57 58 *(unsigned int *)kp->arg = mask; 59 60 return 0; 61 } 62 63 static int ati_remote2_set_channel_mask(const char *val, 64 const struct kernel_param *kp) 65 { 66 pr_debug("%s()\n", __func__); 67 68 return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_CHANNEL_MASK); 69 } 70 71 static int ati_remote2_get_channel_mask(char *buffer, 72 const struct kernel_param *kp) 73 { 74 pr_debug("%s()\n", __func__); 75 76 return sprintf(buffer, "0x%04x", *(unsigned int *)kp->arg); 77 } 78 79 static int ati_remote2_set_mode_mask(const char *val, 80 const struct kernel_param *kp) 81 { 82 pr_debug("%s()\n", __func__); 83 84 return ati_remote2_set_mask(val, kp, ATI_REMOTE2_MAX_MODE_MASK); 85 } 86 87 static int ati_remote2_get_mode_mask(char *buffer, 88 const struct kernel_param *kp) 89 { 90 pr_debug("%s()\n", __func__); 91 92 return sprintf(buffer, "0x%02x", *(unsigned int *)kp->arg); 93 } 94 95 static unsigned int channel_mask = ATI_REMOTE2_MAX_CHANNEL_MASK; 96 #define param_check_channel_mask(name, p) __param_check(name, p, unsigned int) 97 static struct kernel_param_ops param_ops_channel_mask = { 98 .set = ati_remote2_set_channel_mask, 99 .get = ati_remote2_get_channel_mask, 100 }; 101 module_param(channel_mask, channel_mask, 0644); 102 MODULE_PARM_DESC(channel_mask, "Bitmask of channels to accept <15:Channel16>...<1:Channel2><0:Channel1>"); 103 104 static unsigned int mode_mask = ATI_REMOTE2_MAX_MODE_MASK; 105 #define param_check_mode_mask(name, p) __param_check(name, p, unsigned int) 106 static struct kernel_param_ops param_ops_mode_mask = { 107 .set = ati_remote2_set_mode_mask, 108 .get = ati_remote2_get_mode_mask, 109 }; 110 module_param(mode_mask, mode_mask, 0644); 111 MODULE_PARM_DESC(mode_mask, "Bitmask of modes to accept <4:PC><3:AUX4><2:AUX3><1:AUX2><0:AUX1>"); 112 113 static struct usb_device_id ati_remote2_id_table[] = { 114 { USB_DEVICE(0x0471, 0x0602) }, /* ATI Remote Wonder II */ 115 { } 116 }; 117 MODULE_DEVICE_TABLE(usb, ati_remote2_id_table); 118 119 static DEFINE_MUTEX(ati_remote2_mutex); 120 121 enum { 122 ATI_REMOTE2_OPENED = 0x1, 123 ATI_REMOTE2_SUSPENDED = 0x2, 124 }; 125 126 enum { 127 ATI_REMOTE2_AUX1, 128 ATI_REMOTE2_AUX2, 129 ATI_REMOTE2_AUX3, 130 ATI_REMOTE2_AUX4, 131 ATI_REMOTE2_PC, 132 ATI_REMOTE2_MODES, 133 }; 134 135 static const struct { 136 u8 hw_code; 137 u16 keycode; 138 } ati_remote2_key_table[] = { 139 { 0x00, KEY_0 }, 140 { 0x01, KEY_1 }, 141 { 0x02, KEY_2 }, 142 { 0x03, KEY_3 }, 143 { 0x04, KEY_4 }, 144 { 0x05, KEY_5 }, 145 { 0x06, KEY_6 }, 146 { 0x07, KEY_7 }, 147 { 0x08, KEY_8 }, 148 { 0x09, KEY_9 }, 149 { 0x0c, KEY_POWER }, 150 { 0x0d, KEY_MUTE }, 151 { 0x10, KEY_VOLUMEUP }, 152 { 0x11, KEY_VOLUMEDOWN }, 153 { 0x20, KEY_CHANNELUP }, 154 { 0x21, KEY_CHANNELDOWN }, 155 { 0x28, KEY_FORWARD }, 156 { 0x29, KEY_REWIND }, 157 { 0x2c, KEY_PLAY }, 158 { 0x30, KEY_PAUSE }, 159 { 0x31, KEY_STOP }, 160 { 0x37, KEY_RECORD }, 161 { 0x38, KEY_DVD }, 162 { 0x39, KEY_TV }, 163 { 0x3f, KEY_PROG1 }, /* AUX1-AUX4 and PC */ 164 { 0x54, KEY_MENU }, 165 { 0x58, KEY_UP }, 166 { 0x59, KEY_DOWN }, 167 { 0x5a, KEY_LEFT }, 168 { 0x5b, KEY_RIGHT }, 169 { 0x5c, KEY_OK }, 170 { 0x78, KEY_A }, 171 { 0x79, KEY_B }, 172 { 0x7a, KEY_C }, 173 { 0x7b, KEY_D }, 174 { 0x7c, KEY_E }, 175 { 0x7d, KEY_F }, 176 { 0x82, KEY_ENTER }, 177 { 0x8e, KEY_VENDOR }, 178 { 0x96, KEY_COFFEE }, 179 { 0xa9, BTN_LEFT }, 180 { 0xaa, BTN_RIGHT }, 181 { 0xbe, KEY_QUESTION }, 182 { 0xd0, KEY_EDIT }, 183 { 0xd5, KEY_FRONT }, 184 { 0xf9, KEY_INFO }, 185 }; 186 187 struct ati_remote2 { 188 struct input_dev *idev; 189 struct usb_device *udev; 190 191 struct usb_interface *intf[2]; 192 struct usb_endpoint_descriptor *ep[2]; 193 struct urb *urb[2]; 194 void *buf[2]; 195 dma_addr_t buf_dma[2]; 196 197 unsigned long jiffies; 198 int mode; 199 200 char name[64]; 201 char phys[64]; 202 203 /* Each mode (AUX1-AUX4 and PC) can have an independent keymap. */ 204 u16 keycode[ATI_REMOTE2_MODES][ARRAY_SIZE(ati_remote2_key_table)]; 205 206 unsigned int flags; 207 208 unsigned int channel_mask; 209 unsigned int mode_mask; 210 }; 211 212 static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id); 213 static void ati_remote2_disconnect(struct usb_interface *interface); 214 static int ati_remote2_suspend(struct usb_interface *interface, pm_message_t message); 215 static int ati_remote2_resume(struct usb_interface *interface); 216 static int ati_remote2_reset_resume(struct usb_interface *interface); 217 static int ati_remote2_pre_reset(struct usb_interface *interface); 218 static int ati_remote2_post_reset(struct usb_interface *interface); 219 220 static struct usb_driver ati_remote2_driver = { 221 .name = "ati_remote2", 222 .probe = ati_remote2_probe, 223 .disconnect = ati_remote2_disconnect, 224 .id_table = ati_remote2_id_table, 225 .suspend = ati_remote2_suspend, 226 .resume = ati_remote2_resume, 227 .reset_resume = ati_remote2_reset_resume, 228 .pre_reset = ati_remote2_pre_reset, 229 .post_reset = ati_remote2_post_reset, 230 .supports_autosuspend = 1, 231 }; 232 233 static int ati_remote2_submit_urbs(struct ati_remote2 *ar2) 234 { 235 int r; 236 237 r = usb_submit_urb(ar2->urb[0], GFP_KERNEL); 238 if (r) { 239 dev_err(&ar2->intf[0]->dev, 240 "%s(): usb_submit_urb() = %d\n", __func__, r); 241 return r; 242 } 243 r = usb_submit_urb(ar2->urb[1], GFP_KERNEL); 244 if (r) { 245 usb_kill_urb(ar2->urb[0]); 246 dev_err(&ar2->intf[1]->dev, 247 "%s(): usb_submit_urb() = %d\n", __func__, r); 248 return r; 249 } 250 251 return 0; 252 } 253 254 static void ati_remote2_kill_urbs(struct ati_remote2 *ar2) 255 { 256 usb_kill_urb(ar2->urb[1]); 257 usb_kill_urb(ar2->urb[0]); 258 } 259 260 static int ati_remote2_open(struct input_dev *idev) 261 { 262 struct ati_remote2 *ar2 = input_get_drvdata(idev); 263 int r; 264 265 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 266 267 r = usb_autopm_get_interface(ar2->intf[0]); 268 if (r) { 269 dev_err(&ar2->intf[0]->dev, 270 "%s(): usb_autopm_get_interface() = %d\n", __func__, r); 271 goto fail1; 272 } 273 274 mutex_lock(&ati_remote2_mutex); 275 276 if (!(ar2->flags & ATI_REMOTE2_SUSPENDED)) { 277 r = ati_remote2_submit_urbs(ar2); 278 if (r) 279 goto fail2; 280 } 281 282 ar2->flags |= ATI_REMOTE2_OPENED; 283 284 mutex_unlock(&ati_remote2_mutex); 285 286 usb_autopm_put_interface(ar2->intf[0]); 287 288 return 0; 289 290 fail2: 291 mutex_unlock(&ati_remote2_mutex); 292 usb_autopm_put_interface(ar2->intf[0]); 293 fail1: 294 return r; 295 } 296 297 static void ati_remote2_close(struct input_dev *idev) 298 { 299 struct ati_remote2 *ar2 = input_get_drvdata(idev); 300 301 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 302 303 mutex_lock(&ati_remote2_mutex); 304 305 if (!(ar2->flags & ATI_REMOTE2_SUSPENDED)) 306 ati_remote2_kill_urbs(ar2); 307 308 ar2->flags &= ~ATI_REMOTE2_OPENED; 309 310 mutex_unlock(&ati_remote2_mutex); 311 } 312 313 static void ati_remote2_input_mouse(struct ati_remote2 *ar2) 314 { 315 struct input_dev *idev = ar2->idev; 316 u8 *data = ar2->buf[0]; 317 int channel, mode; 318 319 channel = data[0] >> 4; 320 321 if (!((1 << channel) & ar2->channel_mask)) 322 return; 323 324 mode = data[0] & 0x0F; 325 326 if (mode > ATI_REMOTE2_PC) { 327 dev_err(&ar2->intf[0]->dev, 328 "Unknown mode byte (%02x %02x %02x %02x)\n", 329 data[3], data[2], data[1], data[0]); 330 return; 331 } 332 333 if (!((1 << mode) & ar2->mode_mask)) 334 return; 335 336 input_event(idev, EV_REL, REL_X, (s8) data[1]); 337 input_event(idev, EV_REL, REL_Y, (s8) data[2]); 338 input_sync(idev); 339 } 340 341 static int ati_remote2_lookup(unsigned int hw_code) 342 { 343 int i; 344 345 for (i = 0; i < ARRAY_SIZE(ati_remote2_key_table); i++) 346 if (ati_remote2_key_table[i].hw_code == hw_code) 347 return i; 348 349 return -1; 350 } 351 352 static void ati_remote2_input_key(struct ati_remote2 *ar2) 353 { 354 struct input_dev *idev = ar2->idev; 355 u8 *data = ar2->buf[1]; 356 int channel, mode, hw_code, index; 357 358 channel = data[0] >> 4; 359 360 if (!((1 << channel) & ar2->channel_mask)) 361 return; 362 363 mode = data[0] & 0x0F; 364 365 if (mode > ATI_REMOTE2_PC) { 366 dev_err(&ar2->intf[1]->dev, 367 "Unknown mode byte (%02x %02x %02x %02x)\n", 368 data[3], data[2], data[1], data[0]); 369 return; 370 } 371 372 hw_code = data[2]; 373 if (hw_code == 0x3f) { 374 /* 375 * For some incomprehensible reason the mouse pad generates 376 * events which look identical to the events from the last 377 * pressed mode key. Naturally we don't want to generate key 378 * events for the mouse pad so we filter out any subsequent 379 * events from the same mode key. 380 */ 381 if (ar2->mode == mode) 382 return; 383 384 if (data[1] == 0) 385 ar2->mode = mode; 386 } 387 388 if (!((1 << mode) & ar2->mode_mask)) 389 return; 390 391 index = ati_remote2_lookup(hw_code); 392 if (index < 0) { 393 dev_err(&ar2->intf[1]->dev, 394 "Unknown code byte (%02x %02x %02x %02x)\n", 395 data[3], data[2], data[1], data[0]); 396 return; 397 } 398 399 switch (data[1]) { 400 case 0: /* release */ 401 break; 402 case 1: /* press */ 403 ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_DELAY]); 404 break; 405 case 2: /* repeat */ 406 407 /* No repeat for mouse buttons. */ 408 if (ar2->keycode[mode][index] == BTN_LEFT || 409 ar2->keycode[mode][index] == BTN_RIGHT) 410 return; 411 412 if (!time_after_eq(jiffies, ar2->jiffies)) 413 return; 414 415 ar2->jiffies = jiffies + msecs_to_jiffies(idev->rep[REP_PERIOD]); 416 break; 417 default: 418 dev_err(&ar2->intf[1]->dev, 419 "Unknown state byte (%02x %02x %02x %02x)\n", 420 data[3], data[2], data[1], data[0]); 421 return; 422 } 423 424 input_event(idev, EV_KEY, ar2->keycode[mode][index], data[1]); 425 input_sync(idev); 426 } 427 428 static void ati_remote2_complete_mouse(struct urb *urb) 429 { 430 struct ati_remote2 *ar2 = urb->context; 431 int r; 432 433 switch (urb->status) { 434 case 0: 435 usb_mark_last_busy(ar2->udev); 436 ati_remote2_input_mouse(ar2); 437 break; 438 case -ENOENT: 439 case -EILSEQ: 440 case -ECONNRESET: 441 case -ESHUTDOWN: 442 dev_dbg(&ar2->intf[0]->dev, 443 "%s(): urb status = %d\n", __func__, urb->status); 444 return; 445 default: 446 usb_mark_last_busy(ar2->udev); 447 dev_err(&ar2->intf[0]->dev, 448 "%s(): urb status = %d\n", __func__, urb->status); 449 } 450 451 r = usb_submit_urb(urb, GFP_ATOMIC); 452 if (r) 453 dev_err(&ar2->intf[0]->dev, 454 "%s(): usb_submit_urb() = %d\n", __func__, r); 455 } 456 457 static void ati_remote2_complete_key(struct urb *urb) 458 { 459 struct ati_remote2 *ar2 = urb->context; 460 int r; 461 462 switch (urb->status) { 463 case 0: 464 usb_mark_last_busy(ar2->udev); 465 ati_remote2_input_key(ar2); 466 break; 467 case -ENOENT: 468 case -EILSEQ: 469 case -ECONNRESET: 470 case -ESHUTDOWN: 471 dev_dbg(&ar2->intf[1]->dev, 472 "%s(): urb status = %d\n", __func__, urb->status); 473 return; 474 default: 475 usb_mark_last_busy(ar2->udev); 476 dev_err(&ar2->intf[1]->dev, 477 "%s(): urb status = %d\n", __func__, urb->status); 478 } 479 480 r = usb_submit_urb(urb, GFP_ATOMIC); 481 if (r) 482 dev_err(&ar2->intf[1]->dev, 483 "%s(): usb_submit_urb() = %d\n", __func__, r); 484 } 485 486 static int ati_remote2_getkeycode(struct input_dev *idev, 487 struct input_keymap_entry *ke) 488 { 489 struct ati_remote2 *ar2 = input_get_drvdata(idev); 490 unsigned int mode; 491 int offset; 492 unsigned int index; 493 unsigned int scancode; 494 495 if (ke->flags & INPUT_KEYMAP_BY_INDEX) { 496 index = ke->index; 497 if (index >= ATI_REMOTE2_MODES * 498 ARRAY_SIZE(ati_remote2_key_table)) 499 return -EINVAL; 500 501 mode = ke->index / ARRAY_SIZE(ati_remote2_key_table); 502 offset = ke->index % ARRAY_SIZE(ati_remote2_key_table); 503 scancode = (mode << 8) + ati_remote2_key_table[offset].hw_code; 504 } else { 505 if (input_scancode_to_scalar(ke, &scancode)) 506 return -EINVAL; 507 508 mode = scancode >> 8; 509 if (mode > ATI_REMOTE2_PC) 510 return -EINVAL; 511 512 offset = ati_remote2_lookup(scancode & 0xff); 513 if (offset < 0) 514 return -EINVAL; 515 516 index = mode * ARRAY_SIZE(ati_remote2_key_table) + offset; 517 } 518 519 ke->keycode = ar2->keycode[mode][offset]; 520 ke->len = sizeof(scancode); 521 memcpy(&ke->scancode, &scancode, sizeof(scancode)); 522 ke->index = index; 523 524 return 0; 525 } 526 527 static int ati_remote2_setkeycode(struct input_dev *idev, 528 const struct input_keymap_entry *ke, 529 unsigned int *old_keycode) 530 { 531 struct ati_remote2 *ar2 = input_get_drvdata(idev); 532 unsigned int mode; 533 int offset; 534 unsigned int index; 535 unsigned int scancode; 536 537 if (ke->flags & INPUT_KEYMAP_BY_INDEX) { 538 if (ke->index >= ATI_REMOTE2_MODES * 539 ARRAY_SIZE(ati_remote2_key_table)) 540 return -EINVAL; 541 542 mode = ke->index / ARRAY_SIZE(ati_remote2_key_table); 543 offset = ke->index % ARRAY_SIZE(ati_remote2_key_table); 544 } else { 545 if (input_scancode_to_scalar(ke, &scancode)) 546 return -EINVAL; 547 548 mode = scancode >> 8; 549 if (mode > ATI_REMOTE2_PC) 550 return -EINVAL; 551 552 offset = ati_remote2_lookup(scancode & 0xff); 553 if (offset < 0) 554 return -EINVAL; 555 } 556 557 *old_keycode = ar2->keycode[mode][offset]; 558 ar2->keycode[mode][offset] = ke->keycode; 559 __set_bit(ke->keycode, idev->keybit); 560 561 for (mode = 0; mode < ATI_REMOTE2_MODES; mode++) { 562 for (index = 0; index < ARRAY_SIZE(ati_remote2_key_table); index++) { 563 if (ar2->keycode[mode][index] == *old_keycode) 564 return 0; 565 } 566 } 567 568 __clear_bit(*old_keycode, idev->keybit); 569 570 return 0; 571 } 572 573 static int ati_remote2_input_init(struct ati_remote2 *ar2) 574 { 575 struct input_dev *idev; 576 int index, mode, retval; 577 578 idev = input_allocate_device(); 579 if (!idev) 580 return -ENOMEM; 581 582 ar2->idev = idev; 583 input_set_drvdata(idev, ar2); 584 585 idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_REL); 586 idev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | 587 BIT_MASK(BTN_RIGHT); 588 idev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y); 589 590 for (mode = 0; mode < ATI_REMOTE2_MODES; mode++) { 591 for (index = 0; index < ARRAY_SIZE(ati_remote2_key_table); index++) { 592 ar2->keycode[mode][index] = ati_remote2_key_table[index].keycode; 593 __set_bit(ar2->keycode[mode][index], idev->keybit); 594 } 595 } 596 597 /* AUX1-AUX4 and PC generate the same scancode. */ 598 index = ati_remote2_lookup(0x3f); 599 ar2->keycode[ATI_REMOTE2_AUX1][index] = KEY_PROG1; 600 ar2->keycode[ATI_REMOTE2_AUX2][index] = KEY_PROG2; 601 ar2->keycode[ATI_REMOTE2_AUX3][index] = KEY_PROG3; 602 ar2->keycode[ATI_REMOTE2_AUX4][index] = KEY_PROG4; 603 ar2->keycode[ATI_REMOTE2_PC][index] = KEY_PC; 604 __set_bit(KEY_PROG1, idev->keybit); 605 __set_bit(KEY_PROG2, idev->keybit); 606 __set_bit(KEY_PROG3, idev->keybit); 607 __set_bit(KEY_PROG4, idev->keybit); 608 __set_bit(KEY_PC, idev->keybit); 609 610 idev->rep[REP_DELAY] = 250; 611 idev->rep[REP_PERIOD] = 33; 612 613 idev->open = ati_remote2_open; 614 idev->close = ati_remote2_close; 615 616 idev->getkeycode = ati_remote2_getkeycode; 617 idev->setkeycode = ati_remote2_setkeycode; 618 619 idev->name = ar2->name; 620 idev->phys = ar2->phys; 621 622 usb_to_input_id(ar2->udev, &idev->id); 623 idev->dev.parent = &ar2->udev->dev; 624 625 retval = input_register_device(idev); 626 if (retval) 627 input_free_device(idev); 628 629 return retval; 630 } 631 632 static int ati_remote2_urb_init(struct ati_remote2 *ar2) 633 { 634 struct usb_device *udev = ar2->udev; 635 int i, pipe, maxp; 636 637 for (i = 0; i < 2; i++) { 638 ar2->buf[i] = usb_alloc_coherent(udev, 4, GFP_KERNEL, &ar2->buf_dma[i]); 639 if (!ar2->buf[i]) 640 return -ENOMEM; 641 642 ar2->urb[i] = usb_alloc_urb(0, GFP_KERNEL); 643 if (!ar2->urb[i]) 644 return -ENOMEM; 645 646 pipe = usb_rcvintpipe(udev, ar2->ep[i]->bEndpointAddress); 647 maxp = usb_maxpacket(udev, pipe, usb_pipeout(pipe)); 648 maxp = maxp > 4 ? 4 : maxp; 649 650 usb_fill_int_urb(ar2->urb[i], udev, pipe, ar2->buf[i], maxp, 651 i ? ati_remote2_complete_key : ati_remote2_complete_mouse, 652 ar2, ar2->ep[i]->bInterval); 653 ar2->urb[i]->transfer_dma = ar2->buf_dma[i]; 654 ar2->urb[i]->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 655 } 656 657 return 0; 658 } 659 660 static void ati_remote2_urb_cleanup(struct ati_remote2 *ar2) 661 { 662 int i; 663 664 for (i = 0; i < 2; i++) { 665 usb_free_urb(ar2->urb[i]); 666 usb_free_coherent(ar2->udev, 4, ar2->buf[i], ar2->buf_dma[i]); 667 } 668 } 669 670 static int ati_remote2_setup(struct ati_remote2 *ar2, unsigned int ch_mask) 671 { 672 int r, i, channel; 673 674 /* 675 * Configure receiver to only accept input from remote "channel" 676 * channel == 0 -> Accept input from any remote channel 677 * channel == 1 -> Only accept input from remote channel 1 678 * channel == 2 -> Only accept input from remote channel 2 679 * ... 680 * channel == 16 -> Only accept input from remote channel 16 681 */ 682 683 channel = 0; 684 for (i = 0; i < 16; i++) { 685 if ((1 << i) & ch_mask) { 686 if (!(~(1 << i) & ch_mask)) 687 channel = i + 1; 688 break; 689 } 690 } 691 692 r = usb_control_msg(ar2->udev, usb_sndctrlpipe(ar2->udev, 0), 693 0x20, 694 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_INTERFACE, 695 channel, 0x0, NULL, 0, USB_CTRL_SET_TIMEOUT); 696 if (r) { 697 dev_err(&ar2->udev->dev, "%s - failed to set channel due to error: %d\n", 698 __func__, r); 699 return r; 700 } 701 702 return 0; 703 } 704 705 static ssize_t ati_remote2_show_channel_mask(struct device *dev, 706 struct device_attribute *attr, 707 char *buf) 708 { 709 struct usb_device *udev = to_usb_device(dev); 710 struct usb_interface *intf = usb_ifnum_to_if(udev, 0); 711 struct ati_remote2 *ar2 = usb_get_intfdata(intf); 712 713 return sprintf(buf, "0x%04x\n", ar2->channel_mask); 714 } 715 716 static ssize_t ati_remote2_store_channel_mask(struct device *dev, 717 struct device_attribute *attr, 718 const char *buf, size_t count) 719 { 720 struct usb_device *udev = to_usb_device(dev); 721 struct usb_interface *intf = usb_ifnum_to_if(udev, 0); 722 struct ati_remote2 *ar2 = usb_get_intfdata(intf); 723 unsigned int mask; 724 int r; 725 726 r = kstrtouint(buf, 0, &mask); 727 if (r) 728 return r; 729 730 if (mask & ~ATI_REMOTE2_MAX_CHANNEL_MASK) 731 return -EINVAL; 732 733 r = usb_autopm_get_interface(ar2->intf[0]); 734 if (r) { 735 dev_err(&ar2->intf[0]->dev, 736 "%s(): usb_autopm_get_interface() = %d\n", __func__, r); 737 return r; 738 } 739 740 mutex_lock(&ati_remote2_mutex); 741 742 if (mask != ar2->channel_mask) { 743 r = ati_remote2_setup(ar2, mask); 744 if (!r) 745 ar2->channel_mask = mask; 746 } 747 748 mutex_unlock(&ati_remote2_mutex); 749 750 usb_autopm_put_interface(ar2->intf[0]); 751 752 return r ? r : count; 753 } 754 755 static ssize_t ati_remote2_show_mode_mask(struct device *dev, 756 struct device_attribute *attr, 757 char *buf) 758 { 759 struct usb_device *udev = to_usb_device(dev); 760 struct usb_interface *intf = usb_ifnum_to_if(udev, 0); 761 struct ati_remote2 *ar2 = usb_get_intfdata(intf); 762 763 return sprintf(buf, "0x%02x\n", ar2->mode_mask); 764 } 765 766 static ssize_t ati_remote2_store_mode_mask(struct device *dev, 767 struct device_attribute *attr, 768 const char *buf, size_t count) 769 { 770 struct usb_device *udev = to_usb_device(dev); 771 struct usb_interface *intf = usb_ifnum_to_if(udev, 0); 772 struct ati_remote2 *ar2 = usb_get_intfdata(intf); 773 unsigned int mask; 774 int err; 775 776 err = kstrtouint(buf, 0, &mask); 777 if (err) 778 return err; 779 780 if (mask & ~ATI_REMOTE2_MAX_MODE_MASK) 781 return -EINVAL; 782 783 ar2->mode_mask = mask; 784 785 return count; 786 } 787 788 static DEVICE_ATTR(channel_mask, 0644, ati_remote2_show_channel_mask, 789 ati_remote2_store_channel_mask); 790 791 static DEVICE_ATTR(mode_mask, 0644, ati_remote2_show_mode_mask, 792 ati_remote2_store_mode_mask); 793 794 static struct attribute *ati_remote2_attrs[] = { 795 &dev_attr_channel_mask.attr, 796 &dev_attr_mode_mask.attr, 797 NULL, 798 }; 799 800 static struct attribute_group ati_remote2_attr_group = { 801 .attrs = ati_remote2_attrs, 802 }; 803 804 static int ati_remote2_probe(struct usb_interface *interface, const struct usb_device_id *id) 805 { 806 struct usb_device *udev = interface_to_usbdev(interface); 807 struct usb_host_interface *alt = interface->cur_altsetting; 808 struct ati_remote2 *ar2; 809 int r; 810 811 if (alt->desc.bInterfaceNumber) 812 return -ENODEV; 813 814 ar2 = kzalloc(sizeof (struct ati_remote2), GFP_KERNEL); 815 if (!ar2) 816 return -ENOMEM; 817 818 ar2->udev = udev; 819 820 ar2->intf[0] = interface; 821 ar2->ep[0] = &alt->endpoint[0].desc; 822 823 ar2->intf[1] = usb_ifnum_to_if(udev, 1); 824 r = usb_driver_claim_interface(&ati_remote2_driver, ar2->intf[1], ar2); 825 if (r) 826 goto fail1; 827 alt = ar2->intf[1]->cur_altsetting; 828 ar2->ep[1] = &alt->endpoint[0].desc; 829 830 r = ati_remote2_urb_init(ar2); 831 if (r) 832 goto fail2; 833 834 ar2->channel_mask = channel_mask; 835 ar2->mode_mask = mode_mask; 836 837 r = ati_remote2_setup(ar2, ar2->channel_mask); 838 if (r) 839 goto fail2; 840 841 usb_make_path(udev, ar2->phys, sizeof(ar2->phys)); 842 strlcat(ar2->phys, "/input0", sizeof(ar2->phys)); 843 844 strlcat(ar2->name, "ATI Remote Wonder II", sizeof(ar2->name)); 845 846 r = sysfs_create_group(&udev->dev.kobj, &ati_remote2_attr_group); 847 if (r) 848 goto fail2; 849 850 r = ati_remote2_input_init(ar2); 851 if (r) 852 goto fail3; 853 854 usb_set_intfdata(interface, ar2); 855 856 interface->needs_remote_wakeup = 1; 857 858 return 0; 859 860 fail3: 861 sysfs_remove_group(&udev->dev.kobj, &ati_remote2_attr_group); 862 fail2: 863 ati_remote2_urb_cleanup(ar2); 864 usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); 865 fail1: 866 kfree(ar2); 867 868 return r; 869 } 870 871 static void ati_remote2_disconnect(struct usb_interface *interface) 872 { 873 struct ati_remote2 *ar2; 874 struct usb_host_interface *alt = interface->cur_altsetting; 875 876 if (alt->desc.bInterfaceNumber) 877 return; 878 879 ar2 = usb_get_intfdata(interface); 880 usb_set_intfdata(interface, NULL); 881 882 input_unregister_device(ar2->idev); 883 884 sysfs_remove_group(&ar2->udev->dev.kobj, &ati_remote2_attr_group); 885 886 ati_remote2_urb_cleanup(ar2); 887 888 usb_driver_release_interface(&ati_remote2_driver, ar2->intf[1]); 889 890 kfree(ar2); 891 } 892 893 static int ati_remote2_suspend(struct usb_interface *interface, 894 pm_message_t message) 895 { 896 struct ati_remote2 *ar2; 897 struct usb_host_interface *alt = interface->cur_altsetting; 898 899 if (alt->desc.bInterfaceNumber) 900 return 0; 901 902 ar2 = usb_get_intfdata(interface); 903 904 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 905 906 mutex_lock(&ati_remote2_mutex); 907 908 if (ar2->flags & ATI_REMOTE2_OPENED) 909 ati_remote2_kill_urbs(ar2); 910 911 ar2->flags |= ATI_REMOTE2_SUSPENDED; 912 913 mutex_unlock(&ati_remote2_mutex); 914 915 return 0; 916 } 917 918 static int ati_remote2_resume(struct usb_interface *interface) 919 { 920 struct ati_remote2 *ar2; 921 struct usb_host_interface *alt = interface->cur_altsetting; 922 int r = 0; 923 924 if (alt->desc.bInterfaceNumber) 925 return 0; 926 927 ar2 = usb_get_intfdata(interface); 928 929 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 930 931 mutex_lock(&ati_remote2_mutex); 932 933 if (ar2->flags & ATI_REMOTE2_OPENED) 934 r = ati_remote2_submit_urbs(ar2); 935 936 if (!r) 937 ar2->flags &= ~ATI_REMOTE2_SUSPENDED; 938 939 mutex_unlock(&ati_remote2_mutex); 940 941 return r; 942 } 943 944 static int ati_remote2_reset_resume(struct usb_interface *interface) 945 { 946 struct ati_remote2 *ar2; 947 struct usb_host_interface *alt = interface->cur_altsetting; 948 int r = 0; 949 950 if (alt->desc.bInterfaceNumber) 951 return 0; 952 953 ar2 = usb_get_intfdata(interface); 954 955 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 956 957 mutex_lock(&ati_remote2_mutex); 958 959 r = ati_remote2_setup(ar2, ar2->channel_mask); 960 if (r) 961 goto out; 962 963 if (ar2->flags & ATI_REMOTE2_OPENED) 964 r = ati_remote2_submit_urbs(ar2); 965 966 if (!r) 967 ar2->flags &= ~ATI_REMOTE2_SUSPENDED; 968 969 out: 970 mutex_unlock(&ati_remote2_mutex); 971 972 return r; 973 } 974 975 static int ati_remote2_pre_reset(struct usb_interface *interface) 976 { 977 struct ati_remote2 *ar2; 978 struct usb_host_interface *alt = interface->cur_altsetting; 979 980 if (alt->desc.bInterfaceNumber) 981 return 0; 982 983 ar2 = usb_get_intfdata(interface); 984 985 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 986 987 mutex_lock(&ati_remote2_mutex); 988 989 if (ar2->flags == ATI_REMOTE2_OPENED) 990 ati_remote2_kill_urbs(ar2); 991 992 return 0; 993 } 994 995 static int ati_remote2_post_reset(struct usb_interface *interface) 996 { 997 struct ati_remote2 *ar2; 998 struct usb_host_interface *alt = interface->cur_altsetting; 999 int r = 0; 1000 1001 if (alt->desc.bInterfaceNumber) 1002 return 0; 1003 1004 ar2 = usb_get_intfdata(interface); 1005 1006 dev_dbg(&ar2->intf[0]->dev, "%s()\n", __func__); 1007 1008 if (ar2->flags == ATI_REMOTE2_OPENED) 1009 r = ati_remote2_submit_urbs(ar2); 1010 1011 mutex_unlock(&ati_remote2_mutex); 1012 1013 return r; 1014 } 1015 1016 module_usb_driver(ati_remote2_driver); 1017