aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.4/0311-Revert-bcm2835-do-not-require-substream-for-accessin.patch
blob: 152ab91980b0b3947060c98007bd778fea7ee971 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
From 75045e771ab867b6cd397b1d1280e81584ddc401 Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Fri, 29 Apr 2016 17:27:36 +0100
Subject: [PATCH 311/423] Revert "bcm2835: do not require substream for
 accessing chmap ctl"

This reverts commit a05b4815196018c329ea98c24205bc6fa9c097e0.
---
 sound/arm/bcm2835-ctl.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

--- a/sound/arm/bcm2835-ctl.c
+++ b/sound/arm/bcm2835-ctl.c
@@ -489,6 +489,8 @@ static int snd_bcm2835_chmap_ctl_get(str
 {
 	struct snd_pcm_chmap *info = snd_kcontrol_chip(kcontrol);
 	bcm2835_chip_t *chip = info->private_data;
+	unsigned int idx = snd_ctl_get_ioffidx(kcontrol, &ucontrol->id);
+	struct snd_pcm_substream *substream = snd_pcm_chmap_substream(info, idx);
 	struct cea_channel_speaker_allocation *ch = NULL;
 	int res = 0;
 	int cur = 0;
@@ -497,6 +499,11 @@ static int snd_bcm2835_chmap_ctl_get(str
 	if (mutex_lock_interruptible(&chip->audio_mutex))
 		return -EINTR;
 
+	if (!substream || !substream->runtime) {
+		res = -ENODEV;
+		goto unlock;
+	}
+
 	for (i = 0; i < ARRAY_SIZE(channel_allocations); i++) {
 		if (channel_allocations[i].ca_index == chip->cea_chmap)
 			ch = &channel_allocations[i];
@@ -514,6 +521,7 @@ static int snd_bcm2835_chmap_ctl_get(str
 	while (cur < 8)
 		ucontrol->value.integer.value[cur++] = SNDRV_CHMAP_NA;
 
+unlock:
 	mutex_unlock(&chip->audio_mutex);
 	return res;
 }
@@ -533,7 +541,7 @@ static int snd_bcm2835_chmap_ctl_put(str
 		return -EINTR;
 
 	if (!substream || !substream->runtime) {
-		/* ignore and return success for the sake of alsactl */
+		res = -ENODEV;
 		goto unlock;
 	}