From fededa5f792564ba1c570df7193b3f9ffdd9b010 Mon Sep 17 00:00:00 2001 From: Peter Cai Date: Wed, 1 Jun 2022 22:40:48 -0400 Subject: [PATCH] init_gsi: Add qcom caf audio quirks Force-disabling A2DP offloading is not implemented yet. --- init/Android.bp | 1 + init/quirks.cpp | 18 +++++++++++++----- init/quirks.h | 4 +++- init/quirks/soc/caf_audio.cpp | 21 +++++++++++++++++++++ 4 files changed, 38 insertions(+), 6 deletions(-) create mode 100644 init/quirks/soc/caf_audio.cpp diff --git a/init/Android.bp b/init/Android.bp index aaca8b4..3bfacd2 100644 --- a/init/Android.bp +++ b/init/Android.bp @@ -7,6 +7,7 @@ cc_binary { // SoC-specific quirks "quirks/soc/mtk_ril.cpp", + "quirks/soc/caf_audio.cpp", // Device-specific quirks "quirks/device/unihertz_keylayout.cpp", diff --git a/init/quirks.cpp b/init/quirks.cpp index bb40d26..fa74ec4 100644 --- a/init/quirks.cpp +++ b/init/quirks.cpp @@ -87,6 +87,16 @@ void Quirks::CopyFileKeepPerms(filesystem::path src, filesystem::path dst) { RestoreFilePermissions(src, dst); } +int Quirks::OverrideWithBindMount(filesystem::path src, filesystem::path dst) { + int err = mount(src.c_str(), dst.c_str(), nullptr, MS_BIND, nullptr); + + if (err < 0) { + ALOGE("bind mount %s on %s err = %d\n", src.c_str(), dst.c_str(), errno); + } + + return err; +} + void Quirks::OverrideFileWith(filesystem::path p, function proc) { if (!filesystem::is_regular_file(p)) return; @@ -108,10 +118,9 @@ void Quirks::OverrideFileWith(filesystem::path p, function proc); void OverrideFileReplaceSubstr(filesystem::path p, string pattern, string replacement); diff --git a/init/quirks/soc/caf_audio.cpp b/init/quirks/soc/caf_audio.cpp new file mode 100644 index 0000000..3f95130 --- /dev/null +++ b/init/quirks/soc/caf_audio.cpp @@ -0,0 +1,21 @@ +#include "../../quirks.h" + +#include + +using namespace std; + +class CafAudioQuirk : DeviceQuirk { +public: + bool ShouldRun() { + return filesystem::exists("/vendor/etc/audio/audio_policy_configuration.xml"); + } + + void Run() { + Quirks::OverrideWithBindMount("/vendor/etc/audio/audio_policy_configuration.xml", "/vendor/etc/audio_policy_configuration.xml"); + if (filesystem::exists("/vendor/etc/a2dp_audio_policy_configuration.xml")) { + Quirks::OverrideFileReplaceSubstr("/vendor/etc/a2dp_audio_policy_configuration.xml", "bluetooth_qti", "a2dp"); + } + } +}; + +LOAD_QUIRK(CafAudioQuirk);