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); |