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);