treble_patches: Update all patches per BlissRoms Source

Change-Id: I1371da94679a6c859e08f86b4a17b14281dfae81
Signed-off-by: Jackeagle <jackeagle102@gmail.com>
diff --git a/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch b/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch
new file mode 100644
index 0000000..dbdbf37
--- /dev/null
+++ b/patches/platform_frameworks_av/0002-FIH-devices-Fix-Earpiece-audio-output.patch
@@ -0,0 +1,78 @@
+From 7e9375da9c53bebe4e7390044b7c8cbd4d1f9d88 Mon Sep 17 00:00:00 2001
+From: Pierre-Hugues Husson <phh@phh.me>
+Date: Tue, 24 Apr 2018 00:14:28 +0200
+Subject: [PATCH 2/5] FIH devices: Fix "Earpiece" audio output
+
+On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
+Earpiece is not listed in attachedDevices, and devicePort's profile
+mentions it is AUDIO_CHANNEL_IN_MONO, instead of AUDIO_CHANNEL_OUT_MONO.
+
+Detect such cases (output device, but got only AUDIO_CHANNEL_IN_MONO),
+and fix both channelMasks and attachedDevices
+
+Change-Id: I4a88ba6d34d0fcd346eeea2ca903772f0271040a
+---
+ .../common/managerdefinitions/src/Serializer.cpp   | 25 +++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+index a253113..380e2f8 100644
+--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
++++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
+@@ -191,16 +191,25 @@ const char AudioProfileTraits::Attributes::name[] = "name";
+ const char AudioProfileTraits::Attributes::samplingRates[] = "samplingRates";
+ const char AudioProfileTraits::Attributes::format[] = "format";
+ const char AudioProfileTraits::Attributes::channelMasks[] = "channelMasks";
++static bool fixedEarpieceChannels = false;
+ 
+ status_t AudioProfileTraits::deserialize(_xmlDoc */*doc*/, const _xmlNode *root, PtrElement &profile,
+-                                         PtrSerializingCtx /*serializingContext*/)
++                                         PtrSerializingCtx serializingContext)
+ {
++    bool isOutput = serializingContext != nullptr;
+     string samplingRates = getXmlAttribute(root, Attributes::samplingRates);
+     string format = getXmlAttribute(root, Attributes::format);
+     string channels = getXmlAttribute(root, Attributes::channelMasks);
++    ChannelTraits::Collection channelsMask = channelMasksFromString(channels, ",");
++
++    //Some Foxconn devices have wrong earpiece channel mask, leading to no channel mask
++    if(channelsMask.size() == 1 && channelsMask[0] == AUDIO_CHANNEL_IN_MONO && isOutput) {
++        fixedEarpieceChannels = true;
++        channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ",");
++    }
+ 
+     profile = new Element(formatFromString(format, gDynamicFormat),
+-                          channelMasksFromString(channels, ","),
++                          channelsMask,
+                           samplingRatesFromString(samplingRates, ","));
+ 
+     profile->setDynamicFormat(profile->getFormat() == gDynamicFormat);
+@@ -326,7 +335,10 @@ status_t DevicePortTraits::deserialize(_xmlDoc *doc, const _xmlNode *root, PtrEl
+     }
+ 
+     AudioProfileTraits::Collection profiles;
+-    deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
++    if(audio_is_output_devices(type))
++        deserializeCollection<AudioProfileTraits>(doc, root, profiles, (PtrSerializingCtx)1);
++    else
++        deserializeCollection<AudioProfileTraits>(doc, root, profiles, NULL);
+     if (profiles.isEmpty()) {
+         sp <AudioProfile> dynamicProfile = new AudioProfile(gDynamicFormat,
+                                                             ChannelsVector(), SampleRateVector());
+@@ -491,6 +503,13 @@ status_t ModuleTraits::deserialize(xmlDocPtr doc, const xmlNode *root, PtrElemen
+         }
+         children = children->next;
+     }
++    if(fixedEarpieceChannels) {
++        sp<DeviceDescriptor> device =
++            module->getDeclaredDevices().getDeviceFromTagName(String8("Earpiece"));
++	if(device != 0)
++		ctx->addAvailableDevice(device);
++	fixedEarpieceChannels = false;
++    }
+     return NO_ERROR;
+ }
+ 
+-- 
+2.7.4
+