Lines Matching refs:usb_pcwd
167 struct usb_pcwd_private *usb_pcwd = in usb_pcwd_intr_done() local
169 unsigned char *data = usb_pcwd->intr_buffer; in usb_pcwd_intr_done()
170 struct device *dev = &usb_pcwd->interface->dev; in usb_pcwd_intr_done()
193 usb_pcwd->cmd_command = data[0]; in usb_pcwd_intr_done()
194 usb_pcwd->cmd_data_msb = data[1]; in usb_pcwd_intr_done()
195 usb_pcwd->cmd_data_lsb = data[2]; in usb_pcwd_intr_done()
198 atomic_set(&usb_pcwd->cmd_received, 1); in usb_pcwd_intr_done()
207 static int usb_pcwd_send_command(struct usb_pcwd_private *usb_pcwd, in usb_pcwd_send_command() argument
215 if ((!usb_pcwd) || (!usb_pcwd->exists)) in usb_pcwd_send_command()
229 dev_dbg(&usb_pcwd->interface->dev, in usb_pcwd_send_command()
233 atomic_set(&usb_pcwd->cmd_received, 0); in usb_pcwd_send_command()
235 if (usb_control_msg(usb_pcwd->udev, usb_sndctrlpipe(usb_pcwd->udev, 0), in usb_pcwd_send_command()
237 0x0200, usb_pcwd->interface_number, buf, 6, in usb_pcwd_send_command()
239 dev_dbg(&usb_pcwd->interface->dev, in usb_pcwd_send_command()
249 if (atomic_read(&usb_pcwd->cmd_received)) in usb_pcwd_send_command()
253 if ((got_response) && (cmd == usb_pcwd->cmd_command)) { in usb_pcwd_send_command()
255 *msb = usb_pcwd->cmd_data_msb; in usb_pcwd_send_command()
256 *lsb = usb_pcwd->cmd_data_lsb; in usb_pcwd_send_command()
264 static int usb_pcwd_start(struct usb_pcwd_private *usb_pcwd) in usb_pcwd_start() argument
271 retval = usb_pcwd_send_command(usb_pcwd, CMD_ENABLE_WATCHDOG, in usb_pcwd_start()
282 static int usb_pcwd_stop(struct usb_pcwd_private *usb_pcwd) in usb_pcwd_stop() argument
289 retval = usb_pcwd_send_command(usb_pcwd, CMD_DISABLE_WATCHDOG, in usb_pcwd_stop()
300 static int usb_pcwd_keepalive(struct usb_pcwd_private *usb_pcwd) in usb_pcwd_keepalive() argument
305 usb_pcwd_send_command(usb_pcwd, CMD_TRIGGER, &dummy, &dummy); in usb_pcwd_keepalive()
310 static int usb_pcwd_set_heartbeat(struct usb_pcwd_private *usb_pcwd, int t) in usb_pcwd_set_heartbeat() argument
319 usb_pcwd_send_command(usb_pcwd, CMD_WRITE_WATCHDOG_TIMEOUT, &msb, &lsb); in usb_pcwd_set_heartbeat()
325 static int usb_pcwd_get_temperature(struct usb_pcwd_private *usb_pcwd, in usb_pcwd_get_temperature() argument
330 usb_pcwd_send_command(usb_pcwd, CMD_READ_TEMP, &msb, &lsb); in usb_pcwd_get_temperature()
341 static int usb_pcwd_get_timeleft(struct usb_pcwd_private *usb_pcwd, in usb_pcwd_get_timeleft() argument
348 usb_pcwd_send_command(usb_pcwd, CMD_READ_WATCHDOG_TIMEOUT, &msb, &lsb); in usb_pcwd_get_timeleft()
585 static inline void usb_pcwd_delete(struct usb_pcwd_private *usb_pcwd) in usb_pcwd_delete() argument
587 usb_free_urb(usb_pcwd->intr_urb); in usb_pcwd_delete()
588 usb_free_coherent(usb_pcwd->udev, usb_pcwd->intr_size, in usb_pcwd_delete()
589 usb_pcwd->intr_buffer, usb_pcwd->intr_dma); in usb_pcwd_delete()
590 kfree(usb_pcwd); in usb_pcwd_delete()
605 struct usb_pcwd_private *usb_pcwd = NULL; in usb_pcwd_probe() local
644 usb_pcwd = kzalloc(sizeof(struct usb_pcwd_private), GFP_KERNEL); in usb_pcwd_probe()
645 if (usb_pcwd == NULL) in usb_pcwd_probe()
648 usb_pcwd_device = usb_pcwd; in usb_pcwd_probe()
650 mutex_init(&usb_pcwd->mtx); in usb_pcwd_probe()
651 usb_pcwd->udev = udev; in usb_pcwd_probe()
652 usb_pcwd->interface = interface; in usb_pcwd_probe()
653 usb_pcwd->interface_number = iface_desc->desc.bInterfaceNumber; in usb_pcwd_probe()
654 usb_pcwd->intr_size = (le16_to_cpu(endpoint->wMaxPacketSize) > 8 ? in usb_pcwd_probe()
658 usb_pcwd->intr_buffer = usb_alloc_coherent(udev, usb_pcwd->intr_size, in usb_pcwd_probe()
659 GFP_KERNEL, &usb_pcwd->intr_dma); in usb_pcwd_probe()
660 if (!usb_pcwd->intr_buffer) { in usb_pcwd_probe()
666 usb_pcwd->intr_urb = usb_alloc_urb(0, GFP_KERNEL); in usb_pcwd_probe()
667 if (!usb_pcwd->intr_urb) in usb_pcwd_probe()
671 usb_fill_int_urb(usb_pcwd->intr_urb, udev, pipe, in usb_pcwd_probe()
672 usb_pcwd->intr_buffer, usb_pcwd->intr_size, in usb_pcwd_probe()
673 usb_pcwd_intr_done, usb_pcwd, endpoint->bInterval); in usb_pcwd_probe()
674 usb_pcwd->intr_urb->transfer_dma = usb_pcwd->intr_dma; in usb_pcwd_probe()
675 usb_pcwd->intr_urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in usb_pcwd_probe()
678 if (usb_submit_urb(usb_pcwd->intr_urb, GFP_KERNEL)) { in usb_pcwd_probe()
685 usb_pcwd->exists = 1; in usb_pcwd_probe()
688 usb_pcwd_stop(usb_pcwd); in usb_pcwd_probe()
691 got_fw_rev = usb_pcwd_send_command(usb_pcwd, CMD_GET_FIRMWARE_VERSION, in usb_pcwd_probe()
701 usb_pcwd_send_command(usb_pcwd, CMD_GET_DIP_SWITCH_SETTINGS, &dummy, in usb_pcwd_probe()
715 if (usb_pcwd_set_heartbeat(usb_pcwd, heartbeat)) { in usb_pcwd_probe()
716 usb_pcwd_set_heartbeat(usb_pcwd, WATCHDOG_HEARTBEAT); in usb_pcwd_probe()
742 usb_set_intfdata(interface, usb_pcwd); in usb_pcwd_probe()
754 if (usb_pcwd) in usb_pcwd_probe()
755 usb_pcwd_delete(usb_pcwd); in usb_pcwd_probe()
771 struct usb_pcwd_private *usb_pcwd; in usb_pcwd_disconnect() local
776 usb_pcwd = usb_get_intfdata(interface); in usb_pcwd_disconnect()
779 mutex_lock(&usb_pcwd->mtx); in usb_pcwd_disconnect()
783 usb_pcwd_stop(usb_pcwd); in usb_pcwd_disconnect()
786 usb_pcwd->exists = 0; in usb_pcwd_disconnect()
793 mutex_unlock(&usb_pcwd->mtx); in usb_pcwd_disconnect()
796 usb_pcwd_delete(usb_pcwd); in usb_pcwd_disconnect()