usb audio: implement microphone mute.

Bug: 17321604.
Change-Id: I8e3daf2636dfd5f85d990c0093c52c908064afac
diff --git a/modules/usbaudio/audio_hw.c b/modules/usbaudio/audio_hw.c
index caddf97..664a753 100644
--- a/modules/usbaudio/audio_hw.c
+++ b/modules/usbaudio/audio_hw.c
@@ -66,6 +66,8 @@
     /* input */
     alsa_device_profile in_profile;
 
+    bool mic_muted;
+
     bool standby;
 };
 
@@ -869,6 +871,10 @@
                                     sample_size_in_bytes, num_read_buff_bytes);
             }
         }
+
+        /* no need to acquire in->dev->lock to read mic_muted here as we don't change its state */
+        if (num_read_buff_bytes > 0 && in->dev->mic_muted)
+            memset(buffer, 0, num_read_buff_bytes);
     }
 
 err:
@@ -1061,6 +1067,10 @@
 
 static int adev_set_mic_mute(struct audio_hw_device *dev, bool state)
 {
+    struct audio_device * adev = (struct audio_device *)dev;
+    pthread_mutex_lock(&adev->lock);
+    adev->mic_muted = state;
+    pthread_mutex_unlock(&adev->lock);
     return -ENOSYS;
 }