0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028 #include <linux/kernel.h>
0029 #include <linux/init.h>
0030 #include <linux/slab.h>
0031 #include <linux/module.h>
0032 #include <linux/moduleparam.h>
0033 #include <linux/rwsem.h>
0034 #include <linux/usb/input.h>
0035
0036 #define DRIVER_VERSION "20080805"
0037 #define DRIVER_AUTHOR "Alfred E. Heggestad"
0038 #define DRIVER_DESC "CM109 phone driver"
0039
0040 static char *phone = "kip1000";
0041 module_param(phone, charp, S_IRUSR);
0042 MODULE_PARM_DESC(phone, "Phone name {kip1000, gtalk, usbph01, atcom}");
0043
0044 enum {
0045
0046 HID_IR0 = 0x00,
0047 HID_IR1 = 0x01,
0048 HID_IR2 = 0x02,
0049 HID_IR3 = 0x03,
0050 HID_OR0 = 0x00,
0051 HID_OR1 = 0x01,
0052 HID_OR2 = 0x02,
0053 HID_OR3 = 0x03,
0054
0055
0056 RECORD_MUTE = 1 << 3,
0057 PLAYBACK_MUTE = 1 << 2,
0058 VOLUME_DOWN = 1 << 1,
0059 VOLUME_UP = 1 << 0,
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 HID_OR_GPO_BUZ_SPDIF = 0 << 6,
0071 HID_OR_GENERIC_HID_REG = 1 << 6,
0072 HID_OR_MAP_MCU_EEPROM = 2 << 6,
0073
0074 BUZZER_ON = 1 << 5,
0075
0076
0077 KEYMAP_SIZE = 256 + 15,
0078 };
0079
0080
0081 struct cm109_ctl_packet {
0082 u8 byte[4];
0083 } __attribute__ ((packed));
0084
0085 enum { USB_PKT_LEN = sizeof(struct cm109_ctl_packet) };
0086
0087
0088 struct cm109_dev {
0089 struct input_dev *idev;
0090 struct usb_device *udev;
0091 struct usb_interface *intf;
0092
0093
0094 struct cm109_ctl_packet *irq_data;
0095 dma_addr_t irq_dma;
0096 struct urb *urb_irq;
0097
0098
0099 struct cm109_ctl_packet *ctl_data;
0100 dma_addr_t ctl_dma;
0101 struct usb_ctrlrequest *ctl_req;
0102 struct urb *urb_ctl;
0103
0104
0105
0106
0107
0108 unsigned irq_urb_pending:1;
0109 unsigned ctl_urb_pending:1;
0110 unsigned buzzer_pending:1;
0111 spinlock_t ctl_submit_lock;
0112
0113 unsigned char buzzer_state;
0114
0115
0116 unsigned open:1;
0117 unsigned resetting:1;
0118 unsigned shutdown:1;
0119
0120
0121 struct mutex pm_mutex;
0122
0123 unsigned short keymap[KEYMAP_SIZE];
0124
0125 char phys[64];
0126 int key_code;
0127 int keybit;
0128 u8 gpi;
0129 };
0130
0131
0132
0133
0134
0135 static unsigned short special_keymap(int code)
0136 {
0137 if (code > 0xff) {
0138 switch (code - 0xff) {
0139 case RECORD_MUTE: return KEY_MICMUTE;
0140 case PLAYBACK_MUTE: return KEY_MUTE;
0141 case VOLUME_DOWN: return KEY_VOLUMEDOWN;
0142 case VOLUME_UP: return KEY_VOLUMEUP;
0143 }
0144 }
0145 return KEY_RESERVED;
0146 }
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172 static unsigned short keymap_kip1000(int scancode)
0173 {
0174 switch (scancode) {
0175 case 0x82: return KEY_NUMERIC_0;
0176 case 0x14: return KEY_NUMERIC_1;
0177 case 0x12: return KEY_NUMERIC_2;
0178 case 0x11: return KEY_NUMERIC_3;
0179 case 0x24: return KEY_NUMERIC_4;
0180 case 0x22: return KEY_NUMERIC_5;
0181 case 0x21: return KEY_NUMERIC_6;
0182 case 0x44: return KEY_NUMERIC_7;
0183 case 0x42: return KEY_NUMERIC_8;
0184 case 0x41: return KEY_NUMERIC_9;
0185 case 0x81: return KEY_NUMERIC_POUND;
0186 case 0x84: return KEY_NUMERIC_STAR;
0187 case 0x88: return KEY_ENTER;
0188 case 0x48: return KEY_ESC;
0189 case 0x28: return KEY_LEFT;
0190 case 0x18: return KEY_RIGHT;
0191 default: return special_keymap(scancode);
0192 }
0193 }
0194
0195
0196
0197
0198
0199
0200
0201
0202
0203
0204
0205 static unsigned short keymap_gtalk(int scancode)
0206 {
0207 switch (scancode) {
0208 case 0x11: return KEY_NUMERIC_0;
0209 case 0x21: return KEY_NUMERIC_1;
0210 case 0x41: return KEY_NUMERIC_2;
0211 case 0x81: return KEY_NUMERIC_3;
0212 case 0x12: return KEY_NUMERIC_4;
0213 case 0x22: return KEY_NUMERIC_5;
0214 case 0x42: return KEY_NUMERIC_6;
0215 case 0x82: return KEY_NUMERIC_7;
0216 case 0x14: return KEY_NUMERIC_8;
0217 case 0x24: return KEY_NUMERIC_9;
0218 case 0x44: return KEY_NUMERIC_POUND;
0219 case 0x84: return KEY_NUMERIC_STAR;
0220 case 0x18: return KEY_ENTER;
0221 case 0x28: return KEY_ESC;
0222 case 0x48: return KEY_UP;
0223 case 0x88: return KEY_DOWN;
0224 default: return special_keymap(scancode);
0225 }
0226 }
0227
0228
0229
0230
0231
0232
0233
0234 static unsigned short keymap_usbph01(int scancode)
0235 {
0236 switch (scancode) {
0237 case 0x11: return KEY_NUMERIC_0;
0238 case 0x21: return KEY_NUMERIC_1;
0239 case 0x41: return KEY_NUMERIC_2;
0240 case 0x81: return KEY_NUMERIC_3;
0241 case 0x12: return KEY_NUMERIC_4;
0242 case 0x22: return KEY_NUMERIC_5;
0243 case 0x42: return KEY_NUMERIC_6;
0244 case 0x82: return KEY_NUMERIC_7;
0245 case 0x14: return KEY_NUMERIC_8;
0246 case 0x24: return KEY_NUMERIC_9;
0247 case 0x44: return KEY_NUMERIC_POUND;
0248 case 0x84: return KEY_NUMERIC_STAR;
0249 case 0x18: return KEY_ENTER;
0250 case 0x28: return KEY_ESC;
0251 case 0x48: return KEY_LEFT;
0252 case 0x88: return KEY_RIGHT;
0253 default: return special_keymap(scancode);
0254 }
0255 }
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265 static unsigned short keymap_atcom(int scancode)
0266 {
0267 switch (scancode) {
0268 case 0x82: return KEY_NUMERIC_0;
0269 case 0x11: return KEY_NUMERIC_1;
0270 case 0x12: return KEY_NUMERIC_2;
0271 case 0x14: return KEY_NUMERIC_3;
0272 case 0x21: return KEY_NUMERIC_4;
0273 case 0x22: return KEY_NUMERIC_5;
0274 case 0x24: return KEY_NUMERIC_6;
0275 case 0x41: return KEY_NUMERIC_7;
0276 case 0x42: return KEY_NUMERIC_8;
0277 case 0x44: return KEY_NUMERIC_9;
0278 case 0x84: return KEY_NUMERIC_POUND;
0279 case 0x81: return KEY_NUMERIC_STAR;
0280 case 0x18: return KEY_ENTER;
0281 case 0x28: return KEY_ESC;
0282 case 0x48: return KEY_LEFT;
0283 case 0x88: return KEY_RIGHT;
0284 default: return special_keymap(scancode);
0285 }
0286 }
0287
0288 static unsigned short (*keymap)(int) = keymap_kip1000;
0289
0290
0291
0292
0293
0294 static void report_key(struct cm109_dev *dev, int key)
0295 {
0296 struct input_dev *idev = dev->idev;
0297
0298 if (dev->key_code >= 0) {
0299
0300 input_report_key(idev, dev->key_code, 0);
0301 }
0302
0303 dev->key_code = key;
0304 if (key >= 0) {
0305
0306 input_report_key(idev, key, 1);
0307 }
0308
0309 input_sync(idev);
0310 }
0311
0312
0313
0314
0315
0316 static void cm109_report_special(struct cm109_dev *dev)
0317 {
0318 static const u8 autorelease = RECORD_MUTE | PLAYBACK_MUTE;
0319 struct input_dev *idev = dev->idev;
0320 u8 data = dev->irq_data->byte[HID_IR0];
0321 unsigned short keycode;
0322 int i;
0323
0324 for (i = 0; i < 4; i++) {
0325 keycode = dev->keymap[0xff + BIT(i)];
0326 if (keycode == KEY_RESERVED)
0327 continue;
0328
0329 input_report_key(idev, keycode, data & BIT(i));
0330 if (data & autorelease & BIT(i)) {
0331 input_sync(idev);
0332 input_report_key(idev, keycode, 0);
0333 }
0334 }
0335 input_sync(idev);
0336 }
0337
0338
0339
0340
0341
0342 static void cm109_submit_buzz_toggle(struct cm109_dev *dev)
0343 {
0344 int error;
0345
0346 if (dev->buzzer_state)
0347 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
0348 else
0349 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
0350
0351 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
0352 if (error)
0353 dev_err(&dev->intf->dev,
0354 "%s: usb_submit_urb (urb_ctl) failed %d\n",
0355 __func__, error);
0356 }
0357
0358
0359
0360
0361 static void cm109_urb_irq_callback(struct urb *urb)
0362 {
0363 struct cm109_dev *dev = urb->context;
0364 const int status = urb->status;
0365 int error;
0366 unsigned long flags;
0367
0368 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
0369 dev->irq_data->byte[0],
0370 dev->irq_data->byte[1],
0371 dev->irq_data->byte[2],
0372 dev->irq_data->byte[3],
0373 dev->keybit);
0374
0375 if (status) {
0376 if (status == -ESHUTDOWN)
0377 return;
0378 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n",
0379 __func__, status);
0380 goto out;
0381 }
0382
0383
0384 cm109_report_special(dev);
0385
0386
0387 if (dev->keybit == 0xf) {
0388
0389
0390 if ((dev->gpi & 0xf0) == (dev->irq_data->byte[HID_IR1] & 0xf0))
0391 goto out;
0392
0393 dev->gpi = dev->irq_data->byte[HID_IR1] & 0xf0;
0394 dev->keybit = 0x1;
0395 } else {
0396 report_key(dev, dev->keymap[dev->irq_data->byte[HID_IR1]]);
0397
0398 dev->keybit <<= 1;
0399 if (dev->keybit > 0x8)
0400 dev->keybit = 0xf;
0401 }
0402
0403 out:
0404
0405 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
0406
0407 dev->irq_urb_pending = 0;
0408
0409 if (likely(!dev->shutdown)) {
0410
0411 if (dev->buzzer_state)
0412 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
0413 else
0414 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
0415
0416 dev->ctl_data->byte[HID_OR1] = dev->keybit;
0417 dev->ctl_data->byte[HID_OR2] = dev->keybit;
0418
0419 dev->buzzer_pending = 0;
0420 dev->ctl_urb_pending = 1;
0421
0422 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
0423 if (error)
0424 dev_err(&dev->intf->dev,
0425 "%s: usb_submit_urb (urb_ctl) failed %d\n",
0426 __func__, error);
0427 }
0428
0429 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
0430 }
0431
0432 static void cm109_urb_ctl_callback(struct urb *urb)
0433 {
0434 struct cm109_dev *dev = urb->context;
0435 const int status = urb->status;
0436 int error;
0437 unsigned long flags;
0438
0439 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
0440 dev->ctl_data->byte[0],
0441 dev->ctl_data->byte[1],
0442 dev->ctl_data->byte[2],
0443 dev->ctl_data->byte[3]);
0444
0445 if (status) {
0446 if (status == -ESHUTDOWN)
0447 return;
0448 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n",
0449 __func__, status);
0450 }
0451
0452 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
0453
0454 dev->ctl_urb_pending = 0;
0455
0456 if (likely(!dev->shutdown)) {
0457
0458 if (dev->buzzer_pending || status) {
0459 dev->buzzer_pending = 0;
0460 dev->ctl_urb_pending = 1;
0461 cm109_submit_buzz_toggle(dev);
0462 } else if (likely(!dev->irq_urb_pending)) {
0463
0464 dev->irq_urb_pending = 1;
0465 error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC);
0466 if (error)
0467 dev_err(&dev->intf->dev,
0468 "%s: usb_submit_urb (urb_irq) failed %d\n",
0469 __func__, error);
0470 }
0471 }
0472
0473 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
0474 }
0475
0476 static void cm109_toggle_buzzer_async(struct cm109_dev *dev)
0477 {
0478 unsigned long flags;
0479
0480 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
0481
0482 if (dev->ctl_urb_pending) {
0483
0484 dev->buzzer_pending = 1;
0485 } else {
0486 dev->ctl_urb_pending = 1;
0487 cm109_submit_buzz_toggle(dev);
0488 }
0489
0490 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
0491 }
0492
0493 static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on)
0494 {
0495 int error;
0496
0497 if (on)
0498 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
0499 else
0500 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
0501
0502 error = usb_control_msg(dev->udev,
0503 usb_sndctrlpipe(dev->udev, 0),
0504 dev->ctl_req->bRequest,
0505 dev->ctl_req->bRequestType,
0506 le16_to_cpu(dev->ctl_req->wValue),
0507 le16_to_cpu(dev->ctl_req->wIndex),
0508 dev->ctl_data,
0509 USB_PKT_LEN, USB_CTRL_SET_TIMEOUT);
0510 if (error < 0 && error != -EINTR)
0511 dev_err(&dev->intf->dev, "%s: usb_control_msg() failed %d\n",
0512 __func__, error);
0513 }
0514
0515 static void cm109_stop_traffic(struct cm109_dev *dev)
0516 {
0517 dev->shutdown = 1;
0518
0519
0520
0521 smp_wmb();
0522
0523 usb_kill_urb(dev->urb_ctl);
0524 usb_kill_urb(dev->urb_irq);
0525
0526 cm109_toggle_buzzer_sync(dev, 0);
0527
0528 dev->shutdown = 0;
0529 smp_wmb();
0530 }
0531
0532 static void cm109_restore_state(struct cm109_dev *dev)
0533 {
0534 if (dev->open) {
0535
0536
0537
0538
0539 cm109_toggle_buzzer_async(dev);
0540 }
0541 }
0542
0543
0544
0545
0546
0547 static int cm109_input_open(struct input_dev *idev)
0548 {
0549 struct cm109_dev *dev = input_get_drvdata(idev);
0550 int error;
0551
0552 error = usb_autopm_get_interface(dev->intf);
0553 if (error < 0) {
0554 dev_err(&idev->dev, "%s - cannot autoresume, result %d\n",
0555 __func__, error);
0556 return error;
0557 }
0558
0559 mutex_lock(&dev->pm_mutex);
0560
0561 dev->buzzer_state = 0;
0562 dev->key_code = -1;
0563 dev->keybit = 0xf;
0564
0565
0566 dev->ctl_data->byte[HID_OR0] = HID_OR_GPO_BUZ_SPDIF;
0567 dev->ctl_data->byte[HID_OR1] = dev->keybit;
0568 dev->ctl_data->byte[HID_OR2] = dev->keybit;
0569 dev->ctl_data->byte[HID_OR3] = 0x00;
0570
0571 dev->ctl_urb_pending = 1;
0572 error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
0573 if (error) {
0574 dev->ctl_urb_pending = 0;
0575 dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
0576 __func__, error);
0577 } else {
0578 dev->open = 1;
0579 }
0580
0581 mutex_unlock(&dev->pm_mutex);
0582
0583 if (error)
0584 usb_autopm_put_interface(dev->intf);
0585
0586 return error;
0587 }
0588
0589 static void cm109_input_close(struct input_dev *idev)
0590 {
0591 struct cm109_dev *dev = input_get_drvdata(idev);
0592
0593 mutex_lock(&dev->pm_mutex);
0594
0595
0596
0597
0598
0599
0600 cm109_stop_traffic(dev);
0601 dev->open = 0;
0602
0603 mutex_unlock(&dev->pm_mutex);
0604
0605 usb_autopm_put_interface(dev->intf);
0606 }
0607
0608 static int cm109_input_ev(struct input_dev *idev, unsigned int type,
0609 unsigned int code, int value)
0610 {
0611 struct cm109_dev *dev = input_get_drvdata(idev);
0612
0613 dev_dbg(&dev->intf->dev,
0614 "input_ev: type=%u code=%u value=%d\n", type, code, value);
0615
0616 if (type != EV_SND)
0617 return -EINVAL;
0618
0619 switch (code) {
0620 case SND_TONE:
0621 case SND_BELL:
0622 dev->buzzer_state = !!value;
0623 if (!dev->resetting)
0624 cm109_toggle_buzzer_async(dev);
0625 return 0;
0626
0627 default:
0628 return -EINVAL;
0629 }
0630 }
0631
0632
0633
0634
0635
0636
0637 struct driver_info {
0638 char *name;
0639 };
0640
0641 static const struct driver_info info_cm109 = {
0642 .name = "CM109 USB driver",
0643 };
0644
0645 enum {
0646 VENDOR_ID = 0x0d8c,
0647 PRODUCT_ID_CM109 = 0x000e,
0648 };
0649
0650
0651 static const struct usb_device_id cm109_usb_table[] = {
0652 {
0653 .match_flags = USB_DEVICE_ID_MATCH_DEVICE |
0654 USB_DEVICE_ID_MATCH_INT_INFO,
0655 .idVendor = VENDOR_ID,
0656 .idProduct = PRODUCT_ID_CM109,
0657 .bInterfaceClass = USB_CLASS_HID,
0658 .bInterfaceSubClass = 0,
0659 .bInterfaceProtocol = 0,
0660 .driver_info = (kernel_ulong_t) &info_cm109
0661 },
0662
0663 { }
0664 };
0665
0666 static void cm109_usb_cleanup(struct cm109_dev *dev)
0667 {
0668 kfree(dev->ctl_req);
0669 usb_free_coherent(dev->udev, USB_PKT_LEN, dev->ctl_data, dev->ctl_dma);
0670 usb_free_coherent(dev->udev, USB_PKT_LEN, dev->irq_data, dev->irq_dma);
0671
0672 usb_free_urb(dev->urb_irq);
0673 usb_free_urb(dev->urb_ctl);
0674 kfree(dev);
0675 }
0676
0677 static void cm109_usb_disconnect(struct usb_interface *interface)
0678 {
0679 struct cm109_dev *dev = usb_get_intfdata(interface);
0680
0681 usb_set_intfdata(interface, NULL);
0682 input_unregister_device(dev->idev);
0683 cm109_usb_cleanup(dev);
0684 }
0685
0686 static int cm109_usb_probe(struct usb_interface *intf,
0687 const struct usb_device_id *id)
0688 {
0689 struct usb_device *udev = interface_to_usbdev(intf);
0690 struct driver_info *nfo = (struct driver_info *)id->driver_info;
0691 struct usb_host_interface *interface;
0692 struct usb_endpoint_descriptor *endpoint;
0693 struct cm109_dev *dev;
0694 struct input_dev *input_dev = NULL;
0695 int ret, pipe, i;
0696 int error = -ENOMEM;
0697
0698 interface = intf->cur_altsetting;
0699
0700 if (interface->desc.bNumEndpoints < 1)
0701 return -ENODEV;
0702
0703 endpoint = &interface->endpoint[0].desc;
0704
0705 if (!usb_endpoint_is_int_in(endpoint))
0706 return -ENODEV;
0707
0708 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
0709 if (!dev)
0710 return -ENOMEM;
0711
0712 spin_lock_init(&dev->ctl_submit_lock);
0713 mutex_init(&dev->pm_mutex);
0714
0715 dev->udev = udev;
0716 dev->intf = intf;
0717
0718 dev->idev = input_dev = input_allocate_device();
0719 if (!input_dev)
0720 goto err_out;
0721
0722
0723 dev->irq_data = usb_alloc_coherent(udev, USB_PKT_LEN,
0724 GFP_KERNEL, &dev->irq_dma);
0725 if (!dev->irq_data)
0726 goto err_out;
0727
0728 dev->ctl_data = usb_alloc_coherent(udev, USB_PKT_LEN,
0729 GFP_KERNEL, &dev->ctl_dma);
0730 if (!dev->ctl_data)
0731 goto err_out;
0732
0733 dev->ctl_req = kmalloc(sizeof(*(dev->ctl_req)), GFP_KERNEL);
0734 if (!dev->ctl_req)
0735 goto err_out;
0736
0737
0738 dev->urb_irq = usb_alloc_urb(0, GFP_KERNEL);
0739 if (!dev->urb_irq)
0740 goto err_out;
0741
0742 dev->urb_ctl = usb_alloc_urb(0, GFP_KERNEL);
0743 if (!dev->urb_ctl)
0744 goto err_out;
0745
0746
0747 pipe = usb_rcvintpipe(udev, endpoint->bEndpointAddress);
0748 ret = usb_maxpacket(udev, pipe);
0749 if (ret != USB_PKT_LEN)
0750 dev_err(&intf->dev, "invalid payload size %d, expected %d\n",
0751 ret, USB_PKT_LEN);
0752
0753
0754 usb_fill_int_urb(dev->urb_irq, udev, pipe, dev->irq_data,
0755 USB_PKT_LEN,
0756 cm109_urb_irq_callback, dev, endpoint->bInterval);
0757 dev->urb_irq->transfer_dma = dev->irq_dma;
0758 dev->urb_irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
0759 dev->urb_irq->dev = udev;
0760
0761
0762 dev->ctl_req->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE |
0763 USB_DIR_OUT;
0764 dev->ctl_req->bRequest = USB_REQ_SET_CONFIGURATION;
0765 dev->ctl_req->wValue = cpu_to_le16(0x200);
0766 dev->ctl_req->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber);
0767 dev->ctl_req->wLength = cpu_to_le16(USB_PKT_LEN);
0768
0769 usb_fill_control_urb(dev->urb_ctl, udev, usb_sndctrlpipe(udev, 0),
0770 (void *)dev->ctl_req, dev->ctl_data, USB_PKT_LEN,
0771 cm109_urb_ctl_callback, dev);
0772 dev->urb_ctl->transfer_dma = dev->ctl_dma;
0773 dev->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
0774 dev->urb_ctl->dev = udev;
0775
0776
0777 usb_make_path(udev, dev->phys, sizeof(dev->phys));
0778 strlcat(dev->phys, "/input0", sizeof(dev->phys));
0779
0780
0781 input_dev->name = nfo->name;
0782 input_dev->phys = dev->phys;
0783 usb_to_input_id(udev, &input_dev->id);
0784 input_dev->dev.parent = &intf->dev;
0785
0786 input_set_drvdata(input_dev, dev);
0787 input_dev->open = cm109_input_open;
0788 input_dev->close = cm109_input_close;
0789 input_dev->event = cm109_input_ev;
0790
0791 input_dev->keycode = dev->keymap;
0792 input_dev->keycodesize = sizeof(unsigned char);
0793 input_dev->keycodemax = ARRAY_SIZE(dev->keymap);
0794
0795 input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_SND);
0796 input_dev->sndbit[0] = BIT_MASK(SND_BELL) | BIT_MASK(SND_TONE);
0797
0798
0799 for (i = 0; i < KEYMAP_SIZE; i++) {
0800 unsigned short k = keymap(i);
0801 dev->keymap[i] = k;
0802 __set_bit(k, input_dev->keybit);
0803 }
0804 __clear_bit(KEY_RESERVED, input_dev->keybit);
0805
0806 error = input_register_device(dev->idev);
0807 if (error)
0808 goto err_out;
0809
0810 usb_set_intfdata(intf, dev);
0811
0812 return 0;
0813
0814 err_out:
0815 input_free_device(input_dev);
0816 cm109_usb_cleanup(dev);
0817 return error;
0818 }
0819
0820 static int cm109_usb_suspend(struct usb_interface *intf, pm_message_t message)
0821 {
0822 struct cm109_dev *dev = usb_get_intfdata(intf);
0823
0824 dev_info(&intf->dev, "cm109: usb_suspend (event=%d)\n", message.event);
0825
0826 mutex_lock(&dev->pm_mutex);
0827 cm109_stop_traffic(dev);
0828 mutex_unlock(&dev->pm_mutex);
0829
0830 return 0;
0831 }
0832
0833 static int cm109_usb_resume(struct usb_interface *intf)
0834 {
0835 struct cm109_dev *dev = usb_get_intfdata(intf);
0836
0837 dev_info(&intf->dev, "cm109: usb_resume\n");
0838
0839 mutex_lock(&dev->pm_mutex);
0840 cm109_restore_state(dev);
0841 mutex_unlock(&dev->pm_mutex);
0842
0843 return 0;
0844 }
0845
0846 static int cm109_usb_pre_reset(struct usb_interface *intf)
0847 {
0848 struct cm109_dev *dev = usb_get_intfdata(intf);
0849
0850 mutex_lock(&dev->pm_mutex);
0851
0852
0853
0854
0855
0856 dev->resetting = 1;
0857 smp_wmb();
0858
0859 cm109_stop_traffic(dev);
0860
0861 return 0;
0862 }
0863
0864 static int cm109_usb_post_reset(struct usb_interface *intf)
0865 {
0866 struct cm109_dev *dev = usb_get_intfdata(intf);
0867
0868 dev->resetting = 0;
0869 smp_wmb();
0870
0871 cm109_restore_state(dev);
0872
0873 mutex_unlock(&dev->pm_mutex);
0874
0875 return 0;
0876 }
0877
0878 static struct usb_driver cm109_driver = {
0879 .name = "cm109",
0880 .probe = cm109_usb_probe,
0881 .disconnect = cm109_usb_disconnect,
0882 .suspend = cm109_usb_suspend,
0883 .resume = cm109_usb_resume,
0884 .reset_resume = cm109_usb_resume,
0885 .pre_reset = cm109_usb_pre_reset,
0886 .post_reset = cm109_usb_post_reset,
0887 .id_table = cm109_usb_table,
0888 .supports_autosuspend = 1,
0889 };
0890
0891 static int __init cm109_select_keymap(void)
0892 {
0893
0894 if (!strcasecmp(phone, "kip1000")) {
0895 keymap = keymap_kip1000;
0896 printk(KERN_INFO KBUILD_MODNAME ": "
0897 "Keymap for Komunikate KIP1000 phone loaded\n");
0898 } else if (!strcasecmp(phone, "gtalk")) {
0899 keymap = keymap_gtalk;
0900 printk(KERN_INFO KBUILD_MODNAME ": "
0901 "Keymap for Genius G-talk phone loaded\n");
0902 } else if (!strcasecmp(phone, "usbph01")) {
0903 keymap = keymap_usbph01;
0904 printk(KERN_INFO KBUILD_MODNAME ": "
0905 "Keymap for Allied-Telesis Corega USBPH01 phone loaded\n");
0906 } else if (!strcasecmp(phone, "atcom")) {
0907 keymap = keymap_atcom;
0908 printk(KERN_INFO KBUILD_MODNAME ": "
0909 "Keymap for ATCom AU-100 phone loaded\n");
0910 } else {
0911 printk(KERN_ERR KBUILD_MODNAME ": "
0912 "Unsupported phone: %s\n", phone);
0913 return -EINVAL;
0914 }
0915
0916 return 0;
0917 }
0918
0919 static int __init cm109_init(void)
0920 {
0921 int err;
0922
0923 err = cm109_select_keymap();
0924 if (err)
0925 return err;
0926
0927 err = usb_register(&cm109_driver);
0928 if (err)
0929 return err;
0930
0931 printk(KERN_INFO KBUILD_MODNAME ": "
0932 DRIVER_DESC ": " DRIVER_VERSION " (C) " DRIVER_AUTHOR "\n");
0933
0934 return 0;
0935 }
0936
0937 static void __exit cm109_exit(void)
0938 {
0939 usb_deregister(&cm109_driver);
0940 }
0941
0942 module_init(cm109_init);
0943 module_exit(cm109_exit);
0944
0945 MODULE_DEVICE_TABLE(usb, cm109_usb_table);
0946
0947 MODULE_AUTHOR(DRIVER_AUTHOR);
0948 MODULE_DESCRIPTION(DRIVER_DESC);
0949 MODULE_LICENSE("GPL");