staging: fusb302: don't bitshift __le16 type
authorFrans Klaver <fransklaver@gmail.com>
Fri, 16 Jun 2017 17:45:56 +0000 (19:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Jun 2017 16:47:59 +0000 (18:47 +0200)
The header field in struct pd_message is declared as an __le16 type. The
data in the message is supposed to be little endian. This means we don't
have to go and shift the individual bytes into position when we're
filling the buffer, we can just copy the contents right away. As an
added benefit we don't get fishy results on big endian systems anymore.

Signed-off-by: Frans Klaver <fransklaver@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/typec/fusb302/fusb302.c

index 4a356e509fe450b4260ac3b49ec001d4fa9aea7a..03a3809d18f0a6607557ea29926472c7f4d34442 100644 (file)
@@ -1039,8 +1039,8 @@ static int fusb302_pd_send_message(struct fusb302_chip *chip,
        }
        /* packsym tells the FUSB302 chip that the next X bytes are payload */
        buf[pos++] = FUSB302_TKN_PACKSYM | (len & 0x1F);
-       buf[pos++] = msg->header & 0xFF;
-       buf[pos++] = (msg->header >> 8) & 0xFF;
+       memcpy(&buf[pos], &msg->header, sizeof(msg->header));
+       pos += sizeof(msg->header);
 
        len -= 2;
        memcpy(&buf[pos], msg->payload, len);