Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 220319
b: refs/heads/master
c: 47873d3
h: refs/heads/master
i:
  220317: 4122ea6
  220315: c27bb35
  220311: 47ee192
  220303: 2500398
  220287: 57703bb
v: v3
  • Loading branch information
Marek Belisko authored and Greg Kroah-Hartman committed Oct 14, 2010
1 parent d4cb7d1 commit 00a53d3
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 87 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3d97ca7f3672732ac8ffe567a33873303d2c6741
refs/heads/master: 47873d331cb94d63780644b1e5e0d331c2f2e634
165 changes: 79 additions & 86 deletions trunk/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,64 +22,62 @@ MODULE_DESCRIPTION("FT1000 EXPRESS CARD DRIVER");
MODULE_LICENSE("Dual MPL/GPL");
MODULE_SUPPORTED_DEVICE("QFT FT1000 Express Cards");


void *pFileStart;
size_t FileLength;

#define VENDOR_ID 0x1291 /* Qualcomm vendor id */
#define PRODUCT_ID 0x11 /* fake product id */
#define VENDOR_ID 0x1291 /* Qualcomm vendor id */
#define PRODUCT_ID 0x11 /* fake product id */

/* table of devices that work with this driver */
static struct usb_device_id id_table[] = {
{USB_DEVICE(VENDOR_ID, PRODUCT_ID)},
{ },
{USB_DEVICE(VENDOR_ID, PRODUCT_ID)},
{},
};

MODULE_DEVICE_TABLE(usb, id_table);

static BOOLEAN gPollingfailed = FALSE;
int ft1000_poll_thread(void *arg)
{
int ret = STATUS_SUCCESS;

while (!kthread_should_stop()) {
msleep(10);
if (!gPollingfailed) {
ret = ft1000_poll(arg);
if (ret != STATUS_SUCCESS) {
DEBUG("ft1000_poll_thread: polling failed\n");
gPollingfailed = TRUE;
}
}
}
int ret = STATUS_SUCCESS;

while (!kthread_should_stop()) {
msleep(10);
if (!gPollingfailed) {
ret = ft1000_poll(arg);
if (ret != STATUS_SUCCESS) {
DEBUG("ft1000_poll_thread: polling failed\n");
gPollingfailed = TRUE;
}
}
}
return STATUS_SUCCESS;
}

static int ft1000_probe(struct usb_interface *interface,
const struct usb_device_id *id)
{
struct usb_host_interface *iface_desc;
struct usb_endpoint_descriptor *endpoint;
struct usb_device *dev;
unsigned numaltsetting;
struct usb_host_interface *iface_desc;
struct usb_endpoint_descriptor *endpoint;
struct usb_device *dev;
unsigned numaltsetting;
int i, ret = 0, size;

struct ft1000_device *ft1000dev;
FT1000_INFO *pft1000info;
struct ft1000_device *ft1000dev;
FT1000_INFO *pft1000info;
const struct firmware *dsp_fw;


ft1000dev = kmalloc(sizeof(struct ft1000_device), GFP_KERNEL);

if (!ft1000dev) {
printk(KERN_ERR "out of memory allocating device structure\n");
return 0;
}

memset(ft1000dev, 0, sizeof(*ft1000dev));
memset(ft1000dev, 0, sizeof(*ft1000dev));

dev = interface_to_usbdev(interface);
DEBUG("ft1000_probe: usb device descriptor info:\n");
dev = interface_to_usbdev(interface);
DEBUG("ft1000_probe: usb device descriptor info:\n");
DEBUG("ft1000_probe: number of configuration is %d\n",
dev->descriptor.bNumConfigurations);

Expand All @@ -90,11 +88,10 @@ static int ft1000_probe(struct usb_interface *interface,
ft1000dev->tx_urb = usb_alloc_urb(0, GFP_ATOMIC);
ft1000dev->rx_urb = usb_alloc_urb(0, GFP_ATOMIC);


DEBUG("ft1000_probe is called\n");
numaltsetting = interface->num_altsetting;
DEBUG("ft1000_probe: number of alt settings is :%d\n", numaltsetting);
iface_desc = interface->cur_altsetting;
DEBUG("ft1000_probe is called\n");
numaltsetting = interface->num_altsetting;
DEBUG("ft1000_probe: number of alt settings is :%d\n", numaltsetting);
iface_desc = interface->cur_altsetting;
DEBUG("ft1000_probe: number of endpoints is %d\n",
iface_desc->desc.bNumEndpoints);
DEBUG("ft1000_probe: descriptor type is %d\n",
Expand All @@ -105,26 +102,26 @@ static int ft1000_probe(struct usb_interface *interface,
iface_desc->desc.bAlternateSetting);
DEBUG("ft1000_probe: interface class is %d\n",
iface_desc->desc.bInterfaceClass);
DEBUG("ft1000_probe: control endpoint info:\n");
DEBUG("ft1000_probe: control endpoint info:\n");
DEBUG("ft1000_probe: descriptor0 type -- %d\n",
iface_desc->endpoint[0].desc.bmAttributes);
DEBUG("ft1000_probe: descriptor1 type -- %d\n",
iface_desc->endpoint[1].desc.bmAttributes);
DEBUG("ft1000_probe: descriptor2 type -- %d\n",
iface_desc->endpoint[2].desc.bmAttributes);

for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
for (i = 0; i < iface_desc->desc.bNumEndpoints; i++) {
endpoint =
(struct usb_endpoint_descriptor *)&iface_desc->endpoint[i].
desc;
DEBUG("endpoint %d\n", i);
(struct usb_endpoint_descriptor *)&iface_desc->
endpoint[i].desc;
DEBUG("endpoint %d\n", i);
DEBUG("bEndpointAddress=%x, bmAttributes=%x\n",
endpoint->bEndpointAddress, endpoint->bmAttributes);
if ((endpoint->bEndpointAddress & USB_DIR_IN)
&& ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
USB_ENDPOINT_XFER_BULK)) {
ft1000dev->bulk_in_endpointAddr =
endpoint->bEndpointAddress;
endpoint->bEndpointAddress;
DEBUG("ft1000_probe: in: %d\n",
endpoint->bEndpointAddress);
}
Expand All @@ -133,11 +130,11 @@ static int ft1000_probe(struct usb_interface *interface,
&& ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
USB_ENDPOINT_XFER_BULK)) {
ft1000dev->bulk_out_endpointAddr =
endpoint->bEndpointAddress;
endpoint->bEndpointAddress;
DEBUG("ft1000_probe: out: %d\n",
endpoint->bEndpointAddress);
}
}
}

DEBUG("bulk_in=%d, bulk_out=%d\n", ft1000dev->bulk_in_endpointAddr,
ft1000dev->bulk_out_endpointAddr);
Expand All @@ -161,9 +158,9 @@ static int ft1000_probe(struct usb_interface *interface,
FileLength = dsp_fw->size;
release_firmware(dsp_fw);

DEBUG("ft1000_probe: start downloading dsp image...\n");
init_ft1000_netdev(ft1000dev);
pft1000info = (FT1000_INFO *) netdev_priv(ft1000dev->net);
DEBUG("ft1000_probe: start downloading dsp image...\n");
init_ft1000_netdev(ft1000dev);
pft1000info = (FT1000_INFO *) netdev_priv(ft1000dev->net);

DEBUG("In probe: pft1000info=%p\n", pft1000info);
ret = dsp_reload(ft1000dev);
Expand All @@ -188,16 +185,15 @@ static int ft1000_probe(struct usb_interface *interface,
DEBUG("ft1000_probe::Waiting for Card Ready\n");
}

DEBUG("ft1000_probe::Card Ready!!!! Registering network device\n");

DEBUG("ft1000_probe::Card Ready!!!! Registering network device\n");

reg_ft1000_netdev(ft1000dev, interface);
reg_ft1000_netdev(ft1000dev, interface);

pft1000info->NetDevRegDone = 1;
pft1000info->NetDevRegDone = 1;

ft1000InitProc(ft1000dev->net);
ft1000InitProc(ft1000dev->net);

return 0;
return 0;

err_load:
kfree(pFileStart);
Expand All @@ -208,70 +204,67 @@ static int ft1000_probe(struct usb_interface *interface,

static void ft1000_disconnect(struct usb_interface *interface)
{
FT1000_INFO *pft1000info;
FT1000_INFO *pft1000info;

DEBUG("ft1000_disconnect is called\n");
DEBUG("ft1000_disconnect is called\n");

pft1000info = (PFT1000_INFO)usb_get_intfdata(interface);
pft1000info = (PFT1000_INFO) usb_get_intfdata(interface);
DEBUG("In disconnect pft1000info=%p\n", pft1000info);



if (pft1000info) {
if (pft1000info) {
ft1000CleanupProc(pft1000info);
if (pft1000info->pPollThread)
kthread_stop(pft1000info->pPollThread );
if (pft1000info->pPollThread)
kthread_stop(pft1000info->pPollThread);

DEBUG("ft1000_disconnect: threads are terminated\n");
DEBUG("ft1000_disconnect: threads are terminated\n");

if (pft1000info->pFt1000Dev->net) {
DEBUG("ft1000_disconnect: destroy char driver\n");
ft1000_DestroyDevice(pft1000info->pFt1000Dev->net);
unregister_netdev(pft1000info->pFt1000Dev->net);
DEBUG("ft1000_disconnect: network device unregisterd\n");
free_netdev(pft1000info->pFt1000Dev->net);
if (pft1000info->pFt1000Dev->net) {
DEBUG("ft1000_disconnect: destroy char driver\n");
ft1000_DestroyDevice(pft1000info->pFt1000Dev->net);
unregister_netdev(pft1000info->pFt1000Dev->net);
DEBUG
("ft1000_disconnect: network device unregisterd\n");
free_netdev(pft1000info->pFt1000Dev->net);

}
}

usb_free_urb(pft1000info->pFt1000Dev->rx_urb);
usb_free_urb(pft1000info->pFt1000Dev->tx_urb);
usb_free_urb(pft1000info->pFt1000Dev->rx_urb);
usb_free_urb(pft1000info->pFt1000Dev->tx_urb);

DEBUG("ft1000_disconnect: urb freed\n");
DEBUG("ft1000_disconnect: urb freed\n");

kfree(pft1000info->pFt1000Dev);
}
}
kfree(pFileStart);

return;
return;
}

static struct usb_driver ft1000_usb_driver = {
.name = "ft1000usb",
.probe = ft1000_probe,
.disconnect = ft1000_disconnect,
.id_table = id_table,
.name = "ft1000usb",
.probe = ft1000_probe,
.disconnect = ft1000_disconnect,
.id_table = id_table,
};

static int __init usb_ft1000_init(void)
{
int ret = 0;
int ret = 0;

DEBUG("Initialize and register the driver\n");
DEBUG("Initialize and register the driver\n");

ret = usb_register(&ft1000_usb_driver);
if (ret)
err("usb_register failed. Error number %d", ret);
ret = usb_register(&ft1000_usb_driver);
if (ret)
err("usb_register failed. Error number %d", ret);

return ret;
return ret;
}

static void __exit usb_ft1000_exit(void)
{
DEBUG("Deregister the driver\n");
usb_deregister(&ft1000_usb_driver);
DEBUG("Deregister the driver\n");
usb_deregister(&ft1000_usb_driver);
}

module_init (usb_ft1000_init);
module_exit (usb_ft1000_exit);


module_init(usb_ft1000_init);
module_exit(usb_ft1000_exit);

0 comments on commit 00a53d3

Please sign in to comment.