Lines Matching refs:dln2
20 #include <linux/mfd/dln2.h>
123 struct dln2_dev *dln2 = dev_get_drvdata(pdev->dev.parent);
136 spin_lock_irqsave(&dln2->event_cb_lock, flags);
138 list_for_each_entry(i, &dln2->event_cb_list, list) {
146 list_add_rcu(&entry->list, &dln2->event_cb_list);
148 spin_unlock_irqrestore(&dln2->event_cb_lock, flags);
159 struct dln2_dev *dln2 = dev_get_drvdata(pdev->dev.parent);
164 spin_lock_irqsave(&dln2->event_cb_lock, flags);
166 list_for_each_entry(i, &dln2->event_cb_list, list) {
174 spin_unlock_irqrestore(&dln2->event_cb_lock, flags);
188 static bool dln2_transfer_complete(struct dln2_dev *dln2, struct urb *urb,
191 struct device *dev = &dln2->interface->dev;
192 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[handle];
217 static void dln2_run_event_callbacks(struct dln2_dev *dln2, u16 id, u16 echo,
224 list_for_each_entry_rcu(i, &dln2->event_cb_list, list) {
236 struct dln2_dev *dln2 = urb->context;
238 struct device *dev = &dln2->interface->dev;
287 spin_lock_irqsave(&dln2->event_cb_lock, flags);
288 dln2_run_event_callbacks(dln2, id, echo, data, len);
289 spin_unlock_irqrestore(&dln2->event_cb_lock, flags);
292 if (dln2_transfer_complete(dln2, urb, handle, echo))
327 static int dln2_send_wait(struct dln2_dev *dln2, u16 handle, u16 cmd, u16 echo,
339 ret = usb_bulk_msg(dln2->usb_dev,
340 usb_sndbulkpipe(dln2->usb_dev, dln2->ep_out),
348 static bool find_free_slot(struct dln2_dev *dln2, u16 handle, int *slot)
353 if (dln2->disconnect) {
358 rxs = &dln2->mod_rx_slots[handle];
376 static int alloc_rx_slot(struct dln2_dev *dln2, u16 handle)
385 ret = wait_event_interruptible(dln2->mod_rx_slots[handle].wq,
386 find_free_slot(dln2, handle, &slot));
393 static void free_rx_slot(struct dln2_dev *dln2, u16 handle, int slot)
400 rxs = &dln2->mod_rx_slots[handle];
416 struct device *dev = &dln2->interface->dev;
426 static int _dln2_transfer(struct dln2_dev *dln2, u16 handle, u16 cmd,
434 struct device *dev = &dln2->interface->dev;
436 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[handle];
439 spin_lock(&dln2->disconnect_lock);
440 if (!dln2->disconnect)
441 dln2->active_transfers++;
444 spin_unlock(&dln2->disconnect_lock);
449 rx_slot = alloc_rx_slot(dln2, handle);
455 ret = dln2_send_wait(dln2, handle, cmd, rx_slot, obuf, obuf_len);
472 if (dln2->disconnect) {
502 free_rx_slot(dln2, handle, rx_slot);
504 spin_lock(&dln2->disconnect_lock);
505 dln2->active_transfers--;
506 spin_unlock(&dln2->disconnect_lock);
507 if (dln2->disconnect)
508 wake_up(&dln2->disconnect_wq);
518 struct dln2_dev *dln2;
521 dln2 = dev_get_drvdata(pdev->dev.parent);
525 return _dln2_transfer(dln2, handle, cmd, obuf, obuf_len, ibuf,
530 static int dln2_check_hw(struct dln2_dev *dln2)
536 ret = _dln2_transfer(dln2, DLN2_HANDLE_CTRL, CMD_GET_DEVICE_VER,
544 dev_err(&dln2->interface->dev, "Device ID 0x%x not supported\n",
552 static int dln2_print_serialno(struct dln2_dev *dln2)
557 struct device *dev = &dln2->interface->dev;
559 ret = _dln2_transfer(dln2, DLN2_HANDLE_CTRL, CMD_GET_DEVICE_SN, NULL, 0,
571 static int dln2_hw_init(struct dln2_dev *dln2)
575 ret = dln2_check_hw(dln2);
579 return dln2_print_serialno(dln2);
582 static void dln2_free_rx_urbs(struct dln2_dev *dln2)
587 usb_free_urb(dln2->rx_urb[i]);
588 kfree(dln2->rx_buf[i]);
592 static void dln2_stop_rx_urbs(struct dln2_dev *dln2)
597 usb_kill_urb(dln2->rx_urb[i]);
600 static void dln2_free(struct dln2_dev *dln2)
602 dln2_free_rx_urbs(dln2);
603 usb_put_dev(dln2->usb_dev);
604 kfree(dln2);
607 static int dln2_setup_rx_urbs(struct dln2_dev *dln2,
614 dln2->rx_buf[i] = kmalloc(rx_max_size, GFP_KERNEL);
615 if (!dln2->rx_buf[i])
618 dln2->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
619 if (!dln2->rx_urb[i])
622 usb_fill_bulk_urb(dln2->rx_urb[i], dln2->usb_dev,
623 usb_rcvbulkpipe(dln2->usb_dev, dln2->ep_in),
624 dln2->rx_buf[i], rx_max_size, dln2_rx, dln2);
630 static int dln2_start_rx_urbs(struct dln2_dev *dln2, gfp_t gfp)
632 struct device *dev = &dln2->interface->dev;
637 ret = usb_submit_urb(dln2->rx_urb[i], gfp);
694 .name = "dln2-gpio",
700 .name = "dln2-i2c",
706 .name = "dln2-spi",
712 .name = "dln2-adc",
719 static void dln2_stop(struct dln2_dev *dln2)
724 spin_lock(&dln2->disconnect_lock);
725 dln2->disconnect = true;
726 spin_unlock(&dln2->disconnect_lock);
730 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[i];
747 wait_event(dln2->disconnect_wq, !dln2->active_transfers);
749 dln2_stop_rx_urbs(dln2);
754 struct dln2_dev *dln2 = usb_get_intfdata(interface);
756 dln2_stop(dln2);
760 dln2_free(dln2);
770 struct dln2_dev *dln2;
781 dln2 = kzalloc(sizeof(*dln2), GFP_KERNEL);
782 if (!dln2)
785 dln2->ep_out = epout->bEndpointAddress;
786 dln2->ep_in = epin->bEndpointAddress;
787 dln2->usb_dev = usb_get_dev(interface_to_usbdev(interface));
788 dln2->interface = interface;
789 usb_set_intfdata(interface, dln2);
790 init_waitqueue_head(&dln2->disconnect_wq);
793 init_waitqueue_head(&dln2->mod_rx_slots[i].wq);
794 spin_lock_init(&dln2->mod_rx_slots[i].lock);
796 init_completion(&dln2->mod_rx_slots[i].slots[j].done);
799 spin_lock_init(&dln2->event_cb_lock);
800 spin_lock_init(&dln2->disconnect_lock);
801 INIT_LIST_HEAD(&dln2->event_cb_list);
803 ret = dln2_setup_rx_urbs(dln2, hostif);
807 ret = dln2_start_rx_urbs(dln2, GFP_KERNEL);
811 ret = dln2_hw_init(dln2);
826 dln2_stop_rx_urbs(dln2);
829 dln2_free(dln2);
836 struct dln2_dev *dln2 = usb_get_intfdata(iface);
838 dln2_stop(dln2);
845 struct dln2_dev *dln2 = usb_get_intfdata(iface);
847 dln2->disconnect = false;
849 return dln2_start_rx_urbs(dln2, GFP_NOIO);
860 .name = "dln2",