diff options
Diffstat (limited to 'drivers/media/dvb/siano/smsusb.c')
-rw-r--r-- | drivers/media/dvb/siano/smsusb.c | 75 |
1 files changed, 42 insertions, 33 deletions
diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c index 71c65f544c07..cb8a358b7310 100644 --- a/drivers/media/dvb/siano/smsusb.c +++ b/drivers/media/dvb/siano/smsusb.c | |||
@@ -1,23 +1,23 @@ | |||
1 | /* | 1 | /**************************************************************** |
2 | * Driver for the Siano SMS1xxx USB dongle | 2 | |
3 | * | 3 | Siano Mobile Silicon, Inc. |
4 | * author: Anatoly Greenblat | 4 | MDTV receiver kernel modules. |
5 | * | 5 | Copyright (C) 2005-2009, Uri Shkolnik, Anatoly Greenblat |
6 | * Copyright (c), 2005-2008 Siano Mobile Silicon, Inc. | 6 | |
7 | * | 7 | This program is free software: you can redistribute it and/or modify |
8 | * This program is free software; you can redistribute it and/or modify | 8 | it under the terms of the GNU General Public License as published by |
9 | * it under the terms of the GNU General Public License version 2 as | 9 | the Free Software Foundation, either version 2 of the License, or |
10 | * published by the Free Software Foundation; | 10 | (at your option) any later version. |
11 | * | 11 | |
12 | * Software distributed under the License is distributed on an "AS IS" | 12 | This program is distributed in the hope that it will be useful, |
13 | * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. | 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * | 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * See the GNU General Public License for more details. | 15 | GNU General Public License for more details. |
16 | * | 16 | |
17 | * You should have received a copy of the GNU General Public License | 17 | You should have received a copy of the GNU General Public License |
18 | * along with this program; if not, write to the Free Software | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. |
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 19 | |
20 | */ | 20 | ****************************************************************/ |
21 | 21 | ||
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/init.h> | 23 | #include <linux/init.h> |
@@ -26,6 +26,7 @@ | |||
26 | 26 | ||
27 | #include "smscoreapi.h" | 27 | #include "smscoreapi.h" |
28 | #include "sms-cards.h" | 28 | #include "sms-cards.h" |
29 | #include "smsendian.h" | ||
29 | 30 | ||
30 | static int sms_dbg; | 31 | static int sms_dbg; |
31 | module_param_named(debug, sms_dbg, int, 0644); | 32 | module_param_named(debug, sms_dbg, int, 0644); |
@@ -64,15 +65,16 @@ static void smsusb_onresponse(struct urb *urb) | |||
64 | struct smsusb_urb_t *surb = (struct smsusb_urb_t *) urb->context; | 65 | struct smsusb_urb_t *surb = (struct smsusb_urb_t *) urb->context; |
65 | struct smsusb_device_t *dev = surb->dev; | 66 | struct smsusb_device_t *dev = surb->dev; |
66 | 67 | ||
67 | if (urb->status < 0) { | 68 | if (urb->status == -ESHUTDOWN) { |
68 | sms_err("error, urb status %d, %d bytes", | 69 | sms_err("error, urb status %d (-ESHUTDOWN), %d bytes", |
69 | urb->status, urb->actual_length); | 70 | urb->status, urb->actual_length); |
70 | return; | 71 | return; |
71 | } | 72 | } |
72 | 73 | ||
73 | if (urb->actual_length > 0) { | 74 | if ((urb->actual_length > 0) && (urb->status == 0)) { |
74 | struct SmsMsgHdr_ST *phdr = (struct SmsMsgHdr_ST *) surb->cb->p; | 75 | struct SmsMsgHdr_ST *phdr = (struct SmsMsgHdr_ST *)surb->cb->p; |
75 | 76 | ||
77 | smsendian_handle_message_header(phdr); | ||
76 | if (urb->actual_length >= phdr->msgLength) { | 78 | if (urb->actual_length >= phdr->msgLength) { |
77 | surb->cb->size = phdr->msgLength; | 79 | surb->cb->size = phdr->msgLength; |
78 | 80 | ||
@@ -109,7 +111,10 @@ static void smsusb_onresponse(struct urb *urb) | |||
109 | "msglen %d actual %d", | 111 | "msglen %d actual %d", |
110 | phdr->msgLength, urb->actual_length); | 112 | phdr->msgLength, urb->actual_length); |
111 | } | 113 | } |
112 | } | 114 | } else |
115 | sms_err("error, urb status %d, %d bytes", | ||
116 | urb->status, urb->actual_length); | ||
117 | |||
113 | 118 | ||
114 | exit_and_resubmit: | 119 | exit_and_resubmit: |
115 | smsusb_submit_urb(dev, surb); | 120 | smsusb_submit_urb(dev, surb); |
@@ -176,6 +181,7 @@ static int smsusb_sendrequest(void *context, void *buffer, size_t size) | |||
176 | struct smsusb_device_t *dev = (struct smsusb_device_t *) context; | 181 | struct smsusb_device_t *dev = (struct smsusb_device_t *) context; |
177 | int dummy; | 182 | int dummy; |
178 | 183 | ||
184 | smsendian_handle_message_header((struct SmsMsgHdr_ST *)buffer); | ||
179 | return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), | 185 | return usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, 2), |
180 | buffer, size, &dummy, 1000); | 186 | buffer, size, &dummy, 1000); |
181 | } | 187 | } |
@@ -333,8 +339,8 @@ static int smsusb_init_device(struct usb_interface *intf, int board_id) | |||
333 | case SMS_VEGA: | 339 | case SMS_VEGA: |
334 | dev->buffer_size = USB2_BUFFER_SIZE; | 340 | dev->buffer_size = USB2_BUFFER_SIZE; |
335 | dev->response_alignment = | 341 | dev->response_alignment = |
336 | dev->udev->ep_in[1]->desc.wMaxPacketSize - | 342 | le16_to_cpu(dev->udev->ep_in[1]->desc.wMaxPacketSize) - |
337 | sizeof(struct SmsMsgHdr_ST); | 343 | sizeof(struct SmsMsgHdr_ST); |
338 | 344 | ||
339 | params.flags |= SMS_DEVICE_FAMILY2; | 345 | params.flags |= SMS_DEVICE_FAMILY2; |
340 | break; | 346 | break; |
@@ -479,7 +485,6 @@ static int smsusb_resume(struct usb_interface *intf) | |||
479 | } | 485 | } |
480 | 486 | ||
481 | struct usb_device_id smsusb_id_table[] = { | 487 | struct usb_device_id smsusb_id_table[] = { |
482 | #ifdef CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS | ||
483 | { USB_DEVICE(0x187f, 0x0010), | 488 | { USB_DEVICE(0x187f, 0x0010), |
484 | .driver_info = SMS1XXX_BOARD_SIANO_STELLAR }, | 489 | .driver_info = SMS1XXX_BOARD_SIANO_STELLAR }, |
485 | { USB_DEVICE(0x187f, 0x0100), | 490 | { USB_DEVICE(0x187f, 0x0100), |
@@ -490,7 +495,6 @@ struct usb_device_id smsusb_id_table[] = { | |||
490 | .driver_info = SMS1XXX_BOARD_SIANO_NOVA_B }, | 495 | .driver_info = SMS1XXX_BOARD_SIANO_NOVA_B }, |
491 | { USB_DEVICE(0x187f, 0x0300), | 496 | { USB_DEVICE(0x187f, 0x0300), |
492 | .driver_info = SMS1XXX_BOARD_SIANO_VEGA }, | 497 | .driver_info = SMS1XXX_BOARD_SIANO_VEGA }, |
493 | #endif | ||
494 | { USB_DEVICE(0x2040, 0x1700), | 498 | { USB_DEVICE(0x2040, 0x1700), |
495 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_CATAMOUNT }, | 499 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_CATAMOUNT }, |
496 | { USB_DEVICE(0x2040, 0x1800), | 500 | { USB_DEVICE(0x2040, 0x1800), |
@@ -521,8 +525,13 @@ struct usb_device_id smsusb_id_table[] = { | |||
521 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, | 525 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, |
522 | { USB_DEVICE(0x2040, 0x5590), | 526 | { USB_DEVICE(0x2040, 0x5590), |
523 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, | 527 | .driver_info = SMS1XXX_BOARD_HAUPPAUGE_WINDHAM }, |
524 | { } /* Terminating entry */ | 528 | { USB_DEVICE(0x187f, 0x0202), |
525 | }; | 529 | .driver_info = SMS1XXX_BOARD_SIANO_NICE }, |
530 | { USB_DEVICE(0x187f, 0x0301), | ||
531 | .driver_info = SMS1XXX_BOARD_SIANO_VENICE }, | ||
532 | { } /* Terminating entry */ | ||
533 | }; | ||
534 | |||
526 | MODULE_DEVICE_TABLE(usb, smsusb_id_table); | 535 | MODULE_DEVICE_TABLE(usb, smsusb_id_table); |
527 | 536 | ||
528 | static struct usb_driver smsusb_driver = { | 537 | static struct usb_driver smsusb_driver = { |
@@ -548,14 +557,14 @@ int smsusb_module_init(void) | |||
548 | 557 | ||
549 | void smsusb_module_exit(void) | 558 | void smsusb_module_exit(void) |
550 | { | 559 | { |
551 | sms_debug(""); | ||
552 | /* Regular USB Cleanup */ | 560 | /* Regular USB Cleanup */ |
553 | usb_deregister(&smsusb_driver); | 561 | usb_deregister(&smsusb_driver); |
562 | sms_info("end"); | ||
554 | } | 563 | } |
555 | 564 | ||
556 | module_init(smsusb_module_init); | 565 | module_init(smsusb_module_init); |
557 | module_exit(smsusb_module_exit); | 566 | module_exit(smsusb_module_exit); |
558 | 567 | ||
559 | MODULE_DESCRIPTION("Driver for the Siano SMS1XXX USB dongle"); | 568 | MODULE_DESCRIPTION("Driver for the Siano SMS1xxx USB dongle"); |
560 | MODULE_AUTHOR("Siano Mobile Silicon, INC. (uris@siano-ms.com)"); | 569 | MODULE_AUTHOR("Siano Mobile Silicon, INC. (uris@siano-ms.com)"); |
561 | MODULE_LICENSE("GPL"); | 570 | MODULE_LICENSE("GPL"); |