OSDN Git Service

ALSA: usb-audio: Annotate endianess in Scarlett gen2 quirk
authorTakashi Iwai <tiwai@suse.de>
Sat, 1 Feb 2020 08:05:29 +0000 (09:05 +0100)
committerTakashi Iwai <tiwai@suse.de>
Sat, 1 Feb 2020 08:06:24 +0000 (09:06 +0100)
The Scarlett gen2 mixer quirk code defines a few record types to
communicate via USB hub, and those must be all little-endian.
This patch changes the field types to LE to annotate endianess
properly.  It also fixes the incorrect usage of leXX_to_cpu() in a
couple of places, which was caught by sparse after this change.

Fixes: 9e4d5c1be21f ("ALSA: usb-audio: Scarlett Gen 2 mixer interface")
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20200201080530.22390-2-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/mixer_scarlett_gen2.c

index 94b903d..74c00c9 100644 (file)
@@ -558,11 +558,11 @@ static const struct scarlett2_config
 
 /* proprietary request/response format */
 struct scarlett2_usb_packet {
-       u32 cmd;
-       u16 size;
-       u16 seq;
-       u32 error;
-       u32 pad;
+       __le32 cmd;
+       __le16 size;
+       __le16 seq;
+       __le32 error;
+       __le32 pad;
        u8 data[];
 };
 
@@ -664,11 +664,11 @@ static int scarlett2_usb(
                        "Scarlett Gen 2 USB invalid response; "
                           "cmd tx/rx %d/%d seq %d/%d size %d/%d "
                           "error %d pad %d\n",
-                       le16_to_cpu(req->cmd), le16_to_cpu(resp->cmd),
+                       le32_to_cpu(req->cmd), le32_to_cpu(resp->cmd),
                        le16_to_cpu(req->seq), le16_to_cpu(resp->seq),
                        resp_size, le16_to_cpu(resp->size),
-                       le16_to_cpu(resp->error),
-                       le16_to_cpu(resp->pad));
+                       le32_to_cpu(resp->error),
+                       le32_to_cpu(resp->pad));
                err = -EINVAL;
                goto unlock;
        }
@@ -687,7 +687,7 @@ error:
 /* Send SCARLETT2_USB_DATA_CMD SCARLETT2_USB_CONFIG_SAVE */
 static void scarlett2_config_save(struct usb_mixer_interface *mixer)
 {
-       u32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
+       __le32 req = cpu_to_le32(SCARLETT2_USB_CONFIG_SAVE);
 
        scarlett2_usb(mixer, SCARLETT2_USB_DATA_CMD,
                      &req, sizeof(u32),
@@ -713,11 +713,11 @@ static int scarlett2_usb_set_config(
        const struct scarlett2_config config_item =
               scarlett2_config_items[config_item_num];
        struct {
-               u32 offset;
-               u32 bytes;
-               s32 value;
+               __le32 offset;
+               __le32 bytes;
+               __le32 value;
        } __packed req;
-       u32 req2;
+       __le32 req2;
        int err;
        struct scarlett2_mixer_data *private = mixer->private_data;
 
@@ -753,8 +753,8 @@ static int scarlett2_usb_get(
        int offset, void *buf, int size)
 {
        struct {
-               u32 offset;
-               u32 size;
+               __le32 offset;
+               __le32 size;
        } __packed req;
 
        req.offset = cpu_to_le32(offset);
@@ -794,8 +794,8 @@ static int scarlett2_usb_set_mix(struct usb_mixer_interface *mixer,
        const struct scarlett2_device_info *info = private->info;
 
        struct {
-               u16 mix_num;
-               u16 data[SCARLETT2_INPUT_MIX_MAX];
+               __le16 mix_num;
+               __le16 data[SCARLETT2_INPUT_MIX_MAX];
        } __packed req;
 
        int i, j;
@@ -850,9 +850,9 @@ static int scarlett2_usb_set_mux(struct usb_mixer_interface *mixer)
        };
 
        struct {
-               u16 pad;
-               u16 num;
-               u32 data[SCARLETT2_MUX_MAX];
+               __le16 pad;
+               __le16 num;
+               __le32 data[SCARLETT2_MUX_MAX];
        } __packed req;
 
        req.pad = 0;
@@ -911,9 +911,9 @@ static int scarlett2_usb_get_meter_levels(struct usb_mixer_interface *mixer,
                                          u16 *levels)
 {
        struct {
-               u16 pad;
-               u16 num_meters;
-               u32 magic;
+               __le16 pad;
+               __le16 num_meters;
+               __le32 magic;
        } __packed req;
        u32 resp[SCARLETT2_NUM_METERS];
        int i, err;