]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob
f0e5835d30741a954dcab29bbb372370eb21ff3f
[thirdparty/kernel/stable-queue.git] /
1 From 706ad6746a66546daf96d4e4a95e46faf6cf689a Mon Sep 17 00:00:00 2001
2 From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
3 Date: Sun, 3 Nov 2019 00:09:20 +0900
4 Subject: ALSA: bebob: fix to detect configured source of sampling clock for Focusrite Saffire Pro i/o series
5
6 From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
7
8 commit 706ad6746a66546daf96d4e4a95e46faf6cf689a upstream.
9
10 For Focusrite Saffire Pro i/o, the lowest 8 bits of register represents
11 configured source of sampling clock. The next lowest 8 bits represents
12 whether the configured source is actually detected or not just after
13 the register is changed for the source.
14
15 Current implementation evaluates whole the register to detect configured
16 source. This results in failure due to the next lowest 8 bits when the
17 source is connected in advance.
18
19 This commit fixes the bug.
20
21 Fixes: 25784ec2d034 ("ALSA: bebob: Add support for Focusrite Saffire/SaffirePro series")
22 Cc: <stable@vger.kernel.org> # v3.16+
23 Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
24 Link: https://lore.kernel.org/r/20191102150920.20367-1-o-takashi@sakamocchi.jp
25 Signed-off-by: Takashi Iwai <tiwai@suse.de>
26 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27
28 ---
29 sound/firewire/bebob/bebob_focusrite.c | 3 +++
30 1 file changed, 3 insertions(+)
31
32 --- a/sound/firewire/bebob/bebob_focusrite.c
33 +++ b/sound/firewire/bebob/bebob_focusrite.c
34 @@ -27,6 +27,8 @@
35 #define SAFFIRE_CLOCK_SOURCE_SPDIF 1
36
37 /* clock sources as returned from register of Saffire Pro 10 and 26 */
38 +#define SAFFIREPRO_CLOCK_SOURCE_SELECT_MASK 0x000000ff
39 +#define SAFFIREPRO_CLOCK_SOURCE_DETECT_MASK 0x0000ff00
40 #define SAFFIREPRO_CLOCK_SOURCE_INTERNAL 0
41 #define SAFFIREPRO_CLOCK_SOURCE_SKIP 1 /* never used on hardware */
42 #define SAFFIREPRO_CLOCK_SOURCE_SPDIF 2
43 @@ -189,6 +191,7 @@ saffirepro_both_clk_src_get(struct snd_b
44 map = saffirepro_clk_maps[1];
45
46 /* In a case that this driver cannot handle the value of register. */
47 + value &= SAFFIREPRO_CLOCK_SOURCE_SELECT_MASK;
48 if (value >= SAFFIREPRO_CLOCK_SOURCE_COUNT || map[value] < 0) {
49 err = -EIO;
50 goto end;