diff mbox

ALSA: usb-audio: uac1: Invalidate ctl on interrupt

Message ID 20171116163517.5010-1-julian@jusst.de (mailing list archive)
State New, archived
Headers show

Commit Message

Julian Scheel Nov. 16, 2017, 4:35 p.m. UTC
When an interrupt occurs, the value of at least one of the belonging
controls should have changed. To make sure they get re-read from device
on the next read, invalidate the cache. This was correctly implemented
for uac2 already, but missing for uac1.

Signed-off-by: Julian Scheel <julian@jusst.de>
---
 sound/usb/mixer.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

Comments

Takashi Iwai Nov. 17, 2017, 11:01 a.m. UTC | #1
On Thu, 16 Nov 2017 17:35:17 +0100,
Julian Scheel wrote:
> 
> When an interrupt occurs, the value of at least one of the belonging
> controls should have changed. To make sure they get re-read from device
> on the next read, invalidate the cache. This was correctly implemented
> for uac2 already, but missing for uac1.
> 
> Signed-off-by: Julian Scheel <julian@jusst.de>

Applied, thanks.


Takashi
diff mbox

Patch

diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c
index 91bc8f18791e..1beb5b4d027e 100644
--- a/sound/usb/mixer.c
+++ b/sound/usb/mixer.c
@@ -2330,9 +2330,14 @@  void snd_usb_mixer_notify_id(struct usb_mixer_interface *mixer, int unitid)
 {
 	struct usb_mixer_elem_list *list;
 
-	for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem)
+	for (list = mixer->id_elems[unitid]; list; list = list->next_id_elem) {
+		struct usb_mixer_elem_info *info =
+			(struct usb_mixer_elem_info *)list;
+		/* invalidate cache, so the value is read from the device */
+		info->cached = 0;
 		snd_ctl_notify(mixer->chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
 			       &list->kctl->id);
+	}
 }
 
 static void snd_usb_mixer_dump_cval(struct snd_info_buffer *buffer,