Lines Matching refs:dev
294 static void report_key(struct cm109_dev *dev, int key)
296 struct input_dev *idev = dev->idev;
298 if (dev->key_code >= 0) {
300 input_report_key(idev, dev->key_code, 0);
303 dev->key_code = key;
316 static void cm109_report_special(struct cm109_dev *dev)
319 struct input_dev *idev = dev->idev;
320 u8 data = dev->irq_data->byte[HID_IR0];
325 keycode = dev->keymap[0xff + BIT(i)];
342 static void cm109_submit_buzz_toggle(struct cm109_dev *dev)
346 if (dev->buzzer_state)
347 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
349 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
351 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
353 dev_err(&dev->intf->dev,
363 struct cm109_dev *dev = urb->context;
368 dev_dbg(&dev->intf->dev, "### URB IRQ: [0x%02x 0x%02x 0x%02x 0x%02x] keybit=0x%02x\n",
369 dev->irq_data->byte[0],
370 dev->irq_data->byte[1],
371 dev->irq_data->byte[2],
372 dev->irq_data->byte[3],
373 dev->keybit);
378 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n",
384 cm109_report_special(dev);
387 if (dev->keybit == 0xf) {
390 if ((dev->gpi & 0xf0) == (dev->irq_data->byte[HID_IR1] & 0xf0))
393 dev->gpi = dev->irq_data->byte[HID_IR1] & 0xf0;
394 dev->keybit = 0x1;
396 report_key(dev, dev->keymap[dev->irq_data->byte[HID_IR1]]);
398 dev->keybit <<= 1;
399 if (dev->keybit > 0x8)
400 dev->keybit = 0xf;
405 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
407 dev->irq_urb_pending = 0;
409 if (likely(!dev->shutdown)) {
411 if (dev->buzzer_state)
412 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
414 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
416 dev->ctl_data->byte[HID_OR1] = dev->keybit;
417 dev->ctl_data->byte[HID_OR2] = dev->keybit;
419 dev->buzzer_pending = 0;
420 dev->ctl_urb_pending = 1;
422 error = usb_submit_urb(dev->urb_ctl, GFP_ATOMIC);
424 dev_err(&dev->intf->dev,
429 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
434 struct cm109_dev *dev = urb->context;
439 dev_dbg(&dev->intf->dev, "### URB CTL: [0x%02x 0x%02x 0x%02x 0x%02x]\n",
440 dev->ctl_data->byte[0],
441 dev->ctl_data->byte[1],
442 dev->ctl_data->byte[2],
443 dev->ctl_data->byte[3]);
448 dev_err_ratelimited(&dev->intf->dev, "%s: urb status %d\n",
452 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
454 dev->ctl_urb_pending = 0;
456 if (likely(!dev->shutdown)) {
458 if (dev->buzzer_pending || status) {
459 dev->buzzer_pending = 0;
460 dev->ctl_urb_pending = 1;
461 cm109_submit_buzz_toggle(dev);
462 } else if (likely(!dev->irq_urb_pending)) {
464 dev->irq_urb_pending = 1;
465 error = usb_submit_urb(dev->urb_irq, GFP_ATOMIC);
467 dev_err(&dev->intf->dev,
473 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
476 static void cm109_toggle_buzzer_async(struct cm109_dev *dev)
480 spin_lock_irqsave(&dev->ctl_submit_lock, flags);
482 if (dev->ctl_urb_pending) {
484 dev->buzzer_pending = 1;
486 dev->ctl_urb_pending = 1;
487 cm109_submit_buzz_toggle(dev);
490 spin_unlock_irqrestore(&dev->ctl_submit_lock, flags);
493 static void cm109_toggle_buzzer_sync(struct cm109_dev *dev, int on)
498 dev->ctl_data->byte[HID_OR0] |= BUZZER_ON;
500 dev->ctl_data->byte[HID_OR0] &= ~BUZZER_ON;
502 error = usb_control_msg(dev->udev,
503 usb_sndctrlpipe(dev->udev, 0),
504 dev->ctl_req->bRequest,
505 dev->ctl_req->bRequestType,
506 le16_to_cpu(dev->ctl_req->wValue),
507 le16_to_cpu(dev->ctl_req->wIndex),
508 dev->ctl_data,
511 dev_err(&dev->intf->dev, "%s: usb_control_msg() failed %d\n",
515 static void cm109_stop_traffic(struct cm109_dev *dev)
517 dev->shutdown = 1;
523 usb_kill_urb(dev->urb_ctl);
524 usb_kill_urb(dev->urb_irq);
526 cm109_toggle_buzzer_sync(dev, 0);
528 dev->shutdown = 0;
532 static void cm109_restore_state(struct cm109_dev *dev)
534 if (dev->open) {
539 cm109_toggle_buzzer_async(dev);
549 struct cm109_dev *dev = input_get_drvdata(idev);
552 error = usb_autopm_get_interface(dev->intf);
554 dev_err(&idev->dev, "%s - cannot autoresume, result %d\n",
559 mutex_lock(&dev->pm_mutex);
561 dev->buzzer_state = 0;
562 dev->key_code = -1; /* no keys pressed */
563 dev->keybit = 0xf;
566 dev->ctl_data->byte[HID_OR0] = HID_OR_GPO_BUZ_SPDIF;
567 dev->ctl_data->byte[HID_OR1] = dev->keybit;
568 dev->ctl_data->byte[HID_OR2] = dev->keybit;
569 dev->ctl_data->byte[HID_OR3] = 0x00;
571 dev->ctl_urb_pending = 1;
572 error = usb_submit_urb(dev->urb_ctl, GFP_KERNEL);
574 dev->ctl_urb_pending = 0;
575 dev_err(&dev->intf->dev, "%s: usb_submit_urb (urb_ctl) failed %d\n",
578 dev->open = 1;
581 mutex_unlock(&dev->pm_mutex);
584 usb_autopm_put_interface(dev->intf);
591 struct cm109_dev *dev = input_get_drvdata(idev);
593 mutex_lock(&dev->pm_mutex);
600 cm109_stop_traffic(dev);
601 dev->open = 0;
603 mutex_unlock(&dev->pm_mutex);
605 usb_autopm_put_interface(dev->intf);
611 struct cm109_dev *dev = input_get_drvdata(idev);
613 dev_dbg(&dev->intf->dev,
622 dev->buzzer_state = !!value;
623 if (!dev->resetting)
624 cm109_toggle_buzzer_async(dev);
666 static void cm109_usb_cleanup(struct cm109_dev *dev)
668 kfree(dev->ctl_req);
669 usb_free_coherent(dev->udev, USB_PKT_LEN, dev->ctl_data, dev->ctl_dma);
670 usb_free_coherent(dev->udev, USB_PKT_LEN, dev->irq_data, dev->irq_dma);
672 usb_free_urb(dev->urb_irq); /* parameter validation in core/urb */
673 usb_free_urb(dev->urb_ctl); /* parameter validation in core/urb */
674 kfree(dev);
679 struct cm109_dev *dev = usb_get_intfdata(interface);
682 input_unregister_device(dev->idev);
683 cm109_usb_cleanup(dev);
693 struct cm109_dev *dev;
708 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
709 if (!dev)
712 spin_lock_init(&dev->ctl_submit_lock);
713 mutex_init(&dev->pm_mutex);
715 dev->udev = udev;
716 dev->intf = intf;
718 dev->idev = input_dev = input_allocate_device();
723 dev->irq_data = usb_alloc_coherent(udev, USB_PKT_LEN,
724 GFP_KERNEL, &dev->irq_dma);
725 if (!dev->irq_data)
728 dev->ctl_data = usb_alloc_coherent(udev, USB_PKT_LEN,
729 GFP_KERNEL, &dev->ctl_dma);
730 if (!dev->ctl_data)
733 dev->ctl_req = kmalloc(sizeof(*(dev->ctl_req)), GFP_KERNEL);
734 if (!dev->ctl_req)
738 dev->urb_irq = usb_alloc_urb(0, GFP_KERNEL);
739 if (!dev->urb_irq)
742 dev->urb_ctl = usb_alloc_urb(0, GFP_KERNEL);
743 if (!dev->urb_ctl)
750 dev_err(&intf->dev, "invalid payload size %d, expected %d\n",
754 usb_fill_int_urb(dev->urb_irq, udev, pipe, dev->irq_data,
756 cm109_urb_irq_callback, dev, endpoint->bInterval);
757 dev->urb_irq->transfer_dma = dev->irq_dma;
758 dev->urb_irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
759 dev->urb_irq->dev = udev;
762 dev->ctl_req->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE |
764 dev->ctl_req->bRequest = USB_REQ_SET_CONFIGURATION;
765 dev->ctl_req->wValue = cpu_to_le16(0x200);
766 dev->ctl_req->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber);
767 dev->ctl_req->wLength = cpu_to_le16(USB_PKT_LEN);
769 usb_fill_control_urb(dev->urb_ctl, udev, usb_sndctrlpipe(udev, 0),
770 (void *)dev->ctl_req, dev->ctl_data, USB_PKT_LEN,
771 cm109_urb_ctl_callback, dev);
772 dev->urb_ctl->transfer_dma = dev->ctl_dma;
773 dev->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
774 dev->urb_ctl->dev = udev;
777 usb_make_path(udev, dev->phys, sizeof(dev->phys));
778 strlcat(dev->phys, "/input0", sizeof(dev->phys));
782 input_dev->phys = dev->phys;
784 input_dev->dev.parent = &intf->dev;
786 input_set_drvdata(input_dev, dev);
791 input_dev->keycode = dev->keymap;
793 input_dev->keycodemax = ARRAY_SIZE(dev->keymap);
801 dev->keymap[i] = k;
806 error = input_register_device(dev->idev);
810 usb_set_intfdata(intf, dev);
816 cm109_usb_cleanup(dev);
822 struct cm109_dev *dev = usb_get_intfdata(intf);
824 dev_info(&intf->dev, "cm109: usb_suspend (event=%d)\n", message.event);
826 mutex_lock(&dev->pm_mutex);
827 cm109_stop_traffic(dev);
828 mutex_unlock(&dev->pm_mutex);
835 struct cm109_dev *dev = usb_get_intfdata(intf);
837 dev_info(&intf->dev, "cm109: usb_resume\n");
839 mutex_lock(&dev->pm_mutex);
840 cm109_restore_state(dev);
841 mutex_unlock(&dev->pm_mutex);
848 struct cm109_dev *dev = usb_get_intfdata(intf);
850 mutex_lock(&dev->pm_mutex);
856 dev->resetting = 1;
859 cm109_stop_traffic(dev);
866 struct cm109_dev *dev = usb_get_intfdata(intf);
868 dev->resetting = 0;
871 cm109_restore_state(dev);
873 mutex_unlock(&dev->pm_mutex);