From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takashi Iwai Subject: Re: [PATCH, for-next] ALSA: usb-audio: caiaq: fix endianness bug in snd_usb_caiaq_maschine_dispatch Date: Tue, 30 Apr 2013 09:19:45 +0200 Message-ID: References: <1367262946-8980-1-git-send-email-eldad@fogrefinery.com> <517EC80B.4020609@gmail.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id 55349264F26 for ; Tue, 30 Apr 2013 09:19:34 +0200 (CEST) In-Reply-To: <517EC80B.4020609@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Daniel Mack Cc: Eldad Zack , alsa-devel@alsa-project.org List-Id: alsa-devel@alsa-project.org At Mon, 29 Apr 2013 21:20:43 +0200, Daniel Mack wrote: > > On 29.04.2013 21:15, Eldad Zack wrote: > > Current code does this: > > > > be16_to_cpu(buf[i * 2] << 8 | buf[(i * 2) + 1]) > > > > Which is effectively (neglecting the index): > > > > be16_to_cpu(be16_to_cpu(*((u16 *) buf))) > > > > This means the int16 in the buffer is not converted at all. > > > > Daniel Mack confirmed that the driver works on little endian > > CPUs, leading to the conclusion that the device-side structure > > is actually little endian. > > This changes the code to use le16_to_cpu(). > > > > Caught by sparse. > > > > Acked-by: Daniel Mack > > Signed-off-by: Eldad Zack > > Appearantly, nobody (including me) has ever used the pad controls of > this particular device on a BE machine. So I think it might not even be > worth Cc'ing stable. OK. Applied as is now. Thanks. Takashi > > > Thanks for catching this, anyway! > > Daniel > > > > > --- > > sound/usb/caiaq/input.c | 10 +++++----- > > 1 file changed, 5 insertions(+), 5 deletions(-) > > > > diff --git a/sound/usb/caiaq/input.c b/sound/usb/caiaq/input.c > > index efc70ae..4b3fb91 100644 > > --- a/sound/usb/caiaq/input.c > > +++ b/sound/usb/caiaq/input.c > > @@ -488,13 +488,13 @@ static void snd_usb_caiaq_maschine_dispatch(struct snd_usb_caiaqdev *cdev, > > unsigned int len) > > { > > unsigned int i, pad_id; > > - uint16_t pressure; > > + __le16 *pressure = (__le16 *) buf; > > > > for (i = 0; i < MASCHINE_PADS; i++) { > > - pressure = be16_to_cpu(buf[i * 2] << 8 | buf[(i * 2) + 1]); > > - pad_id = pressure >> 12; > > - > > - input_report_abs(cdev->input_dev, MASCHINE_PAD(pad_id), pressure & 0xfff); > > + pad_id = le16_to_cpu(*pressure) >> 12; > > + input_report_abs(cdev->input_dev, MASCHINE_PAD(pad_id), > > + le16_to_cpu(*pressure) & 0xfff); > > + pressure++; > > } > > > > input_sync(cdev->input_dev); > > >