diff options
| author | Jan Dumon <j.dumon@option.com> | 2009-04-01 18:59:07 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-04-02 19:31:44 -0400 |
| commit | 0de8ca597d7b449e9e7ce7af138944acf06c8f05 (patch) | |
| tree | 61832daec73548b13a2003517900952105fff763 | |
| parent | 3b7d2b319db0ba1f6208ca58b297fb419301f85a (diff) | |
hso: fix for the 'invalid frame length' messages
Some devices cannot send very short usb transfers. To get around this the
firmware adds a known pattern and flags the driver that it should check for
this pattern on short transfers. This flag was not taken into account by
the driver.
Signed-off-by: Jan Dumon <j.dumon@option.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/usb/hso.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c index 779a0078fcde..f84b78d94c40 100644 --- a/drivers/net/usb/hso.c +++ b/drivers/net/usb/hso.c | |||
| @@ -2536,14 +2536,15 @@ static void hso_create_rfkill(struct hso_device *hso_dev, | |||
| 2536 | } | 2536 | } |
| 2537 | 2537 | ||
| 2538 | /* Creates our network device */ | 2538 | /* Creates our network device */ |
| 2539 | static struct hso_device *hso_create_net_device(struct usb_interface *interface) | 2539 | static struct hso_device *hso_create_net_device(struct usb_interface *interface, |
| 2540 | int port_spec) | ||
| 2540 | { | 2541 | { |
| 2541 | int result, i; | 2542 | int result, i; |
| 2542 | struct net_device *net; | 2543 | struct net_device *net; |
| 2543 | struct hso_net *hso_net; | 2544 | struct hso_net *hso_net; |
| 2544 | struct hso_device *hso_dev; | 2545 | struct hso_device *hso_dev; |
| 2545 | 2546 | ||
| 2546 | hso_dev = hso_create_device(interface, HSO_INTF_MUX | HSO_PORT_NETWORK); | 2547 | hso_dev = hso_create_device(interface, port_spec); |
| 2547 | if (!hso_dev) | 2548 | if (!hso_dev) |
| 2548 | return NULL; | 2549 | return NULL; |
| 2549 | 2550 | ||
| @@ -2943,7 +2944,8 @@ static int hso_probe(struct usb_interface *interface, | |||
| 2943 | if ((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) { | 2944 | if ((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) { |
| 2944 | /* Create the network device */ | 2945 | /* Create the network device */ |
| 2945 | if (!disable_net) { | 2946 | if (!disable_net) { |
| 2946 | hso_dev = hso_create_net_device(interface); | 2947 | hso_dev = hso_create_net_device(interface, |
| 2948 | port_spec); | ||
| 2947 | if (!hso_dev) | 2949 | if (!hso_dev) |
| 2948 | goto exit; | 2950 | goto exit; |
| 2949 | tmp_dev = hso_dev; | 2951 | tmp_dev = hso_dev; |
| @@ -2975,7 +2977,7 @@ static int hso_probe(struct usb_interface *interface, | |||
| 2975 | /* It's a regular bulk interface */ | 2977 | /* It's a regular bulk interface */ |
| 2976 | if (((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) | 2978 | if (((port_spec & HSO_PORT_MASK) == HSO_PORT_NETWORK) |
| 2977 | && !disable_net) | 2979 | && !disable_net) |
| 2978 | hso_dev = hso_create_net_device(interface); | 2980 | hso_dev = hso_create_net_device(interface, port_spec); |
| 2979 | else | 2981 | else |
| 2980 | hso_dev = | 2982 | hso_dev = |
| 2981 | hso_create_bulk_serial_device(interface, port_spec); | 2983 | hso_create_bulk_serial_device(interface, port_spec); |
