| OLD | NEW |
| 1 /* qmidevice.c - gobi QMI device | 1 /* qmidevice.c - gobi QMI device |
| 2 * Copyright (c) 2010, Code Aurora Forum. All rights reserved. | 2 * Copyright (c) 2010, Code Aurora Forum. All rights reserved. |
| 3 | 3 |
| 4 * This program is free software; you can redistribute it and/or modify | 4 * This program is free software; you can redistribute it and/or modify |
| 5 * it under the terms of the GNU General Public License version 2 and | 5 * it under the terms of the GNU General Public License version 2 and |
| 6 * only version 2 as published by the Free Software Foundation. | 6 * only version 2 as published by the Free Software Foundation. |
| 7 | 7 |
| 8 * This program is distributed in the hope that it will be useful, | 8 * This program is distributed in the hope that it will be useful, |
| 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 if (urb->status) { | 158 if (urb->status) { |
| 159 DBG("Read status = %d\n", urb->status); | 159 DBG("Read status = %d\n", urb->status); |
| 160 return; | 160 return; |
| 161 } | 161 } |
| 162 | 162 |
| 163 DBG("Read %d bytes\n", urb->actual_length); | 163 DBG("Read %d bytes\n", urb->actual_length); |
| 164 | 164 |
| 165 data = urb->transfer_buffer; | 165 data = urb->transfer_buffer; |
| 166 size = urb->actual_length; | 166 size = urb->actual_length; |
| 167 | 167 |
| 168 » print_hex_dump(KERN_INFO, "QCUSBNet2k: ", DUMP_PREFIX_OFFSET, | 168 » print_hex_dump(KERN_INFO, "gobi-read: ", DUMP_PREFIX_OFFSET, |
| 169 16, 1, data, size, true); | 169 16, 1, data, size, true); |
| 170 | 170 |
| 171 result = qmux_parse(&cid, data, size); | 171 result = qmux_parse(&cid, data, size); |
| 172 if (result < 0) { | 172 if (result < 0) { |
| 173 DBG("Read error parsing QMUX %d\n", result); | 173 DBG("Read error parsing QMUX %d\n", result); |
| 174 return; | 174 return; |
| 175 } | 175 } |
| 176 | 176 |
| 177 if (size < result + 3) { | 177 if (size < result + 3) { |
| 178 DBG("Data buffer too small to parse\n"); | 178 DBG("Data buffer too small to parse\n"); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 if ((*(u32 *)(urb->transfer_buffer + 8) == 0) || | 247 if ((*(u32 *)(urb->transfer_buffer + 8) == 0) || |
| 248 (*(u32 *)(urb->transfer_buffer + 12) == 0)) { | 248 (*(u32 *)(urb->transfer_buffer + 12) == 0)) { |
| 249 qc_setdown(dev, DOWN_CDC_CONNECTION_SPEED); | 249 qc_setdown(dev, DOWN_CDC_CONNECTION_SPEED); |
| 250 DBG("traffic stopping due to CONNECTION_SPEED_CH
ANGE\n"); | 250 DBG("traffic stopping due to CONNECTION_SPEED_CH
ANGE\n"); |
| 251 } else { | 251 } else { |
| 252 qc_cleardown(dev, DOWN_CDC_CONNECTION_SPEED); | 252 qc_cleardown(dev, DOWN_CDC_CONNECTION_SPEED); |
| 253 DBG("resuming traffic due to CONNECTION_SPEED_CH
ANGE\n"); | 253 DBG("resuming traffic due to CONNECTION_SPEED_CH
ANGE\n"); |
| 254 } | 254 } |
| 255 } else { | 255 } else { |
| 256 DBG("ignoring invalid interrupt in packet\n"); | 256 DBG("ignoring invalid interrupt in packet\n"); |
| 257 » » » print_hex_dump(KERN_INFO, "QCUSBNet2k: ", | 257 » » » print_hex_dump(KERN_INFO, "gobi-int: ", |
| 258 DUMP_PREFIX_OFFSET, 16, 1, | 258 DUMP_PREFIX_OFFSET, 16, 1, |
| 259 urb->transfer_buffer, | 259 urb->transfer_buffer, |
| 260 urb->actual_length, true); | 260 urb->actual_length, true); |
| 261 } | 261 } |
| 262 } | 262 } |
| 263 | 263 |
| 264 interval = (dev->usbnet->udev->speed == USB_SPEED_HIGH) ? 7 : 3; | 264 interval = (dev->usbnet->udev->speed == USB_SPEED_HIGH) ? 7 : 3; |
| 265 | 265 |
| 266 usb_fill_int_urb(urb, urb->dev, urb->pipe, urb->transfer_buffer, | 266 usb_fill_int_urb(urb, urb->dev, urb->pipe, urb->transfer_buffer, |
| 267 urb->transfer_buffer_length, urb->complete, | 267 urb->transfer_buffer_length, urb->complete, |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 setup.index = 0; | 515 setup.index = 0; |
| 516 setup.len = 0; | 516 setup.len = 0; |
| 517 setup.len = size; | 517 setup.len = size; |
| 518 | 518 |
| 519 usb_fill_control_urb(urb, dev->usbnet->udev, | 519 usb_fill_control_urb(urb, dev->usbnet->udev, |
| 520 usb_sndctrlpipe(dev->usbnet->udev, 0), | 520 usb_sndctrlpipe(dev->usbnet->udev, 0), |
| 521 (unsigned char *)&setup, (void *)buf, size, | 521 (unsigned char *)&setup, (void *)buf, size, |
| 522 NULL, dev); | 522 NULL, dev); |
| 523 | 523 |
| 524 DBG("Actual Write:\n"); | 524 DBG("Actual Write:\n"); |
| 525 » print_hex_dump(KERN_INFO, "QCUSBNet2k: ", DUMP_PREFIX_OFFSET, | 525 » print_hex_dump(KERN_INFO, "gobi-write: ", DUMP_PREFIX_OFFSET, |
| 526 16, 1, buf, size, true); | 526 16, 1, buf, size, true); |
| 527 | 527 |
| 528 sema_init(&sem, 0); | 528 sema_init(&sem, 0); |
| 529 | 529 |
| 530 urb->complete = write_callback; | 530 urb->complete = write_callback; |
| 531 urb->context = &sem; | 531 urb->context = &sem; |
| 532 | 532 |
| 533 result = usb_autopm_get_interface(dev->iface); | 533 result = usb_autopm_get_interface(dev->iface); |
| 534 if (result < 0) { | 534 if (result < 0) { |
| 535 DBG("unable to resume interface: %d\n", result); | 535 DBG("unable to resume interface: %d\n", result); |
| (...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 return -ENXIO; | 1262 return -ENXIO; |
| 1263 } | 1263 } |
| 1264 name += strlen("usb"); | 1264 name += strlen("usb"); |
| 1265 qmiidx = simple_strtoul(name, NULL, 10); | 1265 qmiidx = simple_strtoul(name, NULL, 10); |
| 1266 if (qmiidx < 0) { | 1266 if (qmiidx < 0) { |
| 1267 DBG("Bad minor number\n"); | 1267 DBG("Bad minor number\n"); |
| 1268 return -ENXIO; | 1268 return -ENXIO; |
| 1269 } | 1269 } |
| 1270 | 1270 |
| 1271 printk(KERN_INFO "creating qcqmi%d\n", qmiidx); | 1271 printk(KERN_INFO "creating qcqmi%d\n", qmiidx); |
| 1272 » device_create(dev->qmi.devclass, NULL, devno, NULL, "qcqmi%d", qmiidx); | 1272 » device_create(dev->qmi.devclass, &dev->iface->dev, devno, NULL, "qcqmi%d
", qmiidx); |
| 1273 | 1273 |
| 1274 dev->qmi.devnum = devno; | 1274 dev->qmi.devnum = devno; |
| 1275 return 0; | 1275 return 0; |
| 1276 } | 1276 } |
| 1277 | 1277 |
| 1278 void qc_deregister(struct qcusbnet *dev) | 1278 void qc_deregister(struct qcusbnet *dev) |
| 1279 { | 1279 { |
| 1280 struct list_head *node, *tmp; | 1280 struct list_head *node, *tmp; |
| 1281 struct client *client; | 1281 struct client *client; |
| 1282 struct inode *inode; | 1282 struct inode *inode; |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 DBG("bad get MEID resp\n"); | 1583 DBG("bad get MEID resp\n"); |
| 1584 memset(&dev->meid[0], '0', 14); | 1584 memset(&dev->meid[0], '0', 14); |
| 1585 } | 1585 } |
| 1586 | 1586 |
| 1587 client_free(dev, cid); | 1587 client_free(dev, cid); |
| 1588 return 0; | 1588 return 0; |
| 1589 } | 1589 } |
| 1590 | 1590 |
| 1591 module_param(qcusbnet2k_fwdelay, int, S_IRUGO | S_IWUSR); | 1591 module_param(qcusbnet2k_fwdelay, int, S_IRUGO | S_IWUSR); |
| 1592 MODULE_PARM_DESC(qcusbnet2k_fwdelay, "Delay for old firmware"); | 1592 MODULE_PARM_DESC(qcusbnet2k_fwdelay, "Delay for old firmware"); |
| OLD | NEW |