1/* 2 * Driver for the Diolan DLN-2 USB adapter 3 * 4 * Copyright (c) 2014 Intel Corporation 5 * 6 * Derived from: 7 * i2c-diolan-u2c.c 8 * Copyright (c) 2010-2011 Ericsson AB 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License as 12 * published by the Free Software Foundation, version 2. 13 */ 14 15#include <linux/kernel.h> 16#include <linux/module.h> 17#include <linux/types.h> 18#include <linux/slab.h> 19#include <linux/usb.h> 20#include <linux/i2c.h> 21#include <linux/mutex.h> 22#include <linux/platform_device.h> 23#include <linux/mfd/core.h> 24#include <linux/mfd/dln2.h> 25#include <linux/rculist.h> 26 27struct dln2_header { 28 __le16 size; 29 __le16 id; 30 __le16 echo; 31 __le16 handle; 32}; 33 34struct dln2_response { 35 struct dln2_header hdr; 36 __le16 result; 37}; 38 39#define DLN2_GENERIC_MODULE_ID 0x00 40#define DLN2_GENERIC_CMD(cmd) DLN2_CMD(cmd, DLN2_GENERIC_MODULE_ID) 41#define CMD_GET_DEVICE_VER DLN2_GENERIC_CMD(0x30) 42#define CMD_GET_DEVICE_SN DLN2_GENERIC_CMD(0x31) 43 44#define DLN2_HW_ID 0x200 45#define DLN2_USB_TIMEOUT 200 /* in ms */ 46#define DLN2_MAX_RX_SLOTS 16 47#define DLN2_MAX_URBS 16 48#define DLN2_RX_BUF_SIZE 512 49 50enum dln2_handle { 51 DLN2_HANDLE_EVENT = 0, /* don't change, hardware defined */ 52 DLN2_HANDLE_CTRL, 53 DLN2_HANDLE_GPIO, 54 DLN2_HANDLE_I2C, 55 DLN2_HANDLE_SPI, 56 DLN2_HANDLES 57}; 58 59/* 60 * Receive context used between the receive demultiplexer and the transfer 61 * routine. While sending a request the transfer routine will look for a free 62 * receive context and use it to wait for a response and to receive the URB and 63 * thus the response data. 64 */ 65struct dln2_rx_context { 66 /* completion used to wait for a response */ 67 struct completion done; 68 69 /* if non-NULL the URB contains the response */ 70 struct urb *urb; 71 72 /* if true then this context is used to wait for a response */ 73 bool in_use; 74}; 75 76/* 77 * Receive contexts for a particular DLN2 module (i2c, gpio, etc.). We use the 78 * handle header field to identify the module in dln2_dev.mod_rx_slots and then 79 * the echo header field to index the slots field and find the receive context 80 * for a particular request. 81 */ 82struct dln2_mod_rx_slots { 83 /* RX slots bitmap */ 84 DECLARE_BITMAP(bmap, DLN2_MAX_RX_SLOTS); 85 86 /* used to wait for a free RX slot */ 87 wait_queue_head_t wq; 88 89 /* used to wait for an RX operation to complete */ 90 struct dln2_rx_context slots[DLN2_MAX_RX_SLOTS]; 91 92 /* avoid races between alloc/free_rx_slot and dln2_rx_transfer */ 93 spinlock_t lock; 94}; 95 96struct dln2_dev { 97 struct usb_device *usb_dev; 98 struct usb_interface *interface; 99 u8 ep_in; 100 u8 ep_out; 101 102 struct urb *rx_urb[DLN2_MAX_URBS]; 103 void *rx_buf[DLN2_MAX_URBS]; 104 105 struct dln2_mod_rx_slots mod_rx_slots[DLN2_HANDLES]; 106 107 struct list_head event_cb_list; 108 spinlock_t event_cb_lock; 109 110 bool disconnect; 111 int active_transfers; 112 wait_queue_head_t disconnect_wq; 113 spinlock_t disconnect_lock; 114}; 115 116struct dln2_event_cb_entry { 117 struct list_head list; 118 u16 id; 119 struct platform_device *pdev; 120 dln2_event_cb_t callback; 121}; 122 123int dln2_register_event_cb(struct platform_device *pdev, u16 id, 124 dln2_event_cb_t event_cb) 125{ 126 struct dln2_dev *dln2 = dev_get_drvdata(pdev->dev.parent); 127 struct dln2_event_cb_entry *i, *entry; 128 unsigned long flags; 129 int ret = 0; 130 131 entry = kzalloc(sizeof(*entry), GFP_KERNEL); 132 if (!entry) 133 return -ENOMEM; 134 135 entry->id = id; 136 entry->callback = event_cb; 137 entry->pdev = pdev; 138 139 spin_lock_irqsave(&dln2->event_cb_lock, flags); 140 141 list_for_each_entry(i, &dln2->event_cb_list, list) { 142 if (i->id == id) { 143 ret = -EBUSY; 144 break; 145 } 146 } 147 148 if (!ret) 149 list_add_rcu(&entry->list, &dln2->event_cb_list); 150 151 spin_unlock_irqrestore(&dln2->event_cb_lock, flags); 152 153 if (ret) 154 kfree(entry); 155 156 return ret; 157} 158EXPORT_SYMBOL(dln2_register_event_cb); 159 160void dln2_unregister_event_cb(struct platform_device *pdev, u16 id) 161{ 162 struct dln2_dev *dln2 = dev_get_drvdata(pdev->dev.parent); 163 struct dln2_event_cb_entry *i; 164 unsigned long flags; 165 bool found = false; 166 167 spin_lock_irqsave(&dln2->event_cb_lock, flags); 168 169 list_for_each_entry(i, &dln2->event_cb_list, list) { 170 if (i->id == id) { 171 list_del_rcu(&i->list); 172 found = true; 173 break; 174 } 175 } 176 177 spin_unlock_irqrestore(&dln2->event_cb_lock, flags); 178 179 if (found) { 180 synchronize_rcu(); 181 kfree(i); 182 } 183} 184EXPORT_SYMBOL(dln2_unregister_event_cb); 185 186/* 187 * Returns true if a valid transfer slot is found. In this case the URB must not 188 * be resubmitted immediately in dln2_rx as we need the data when dln2_transfer 189 * is woke up. It will be resubmitted there. 190 */ 191static bool dln2_transfer_complete(struct dln2_dev *dln2, struct urb *urb, 192 u16 handle, u16 rx_slot) 193{ 194 struct device *dev = &dln2->interface->dev; 195 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[handle]; 196 struct dln2_rx_context *rxc; 197 bool valid_slot = false; 198 199 if (rx_slot >= DLN2_MAX_RX_SLOTS) 200 goto out; 201 202 rxc = &rxs->slots[rx_slot]; 203 204 /* 205 * No need to disable interrupts as this lock is not taken in interrupt 206 * context elsewhere in this driver. This function (or its callers) are 207 * also not exported to other modules. 208 */ 209 spin_lock(&rxs->lock); 210 if (rxc->in_use && !rxc->urb) { 211 rxc->urb = urb; 212 complete(&rxc->done); 213 valid_slot = true; 214 } 215 spin_unlock(&rxs->lock); 216 217out: 218 if (!valid_slot) 219 dev_warn(dev, "bad/late response %d/%d\n", handle, rx_slot); 220 221 return valid_slot; 222} 223 224static void dln2_run_event_callbacks(struct dln2_dev *dln2, u16 id, u16 echo, 225 void *data, int len) 226{ 227 struct dln2_event_cb_entry *i; 228 229 rcu_read_lock(); 230 231 list_for_each_entry_rcu(i, &dln2->event_cb_list, list) { 232 if (i->id == id) { 233 i->callback(i->pdev, echo, data, len); 234 break; 235 } 236 } 237 238 rcu_read_unlock(); 239} 240 241static void dln2_rx(struct urb *urb) 242{ 243 struct dln2_dev *dln2 = urb->context; 244 struct dln2_header *hdr = urb->transfer_buffer; 245 struct device *dev = &dln2->interface->dev; 246 u16 id, echo, handle, size; 247 u8 *data; 248 int len; 249 int err; 250 251 switch (urb->status) { 252 case 0: 253 /* success */ 254 break; 255 case -ECONNRESET: 256 case -ENOENT: 257 case -ESHUTDOWN: 258 case -EPIPE: 259 /* this urb is terminated, clean up */ 260 dev_dbg(dev, "urb shutting down with status %d\n", urb->status); 261 return; 262 default: 263 dev_dbg(dev, "nonzero urb status received %d\n", urb->status); 264 goto out; 265 } 266 267 if (urb->actual_length < sizeof(struct dln2_header)) { 268 dev_err(dev, "short response: %d\n", urb->actual_length); 269 goto out; 270 } 271 272 handle = le16_to_cpu(hdr->handle); 273 id = le16_to_cpu(hdr->id); 274 echo = le16_to_cpu(hdr->echo); 275 size = le16_to_cpu(hdr->size); 276 277 if (size != urb->actual_length) { 278 dev_err(dev, "size mismatch: handle %x cmd %x echo %x size %d actual %d\n", 279 handle, id, echo, size, urb->actual_length); 280 goto out; 281 } 282 283 if (handle >= DLN2_HANDLES) { 284 dev_warn(dev, "invalid handle %d\n", handle); 285 goto out; 286 } 287 288 data = urb->transfer_buffer + sizeof(struct dln2_header); 289 len = urb->actual_length - sizeof(struct dln2_header); 290 291 if (handle == DLN2_HANDLE_EVENT) { 292 dln2_run_event_callbacks(dln2, id, echo, data, len); 293 } else { 294 /* URB will be re-submitted in _dln2_transfer (free_rx_slot) */ 295 if (dln2_transfer_complete(dln2, urb, handle, echo)) 296 return; 297 } 298 299out: 300 err = usb_submit_urb(urb, GFP_ATOMIC); 301 if (err < 0) 302 dev_err(dev, "failed to resubmit RX URB: %d\n", err); 303} 304 305static void *dln2_prep_buf(u16 handle, u16 cmd, u16 echo, const void *obuf, 306 int *obuf_len, gfp_t gfp) 307{ 308 int len; 309 void *buf; 310 struct dln2_header *hdr; 311 312 len = *obuf_len + sizeof(*hdr); 313 buf = kmalloc(len, gfp); 314 if (!buf) 315 return NULL; 316 317 hdr = (struct dln2_header *)buf; 318 hdr->id = cpu_to_le16(cmd); 319 hdr->size = cpu_to_le16(len); 320 hdr->echo = cpu_to_le16(echo); 321 hdr->handle = cpu_to_le16(handle); 322 323 memcpy(buf + sizeof(*hdr), obuf, *obuf_len); 324 325 *obuf_len = len; 326 327 return buf; 328} 329 330static int dln2_send_wait(struct dln2_dev *dln2, u16 handle, u16 cmd, u16 echo, 331 const void *obuf, int obuf_len) 332{ 333 int ret = 0; 334 int len = obuf_len; 335 void *buf; 336 int actual; 337 338 buf = dln2_prep_buf(handle, cmd, echo, obuf, &len, GFP_KERNEL); 339 if (!buf) 340 return -ENOMEM; 341 342 ret = usb_bulk_msg(dln2->usb_dev, 343 usb_sndbulkpipe(dln2->usb_dev, dln2->ep_out), 344 buf, len, &actual, DLN2_USB_TIMEOUT); 345 346 kfree(buf); 347 348 return ret; 349} 350 351static bool find_free_slot(struct dln2_dev *dln2, u16 handle, int *slot) 352{ 353 struct dln2_mod_rx_slots *rxs; 354 unsigned long flags; 355 356 if (dln2->disconnect) { 357 *slot = -ENODEV; 358 return true; 359 } 360 361 rxs = &dln2->mod_rx_slots[handle]; 362 363 spin_lock_irqsave(&rxs->lock, flags); 364 365 *slot = find_first_zero_bit(rxs->bmap, DLN2_MAX_RX_SLOTS); 366 367 if (*slot < DLN2_MAX_RX_SLOTS) { 368 struct dln2_rx_context *rxc = &rxs->slots[*slot]; 369 370 set_bit(*slot, rxs->bmap); 371 rxc->in_use = true; 372 } 373 374 spin_unlock_irqrestore(&rxs->lock, flags); 375 376 return *slot < DLN2_MAX_RX_SLOTS; 377} 378 379static int alloc_rx_slot(struct dln2_dev *dln2, u16 handle) 380{ 381 int ret; 382 int slot; 383 384 /* 385 * No need to timeout here, the wait is bounded by the timeout in 386 * _dln2_transfer. 387 */ 388 ret = wait_event_interruptible(dln2->mod_rx_slots[handle].wq, 389 find_free_slot(dln2, handle, &slot)); 390 if (ret < 0) 391 return ret; 392 393 return slot; 394} 395 396static void free_rx_slot(struct dln2_dev *dln2, u16 handle, int slot) 397{ 398 struct dln2_mod_rx_slots *rxs; 399 struct urb *urb = NULL; 400 unsigned long flags; 401 struct dln2_rx_context *rxc; 402 403 rxs = &dln2->mod_rx_slots[handle]; 404 405 spin_lock_irqsave(&rxs->lock, flags); 406 407 clear_bit(slot, rxs->bmap); 408 409 rxc = &rxs->slots[slot]; 410 rxc->in_use = false; 411 urb = rxc->urb; 412 rxc->urb = NULL; 413 reinit_completion(&rxc->done); 414 415 spin_unlock_irqrestore(&rxs->lock, flags); 416 417 if (urb) { 418 int err; 419 struct device *dev = &dln2->interface->dev; 420 421 err = usb_submit_urb(urb, GFP_KERNEL); 422 if (err < 0) 423 dev_err(dev, "failed to resubmit RX URB: %d\n", err); 424 } 425 426 wake_up_interruptible(&rxs->wq); 427} 428 429static int _dln2_transfer(struct dln2_dev *dln2, u16 handle, u16 cmd, 430 const void *obuf, unsigned obuf_len, 431 void *ibuf, unsigned *ibuf_len) 432{ 433 int ret = 0; 434 int rx_slot; 435 struct dln2_response *rsp; 436 struct dln2_rx_context *rxc; 437 struct device *dev = &dln2->interface->dev; 438 const unsigned long timeout = msecs_to_jiffies(DLN2_USB_TIMEOUT); 439 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[handle]; 440 int size; 441 442 spin_lock(&dln2->disconnect_lock); 443 if (!dln2->disconnect) 444 dln2->active_transfers++; 445 else 446 ret = -ENODEV; 447 spin_unlock(&dln2->disconnect_lock); 448 449 if (ret) 450 return ret; 451 452 rx_slot = alloc_rx_slot(dln2, handle); 453 if (rx_slot < 0) { 454 ret = rx_slot; 455 goto out_decr; 456 } 457 458 ret = dln2_send_wait(dln2, handle, cmd, rx_slot, obuf, obuf_len); 459 if (ret < 0) { 460 dev_err(dev, "USB write failed: %d\n", ret); 461 goto out_free_rx_slot; 462 } 463 464 rxc = &rxs->slots[rx_slot]; 465 466 ret = wait_for_completion_interruptible_timeout(&rxc->done, timeout); 467 if (ret <= 0) { 468 if (!ret) 469 ret = -ETIMEDOUT; 470 goto out_free_rx_slot; 471 } else { 472 ret = 0; 473 } 474 475 if (dln2->disconnect) { 476 ret = -ENODEV; 477 goto out_free_rx_slot; 478 } 479 480 /* if we got here we know that the response header has been checked */ 481 rsp = rxc->urb->transfer_buffer; 482 size = le16_to_cpu(rsp->hdr.size); 483 484 if (size < sizeof(*rsp)) { 485 ret = -EPROTO; 486 goto out_free_rx_slot; 487 } 488 489 if (le16_to_cpu(rsp->result) > 0x80) { 490 dev_dbg(dev, "%d received response with error %d\n", 491 handle, le16_to_cpu(rsp->result)); 492 ret = -EREMOTEIO; 493 goto out_free_rx_slot; 494 } 495 496 if (!ibuf) 497 goto out_free_rx_slot; 498 499 if (*ibuf_len > size - sizeof(*rsp)) 500 *ibuf_len = size - sizeof(*rsp); 501 502 memcpy(ibuf, rsp + 1, *ibuf_len); 503 504out_free_rx_slot: 505 free_rx_slot(dln2, handle, rx_slot); 506out_decr: 507 spin_lock(&dln2->disconnect_lock); 508 dln2->active_transfers--; 509 spin_unlock(&dln2->disconnect_lock); 510 if (dln2->disconnect) 511 wake_up(&dln2->disconnect_wq); 512 513 return ret; 514} 515 516int dln2_transfer(struct platform_device *pdev, u16 cmd, 517 const void *obuf, unsigned obuf_len, 518 void *ibuf, unsigned *ibuf_len) 519{ 520 struct dln2_platform_data *dln2_pdata; 521 struct dln2_dev *dln2; 522 u16 handle; 523 524 dln2 = dev_get_drvdata(pdev->dev.parent); 525 dln2_pdata = dev_get_platdata(&pdev->dev); 526 handle = dln2_pdata->handle; 527 528 return _dln2_transfer(dln2, handle, cmd, obuf, obuf_len, ibuf, 529 ibuf_len); 530} 531EXPORT_SYMBOL(dln2_transfer); 532 533static int dln2_check_hw(struct dln2_dev *dln2) 534{ 535 int ret; 536 __le32 hw_type; 537 int len = sizeof(hw_type); 538 539 ret = _dln2_transfer(dln2, DLN2_HANDLE_CTRL, CMD_GET_DEVICE_VER, 540 NULL, 0, &hw_type, &len); 541 if (ret < 0) 542 return ret; 543 if (len < sizeof(hw_type)) 544 return -EREMOTEIO; 545 546 if (le32_to_cpu(hw_type) != DLN2_HW_ID) { 547 dev_err(&dln2->interface->dev, "Device ID 0x%x not supported\n", 548 le32_to_cpu(hw_type)); 549 return -ENODEV; 550 } 551 552 return 0; 553} 554 555static int dln2_print_serialno(struct dln2_dev *dln2) 556{ 557 int ret; 558 __le32 serial_no; 559 int len = sizeof(serial_no); 560 struct device *dev = &dln2->interface->dev; 561 562 ret = _dln2_transfer(dln2, DLN2_HANDLE_CTRL, CMD_GET_DEVICE_SN, NULL, 0, 563 &serial_no, &len); 564 if (ret < 0) 565 return ret; 566 if (len < sizeof(serial_no)) 567 return -EREMOTEIO; 568 569 dev_info(dev, "Diolan DLN2 serial %u\n", le32_to_cpu(serial_no)); 570 571 return 0; 572} 573 574static int dln2_hw_init(struct dln2_dev *dln2) 575{ 576 int ret; 577 578 ret = dln2_check_hw(dln2); 579 if (ret < 0) 580 return ret; 581 582 return dln2_print_serialno(dln2); 583} 584 585static void dln2_free_rx_urbs(struct dln2_dev *dln2) 586{ 587 int i; 588 589 for (i = 0; i < DLN2_MAX_URBS; i++) { 590 usb_free_urb(dln2->rx_urb[i]); 591 kfree(dln2->rx_buf[i]); 592 } 593} 594 595static void dln2_stop_rx_urbs(struct dln2_dev *dln2) 596{ 597 int i; 598 599 for (i = 0; i < DLN2_MAX_URBS; i++) 600 usb_kill_urb(dln2->rx_urb[i]); 601} 602 603static void dln2_free(struct dln2_dev *dln2) 604{ 605 dln2_free_rx_urbs(dln2); 606 usb_put_dev(dln2->usb_dev); 607 kfree(dln2); 608} 609 610static int dln2_setup_rx_urbs(struct dln2_dev *dln2, 611 struct usb_host_interface *hostif) 612{ 613 int i; 614 const int rx_max_size = DLN2_RX_BUF_SIZE; 615 616 for (i = 0; i < DLN2_MAX_URBS; i++) { 617 dln2->rx_buf[i] = kmalloc(rx_max_size, GFP_KERNEL); 618 if (!dln2->rx_buf[i]) 619 return -ENOMEM; 620 621 dln2->rx_urb[i] = usb_alloc_urb(0, GFP_KERNEL); 622 if (!dln2->rx_urb[i]) 623 return -ENOMEM; 624 625 usb_fill_bulk_urb(dln2->rx_urb[i], dln2->usb_dev, 626 usb_rcvbulkpipe(dln2->usb_dev, dln2->ep_in), 627 dln2->rx_buf[i], rx_max_size, dln2_rx, dln2); 628 } 629 630 return 0; 631} 632 633static int dln2_start_rx_urbs(struct dln2_dev *dln2, gfp_t gfp) 634{ 635 struct device *dev = &dln2->interface->dev; 636 int ret; 637 int i; 638 639 for (i = 0; i < DLN2_MAX_URBS; i++) { 640 ret = usb_submit_urb(dln2->rx_urb[i], gfp); 641 if (ret < 0) { 642 dev_err(dev, "failed to submit RX URB: %d\n", ret); 643 return ret; 644 } 645 } 646 647 return 0; 648} 649 650static struct dln2_platform_data dln2_pdata_gpio = { 651 .handle = DLN2_HANDLE_GPIO, 652}; 653 654/* Only one I2C port seems to be supported on current hardware */ 655static struct dln2_platform_data dln2_pdata_i2c = { 656 .handle = DLN2_HANDLE_I2C, 657 .port = 0, 658}; 659 660/* Only one SPI port supported */ 661static struct dln2_platform_data dln2_pdata_spi = { 662 .handle = DLN2_HANDLE_SPI, 663 .port = 0, 664}; 665 666static const struct mfd_cell dln2_devs[] = { 667 { 668 .name = "dln2-gpio", 669 .platform_data = &dln2_pdata_gpio, 670 .pdata_size = sizeof(struct dln2_platform_data), 671 }, 672 { 673 .name = "dln2-i2c", 674 .platform_data = &dln2_pdata_i2c, 675 .pdata_size = sizeof(struct dln2_platform_data), 676 }, 677 { 678 .name = "dln2-spi", 679 .platform_data = &dln2_pdata_spi, 680 .pdata_size = sizeof(struct dln2_platform_data), 681 }, 682}; 683 684static void dln2_stop(struct dln2_dev *dln2) 685{ 686 int i, j; 687 688 /* don't allow starting new transfers */ 689 spin_lock(&dln2->disconnect_lock); 690 dln2->disconnect = true; 691 spin_unlock(&dln2->disconnect_lock); 692 693 /* cancel in progress transfers */ 694 for (i = 0; i < DLN2_HANDLES; i++) { 695 struct dln2_mod_rx_slots *rxs = &dln2->mod_rx_slots[i]; 696 unsigned long flags; 697 698 spin_lock_irqsave(&rxs->lock, flags); 699 700 /* cancel all response waiters */ 701 for (j = 0; j < DLN2_MAX_RX_SLOTS; j++) { 702 struct dln2_rx_context *rxc = &rxs->slots[j]; 703 704 if (rxc->in_use) 705 complete(&rxc->done); 706 } 707 708 spin_unlock_irqrestore(&rxs->lock, flags); 709 } 710 711 /* wait for transfers to end */ 712 wait_event(dln2->disconnect_wq, !dln2->active_transfers); 713 714 dln2_stop_rx_urbs(dln2); 715} 716 717static void dln2_disconnect(struct usb_interface *interface) 718{ 719 struct dln2_dev *dln2 = usb_get_intfdata(interface); 720 721 dln2_stop(dln2); 722 723 mfd_remove_devices(&interface->dev); 724 725 dln2_free(dln2); 726} 727 728static int dln2_probe(struct usb_interface *interface, 729 const struct usb_device_id *usb_id) 730{ 731 struct usb_host_interface *hostif = interface->cur_altsetting; 732 struct device *dev = &interface->dev; 733 struct dln2_dev *dln2; 734 int ret; 735 int i, j; 736 737 if (hostif->desc.bInterfaceNumber != 0 || 738 hostif->desc.bNumEndpoints < 2) 739 return -ENODEV; 740 741 dln2 = kzalloc(sizeof(*dln2), GFP_KERNEL); 742 if (!dln2) 743 return -ENOMEM; 744 745 dln2->ep_out = hostif->endpoint[0].desc.bEndpointAddress; 746 dln2->ep_in = hostif->endpoint[1].desc.bEndpointAddress; 747 dln2->usb_dev = usb_get_dev(interface_to_usbdev(interface)); 748 dln2->interface = interface; 749 usb_set_intfdata(interface, dln2); 750 init_waitqueue_head(&dln2->disconnect_wq); 751 752 for (i = 0; i < DLN2_HANDLES; i++) { 753 init_waitqueue_head(&dln2->mod_rx_slots[i].wq); 754 spin_lock_init(&dln2->mod_rx_slots[i].lock); 755 for (j = 0; j < DLN2_MAX_RX_SLOTS; j++) 756 init_completion(&dln2->mod_rx_slots[i].slots[j].done); 757 } 758 759 spin_lock_init(&dln2->event_cb_lock); 760 spin_lock_init(&dln2->disconnect_lock); 761 INIT_LIST_HEAD(&dln2->event_cb_list); 762 763 ret = dln2_setup_rx_urbs(dln2, hostif); 764 if (ret) 765 goto out_free; 766 767 ret = dln2_start_rx_urbs(dln2, GFP_KERNEL); 768 if (ret) 769 goto out_stop_rx; 770 771 ret = dln2_hw_init(dln2); 772 if (ret < 0) { 773 dev_err(dev, "failed to initialize hardware\n"); 774 goto out_stop_rx; 775 } 776 777 ret = mfd_add_hotplug_devices(dev, dln2_devs, ARRAY_SIZE(dln2_devs)); 778 if (ret != 0) { 779 dev_err(dev, "failed to add mfd devices to core\n"); 780 goto out_stop_rx; 781 } 782 783 return 0; 784 785out_stop_rx: 786 dln2_stop_rx_urbs(dln2); 787 788out_free: 789 dln2_free(dln2); 790 791 return ret; 792} 793 794static int dln2_suspend(struct usb_interface *iface, pm_message_t message) 795{ 796 struct dln2_dev *dln2 = usb_get_intfdata(iface); 797 798 dln2_stop(dln2); 799 800 return 0; 801} 802 803static int dln2_resume(struct usb_interface *iface) 804{ 805 struct dln2_dev *dln2 = usb_get_intfdata(iface); 806 807 dln2->disconnect = false; 808 809 return dln2_start_rx_urbs(dln2, GFP_NOIO); 810} 811 812static const struct usb_device_id dln2_table[] = { 813 { USB_DEVICE(0xa257, 0x2013) }, 814 { } 815}; 816 817MODULE_DEVICE_TABLE(usb, dln2_table); 818 819static struct usb_driver dln2_driver = { 820 .name = "dln2", 821 .probe = dln2_probe, 822 .disconnect = dln2_disconnect, 823 .id_table = dln2_table, 824 .suspend = dln2_suspend, 825 .resume = dln2_resume, 826}; 827 828module_usb_driver(dln2_driver); 829 830MODULE_AUTHOR("Octavian Purdila <octavian.purdila@intel.com>"); 831MODULE_DESCRIPTION("Core driver for the Diolan DLN2 interface adapter"); 832MODULE_LICENSE("GPL v2"); 833