audio: mute HDMI audio when not in use
Bug: 7208242
Change-Id: I6db26e7ef378ab546017a1a6e91895d9886fc18d
diff --git a/audio/Android.mk b/audio/Android.mk
index 8ce4753..cf5b7f4 100644
--- a/audio/Android.mk
+++ b/audio/Android.mk
@@ -24,6 +24,7 @@
LOCAL_C_INCLUDES += \
external/tinyalsa/include \
external/expat/lib \
+ hardware/samsung_slsi/exynos5/include \
$(call include-path-for, audio-utils)
LOCAL_SHARED_LIBRARIES := liblog libcutils libtinyalsa libaudioutils libexpat
LOCAL_MODULE_TAGS := optional
diff --git a/audio/audio_hw.c b/audio/audio_hw.c
index 093a9ae..0e3c11f 100644
--- a/audio/audio_hw.c
+++ b/audio/audio_hw.c
@@ -31,6 +31,9 @@
#include <hardware/audio.h>
#include <hardware/hardware.h>
+#include <linux/videodev2.h>
+#include <videodev2_exynos_media.h>
+
#include <system/audio.h>
#include <tinyalsa/asoundlib.h>
@@ -378,6 +381,30 @@
/* Helper functions */
+static int enable_hdmi_audio(int enable)
+{
+ int fd;
+ int ret;
+ struct v4l2_control ctrl;
+
+ fd = open("/dev/video16", O_RDWR);
+ if (fd < 0) {
+ ALOGE("cannot open /dev/video16 (%d)", fd);
+ return -ENOSYS;
+ }
+
+ ctrl.id = V4L2_CID_TV_ENABLE_HDMI_AUDIO;
+ ctrl.value = !!enable;
+ ret = ioctl(fd, VIDIOC_S_CTRL, &ctrl);
+
+ if (ret < 0)
+ ALOGE("V4L2_CID_TV_ENABLE_HDMI_AUDIO ioctl error (%d)", errno);
+
+ close(fd);
+
+ return ret;
+}
+
static void select_devices(struct audio_device *adev)
{
int output_device_id = get_output_device_id(adev->out_device);
@@ -461,6 +488,8 @@
adev->es305_preset = new_es305_preset;
}
+ enable_hdmi_audio(adev->out_device & AUDIO_DEVICE_OUT_AUX_DIGITAL);
+
update_mixer_state(adev->ar);
}