diff options
| author | Brian Niebuhr <bniebuhr3@gmail.com> | 2010-01-25 15:45:40 -0500 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-02-16 18:11:10 -0500 |
| commit | 31e5d4abceaa3d11ff583ddf76ec292e90eacb7d (patch) | |
| tree | b5a8132979a4fb5bcfc07f9f2409828e6081cc16 | |
| parent | dd091c7b3280d4811b855d034fa91519fd3485ef (diff) | |
USB: gadget: fix EEM gadget CRC usage
eem_wrap() is sending a sentinel CRC, but it didn't indicate that to
the host, it should zero bit 14 (bmCRC) in the EEM packet header,
instead of setting it.
Also remove a redundant crc calculation in eem_unwrap().
Signed-off-by: Steve Longerbeam <stevel@netspectrum.com>
Acked-by: Brian Niebuhr <bniebuhr@efjohnson.com>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | drivers/usb/gadget/f_eem.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/drivers/usb/gadget/f_eem.c b/drivers/usb/gadget/f_eem.c index 0a577d5694fd..d4f0db58a8ad 100644 --- a/drivers/usb/gadget/f_eem.c +++ b/drivers/usb/gadget/f_eem.c | |||
| @@ -358,7 +358,7 @@ done: | |||
| 358 | * b15: bmType (0 == data) | 358 | * b15: bmType (0 == data) |
| 359 | */ | 359 | */ |
| 360 | len = skb->len; | 360 | len = skb->len; |
| 361 | put_unaligned_le16((len & 0x3FFF) | BIT(14), skb_push(skb, 2)); | 361 | put_unaligned_le16(len & 0x3FFF, skb_push(skb, 2)); |
| 362 | 362 | ||
| 363 | /* add a zero-length EEM packet, if needed */ | 363 | /* add a zero-length EEM packet, if needed */ |
| 364 | if (padlen) | 364 | if (padlen) |
| @@ -464,7 +464,6 @@ static int eem_unwrap(struct gether *port, | |||
| 464 | } | 464 | } |
| 465 | 465 | ||
| 466 | /* validate CRC */ | 466 | /* validate CRC */ |
| 467 | crc = get_unaligned_le32(skb->data + len - ETH_FCS_LEN); | ||
| 468 | if (header & BIT(14)) { | 467 | if (header & BIT(14)) { |
| 469 | crc = get_unaligned_le32(skb->data + len | 468 | crc = get_unaligned_le32(skb->data + len |
| 470 | - ETH_FCS_LEN); | 469 | - ETH_FCS_LEN); |
