| From 69756930f2de0457d51db7d505a1e4f40e9fd116 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Wed, 25 Jul 2018 17:59:26 +0200 |
| Subject: ALSA: cs5535audio: Fix invalid endian conversion |
| |
| From: Takashi Iwai <tiwai@suse.de> |
| |
| commit 69756930f2de0457d51db7d505a1e4f40e9fd116 upstream. |
| |
| One place in cs5535audio_build_dma_packets() does an extra conversion |
| via cpu_to_le32(); namely jmpprd_addr is passed to setup_prd() ops, |
| which writes the value via cs_writel(). That is, the callback does |
| the conversion by itself, and we don't need to convert beforehand. |
| |
| This patch fixes that bogus conversion. |
| |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| sound/pci/cs5535audio/cs5535audio.h | 6 +++--- |
| sound/pci/cs5535audio/cs5535audio_pcm.c | 4 ++-- |
| 2 files changed, 5 insertions(+), 5 deletions(-) |
| |
| --- a/sound/pci/cs5535audio/cs5535audio.h |
| +++ b/sound/pci/cs5535audio/cs5535audio.h |
| @@ -66,9 +66,9 @@ struct cs5535audio_dma_ops { |
| }; |
| |
| struct cs5535audio_dma_desc { |
| - u32 addr; |
| - u16 size; |
| - u16 ctlreserved; |
| + __le32 addr; |
| + __le16 size; |
| + __le16 ctlreserved; |
| }; |
| |
| struct cs5535audio_dma { |
| --- a/sound/pci/cs5535audio/cs5535audio_pcm.c |
| +++ b/sound/pci/cs5535audio/cs5535audio_pcm.c |
| @@ -158,8 +158,8 @@ static int cs5535audio_build_dma_packets |
| lastdesc->addr = cpu_to_le32((u32) dma->desc_buf.addr); |
| lastdesc->size = 0; |
| lastdesc->ctlreserved = cpu_to_le16(PRD_JMP); |
| - jmpprd_addr = cpu_to_le32(lastdesc->addr + |
| - (sizeof(struct cs5535audio_dma_desc)*periods)); |
| + jmpprd_addr = (u32)dma->desc_buf.addr + |
| + sizeof(struct cs5535audio_dma_desc) * periods; |
| |
| dma->substream = substream; |
| dma->period_bytes = period_bytes; |