Initial changes for Board Bringup [2/2]
Contains the following features:
* Compile
* Boot
* Audio
* Most of the configurations are from msm8953_64 project
but cleaned up, sorted and aligned.
* Vendor audio properties are from Audio HAL.
* Enable compressed VoIP feature.
* Use minimal config from qcom common project.
Issue: FP3-A11#202
Change-Id: I368e379cd4097b499e51f9c6e84a5c7167971def
diff --git a/device.mk b/device.mk
new file mode 100644
index 0000000..4e83d3b
--- /dev/null
+++ b/device.mk
@@ -0,0 +1,497 @@
+# Copyright 2021-2022 Fairphone B.V.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+FP_PATH := device/fairphone/FP3
+
+# Call the vendor setup
+$(call inherit-product-if-exists, vendor/fairphone/fp3-common/device-vendor.mk)
+
+$(call inherit-product, build/make/target/product/product_launched_with_p.mk)
+
+$(call inherit-product, frameworks/native/build/phone-xhdpi-4096-dalvik-heap.mk)
+
+$(call inherit-product, device/fairphone/fp3-common/common/common64.mk)
+
+PRODUCT_NAME := FP3
+PRODUCT_DEVICE := FP3
+PRODUCT_MODEL := FP3
+PRODUCT_MANUFACTURER := Fairphone
+PRODUCT_BRAND := Fairphone
+
+
+# Allow using custom and expressive names for our Android flavors while in fact
+# targeting the same model with all of them.
+PRODUCT_BUILD_PROP_OVERRIDES += PRODUCT_MODEL=FP3 PRODUCT_NAME=FP3
+
+# vendor/qcom/proprietary/common/config/device-vendor.mk --> PRODUCT_LIST
+TARGET_BASE_PRODUCT := FP3
+TARGET_VENDOR := fairphone
+
+TARGET_SYSTEM_PROP := device/$(TARGET_VENDOR)/$(PRODUCT_NAME)/system.prop
+
+
+# We don't have the calibration data as this sort of
+# data can only be generated at the factory so don't generate persist.img
+FP3_SKIP_PERSIST_IMG := true
+
+# Overlays
+DEVICE_PACKAGE_OVERLAYS += \
+ $(LOCAL_PATH)/overlay
+
+
+# A/B related defines
+AB_OTA_UPDATER := true
+AB_OTA_PARTITIONS += \
+ boot \
+ dtbo \
+ system \
+ vbmeta \
+ vendor
+
+
+AB_OTA_POSTINSTALL_CONFIG += \
+ RUN_POSTINSTALL_vendor=true \
+ POSTINSTALL_PATH_vendor=bin/checkpoint_gc \
+ FILESYSTEM_TYPE_vendor=ext4 \
+ POSTINSTALL_OPTIONAL_vendor=true
+
+PRODUCT_PACKAGES += \
+ checkpoint_gc \
+ update_engine_sideload
+
+
+# AVB
+BOARD_AVB_ENABLE := true
+
+
+# Additional native libraries
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/configs/public.libraries.txt:$(TARGET_COPY_OUT_VENDOR)/etc/public.libraries.txt
+
+
+# Atrace HAL
+PRODUCT_PACKAGES += \
+ android.hardware.atrace@1.0-service
+
+
+# Audio
+# AV Enhancement
+TARGET_ENABLE_QC_AV_ENHANCEMENTS := true
+
+
+PRODUCT_PACKAGES += \
+ android.hardware.audio@6.0 \
+ android.hardware.audio.common@6.0 \
+ android.hardware.audio.common@6.0-util \
+ android.hardware.audio@6.0-impl:32 \
+ android.hardware.audio.effect@6.0 \
+ android.hardware.audio.effect@6.0-impl:32 \
+ android.hardware.audio.service \
+ android.hardware.soundtrigger@2.1-impl \
+ audio.a2dp.default \
+ audio.primary.msm8953 \
+ audio.r_submix.default \
+ audio.usb.default \
+ libaacwrapper \
+ libaudio-resampler \
+ libautohal \
+ libqcompostprocbundle \
+ libqcomvisualizer \
+ libqcomvoiceprocessing \
+ libvolumelistener \
+ tinymix
+
+
+AUDIO_HAL_PATH := vendor/qcom/opensource/audio-hal/primary-hal
+
+# Audio files
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.software.midi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.midi.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_effects.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.conf \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_effects.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_effects.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_output_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_output_policy.conf \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_platform_info_intcodec.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_intcodec.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_platform_info_sku3_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_sku3_tasha.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_platform_info_sku4.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_sku4.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_platform_info_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_tasha.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_platform_info_tashalite.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_info_tashalite.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_policy.conf:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy.conf \
+ $(AUDIO_HAL_PATH)/configs/msm8953/audio_tuning_mixer.txt:$(TARGET_COPY_OUT_VENDOR)/etc/audio_tuning_mixer.txt \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths_mtp.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_mtp.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths_sku3_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_sku3_tasha.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths_sku4.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_sku4.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths_tasha.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tasha.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/mixer_paths_tashalite.xml:$(TARGET_COPY_OUT_VENDOR)/etc/mixer_paths_tashalite.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/sound_trigger_mixer_paths.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/sound_trigger_mixer_paths_wcd9306.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9306.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/sound_trigger_mixer_paths_wcd9330.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9330.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/sound_trigger_mixer_paths_wcd9335.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_mixer_paths_wcd9335.xml \
+ $(AUDIO_HAL_PATH)/configs/msm8953/sound_trigger_platform_info.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_platform_info.xml
+
+
+# Audio config files
+PRODUCT_COPY_FILES += \
+ frameworks/av/services/audiopolicy/config/a2dp_in_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/a2dp_in_audio_policy_configuration.xml \
+ frameworks/av/services/audiopolicy/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml \
+ frameworks/av/services/audiopolicy/config/bluetooth_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_audio_policy_configuration.xml \
+ frameworks/av/services/audiopolicy/config/default_volume_tables.xml:$(TARGET_COPY_OUT_VENDOR)/etc/default_volume_tables.xml \
+ frameworks/av/services/audiopolicy/config/r_submix_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/r_submix_audio_policy_configuration.xml \
+ frameworks/av/services/audiopolicy/config/usb_audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/usb_audio_policy_configuration.xml
+
+# Custom config files
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/audio/audio_policy_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration.xml
+
+
+# Audio firmware files
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/aw/aw8898_cfg.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/aw8898_cfg.bin \
+ $(FP_PATH)/tas2557_fw/OBO_0617_music.bin:$(TARGET_COPY_OUT_VENDOR)/firmware/tas2557_uCDSP.bin \
+ $(FP_PATH)/tas2557_fw/tas2557evm_OBO_0617.ftcfg:$(TARGET_COPY_OUT_VENDOR)/firmware/tas2557evm_aacspk_a.ftcfg
+
+
+# Audio Specific device overlays
+DEVICE_PACKAGE_OVERLAYS += $(AUDIO_HAL_PATH)/configs/common/overlay
+
+
+# Audio Specific properties
+# Properties
+-include $(LOCAL_PATH)/audio_properties.mk
+
+
+# Audio Kernel modules
+AUDIO_DLKM := audio_apr.ko
+AUDIO_DLKM += audio_q6_notifier.ko
+AUDIO_DLKM += audio_adsp_loader.ko
+AUDIO_DLKM += audio_q6.ko
+AUDIO_DLKM += audio_usf.ko
+AUDIO_DLKM += audio_pinctrl_wcd.ko
+AUDIO_DLKM += audio_swr.ko
+AUDIO_DLKM += audio_wcd_core.ko
+AUDIO_DLKM += audio_swr_ctrl.ko
+AUDIO_DLKM += audio_wsa881x.ko
+AUDIO_DLKM += audio_wsa881x_analog.ko
+AUDIO_DLKM += audio_platform.ko
+AUDIO_DLKM += audio_cpe_lsm.ko
+AUDIO_DLKM += audio_hdmi.ko
+AUDIO_DLKM += audio_stub.ko
+AUDIO_DLKM += audio_wcd9xxx.ko
+AUDIO_DLKM += audio_mbhc.ko
+AUDIO_DLKM += audio_wcd9335.ko
+AUDIO_DLKM += audio_wcd_cpe.ko
+AUDIO_DLKM += audio_digital_cdc.ko
+AUDIO_DLKM += audio_analog_cdc.ko
+AUDIO_DLKM += audio_native.ko
+AUDIO_DLKM += audio_machine_sdm450.ko
+AUDIO_DLKM += audio_machine_ext_sdm450.ko
+PRODUCT_PACKAGES += $(AUDIO_DLKM)
+
+
+# Bluetooth
+
+
+# Boot
+PRODUCT_PACKAGES += \
+ android.hardware.boot@1.0-impl \
+ android.hardware.boot@1.0-impl.recovery \
+ android.hardware.boot@1.0-service \
+ bootctrl.msm8953 \
+ update_engine \
+ update_engine_client \
+ update_engine_sideload \
+ update_verifier
+
+
+# Boot animation
+TARGET_SCREEN_HEIGHT := 2160
+TARGET_SCREEN_WIDTH := 1080
+
+
+PRODUCT_COPY_FILES += \
+ vendor/fairphone/media/bootanimation/bootanimation.zip:$(TARGET_COPY_OUT_PRODUCT)/media/bootanimation.zip
+
+
+# Camera
+
+
+# Component overrides
+# TODO: Check if this is required.
+#PRODUCT_COPY_FILES += \
+ $(FP_PATH)/configs/component-overrides.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sysconfig/component-overrides.xml
+
+
+# Display
+PRODUCT_PACKAGES += \
+ android.hardware.graphics.allocator@2.0-impl \
+ android.hardware.graphics.allocator@2.0-service \
+ android.hardware.graphics.composer@2.1-service \
+ android.hardware.graphics.mapper@2.0-impl-2.1 \
+ android.hardware.memtrack@1.0-impl \
+ android.hardware.memtrack@1.0-service \
+ gralloc.default \
+ gralloc.msm8953 \
+ hwcomposer.msm8953 \
+ memtrack.msm8953 \
+ libdisplayconfig \
+ libqdutils \
+ libqdMetaData \
+ libvulkan \
+ vendor.qti.hardware.display.composer@3.0
+
+
+# Vendor Display
+# Disable skip validate
+PRODUCT_PROPERTY_OVERRIDES += \
+ vendor.display.disable_skip_validate=1
+
+
+# Display Properties
+PRODUCT_AAPT_CONFIG := normal
+PRODUCT_AAPT_PREF_CONFIG := xxhdpi
+
+
+# DRM
+PRODUCT_PACKAGES += \
+ android.hardware.drm@1.3-service.clearkey
+
+
+# Enable vndk-sp Libraries
+PRODUCT_COMPATIBLE_PROPERTY_OVERRIDE := true
+TARGET_USES_MKE2FS := true
+
+PRODUCT_PACKAGES += \
+ vndk_package
+
+
+# Encryption
+PRODUCT_PROPERTY_OVERRIDES += ro.crypto.allow_encrypt_override=true
+PRODUCT_PROPERTY_OVERRIDES += ro.crypto.volume.filenames_mode=aes-256-cts
+
+
+# FBE support
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/init.qti.qseecomd.sh:$(TARGET_COPY_OUT_VENDOR)/bin/init.qti.qseecomd.sh
+
+
+# Framework Detect
+PRODUCT_PACKAGES += \
+ libqti_vndfwk_detect \
+ libqti_vndfwk_detect.vendor \
+ libvndfwk_detect_jni.qti \
+ libvndfwk_detect_jni.qti.vendor \
+ vndservicemanager
+
+
+# HIDL
+PRODUCT_PACKAGES += \
+ android.hidl.base@1.0 \
+ libhidltransport \
+ libhidltransport.vendor \
+ libhwbinder \
+ libhwbinder.vendor
+
+
+# Health
+PRODUCT_PACKAGES += \
+ android.hardware.health@2.1-impl \
+ android.hardware.health@2.1-impl.recovery \
+ android.hardware.health@2.1-service
+
+# IMS
+PRODUCT_PACKAGES += \
+ ims-ext-common \
+ ims_ext_common.xml \
+ ConfURIDialer
+
+# IPACM
+PRODUCT_PACKAGES += \
+ ipacm \
+ IPACM_cfg.xml \
+ libipanat \
+ liboffloadhal \
+ libqsap_sdk
+
+# IRQ
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/configs/msm_irqbalance.conf:$(TARGET_COPY_OUT_VENDOR)/etc/msm_irqbalance.conf \
+ $(FP_PATH)/configs/msm_irqbalance_little_big.conf:$(TARGET_COPY_OUT_VENDOR)/etc/msm_irqbalance_little_big.conf
+
+
+# Kernel modules
+# Kernel modules install path
+KERNEL_MODULES_INSTALL := dlkm
+KERNEL_MODULES_OUT := out/target/product/$(PRODUCT_NAME)/$(KERNEL_MODULES_INSTALL)/lib/modules
+
+
+# LED packages
+PRODUCT_PACKAGES += \
+ android.hardware.light@2.0-impl \
+ android.hardware.light@2.0-service \
+ lights.msm8953
+
+
+# Media / StagefrightCodec 2.0
+PRODUCT_PROPERTY_OVERRIDES += debug.stagefright.omx_default_rank=0
+
+
+# NFC
+
+
+# OMX
+PRODUCT_PACKAGES += \
+ libavservices_minijail.vendor \
+ libc2dcolorconvert \
+ libOmxAacEnc \
+ libOmxAmrEnc \
+ libOmxCore \
+ libOmxEvrcEnc \
+ libOmxQcelp13Enc \
+ libOmxVdec \
+ libOmxVenc \
+ libqomx_core \
+ libaacwrapper \
+ libmm-omxcore \
+ libstagefrighthw \
+ libstagefright_softomx.vendor
+
+
+#
+# system prop for opengles version
+#
+# 196608 is decimal for 0x30000 to report major/minor versions as 3/0
+# 196609 is decimal for 0x30001 to report major/minor versions as 3/1
+# 196610 is decimal for 0x30002 to report major/minor versions as 3/2
+PRODUCT_PROPERTY_OVERRIDES += \
+ ro.opengles.version=196610
+
+
+# Perf
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/configs/powerhint.xml:$(TARGET_COPY_OUT_VENDOR)/etc/powerhint.xml
+
+
+# Power
+PRODUCT_PACKAGES += \
+ android.hardware.power@1.0-impl \
+ android.hardware.power@1.0-service \
+ power.qcom
+
+
+# Feature flags
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.opengles.aep.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.opengles.aep.xml \
+ frameworks/native/data/etc/android.hardware.telephony.ims.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.telephony.ims.xml \
+ frameworks/native/data/etc/android.hardware.touchscreen.multitouch.jazzhand.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.touchscreen.multitouch.jazzhand.xml \
+ frameworks/native/data/etc/android.hardware.usb.accessory.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.accessory.xml \
+ frameworks/native/data/etc/android.hardware.usb.host.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.usb.host.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.level-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.level-0.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.version-1_1.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.version-1_0_3.xml \
+ frameworks/native/data/etc/android.hardware.vulkan.compute-0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.vulkan.compute-0.xml \
+ frameworks/native/data/etc/android.software.verified_boot.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/android.software.verified_boot.xml \
+ frameworks/native/data/etc/android.software.vulkan.deqp.level-2019-03-01.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.vulkan.deqp.level-2019-03-01.xml \
+ frameworks/native/data/etc/android.software.ipsec_tunnels.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.ipsec_tunnels.xml \
+ frameworks/native/data/etc/android.software.midi.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.midi.xml \
+ frameworks/native/data/etc/android.software.sip.voip.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.software.sip.voip.xml
+
+
+# privapp-permissions whitelisting
+PRODUCT_PROPERTY_OVERRIDES += ro.control_privapp_permissions=enforce
+
+
+# Protobuf
+PRODUCT_PACKAGES += \
+ libprotobuf-cpp-full \
+ libprotobuf-cpp-full-vendorcompat \
+ libprotobuf-cpp-lite-vendorcompat
+
+
+# RIL properties
+PRODUCT_PROPERTY_OVERRIDES += rild.libpath=/vendor/lib64/libril-qc-qmi-1.so
+PRODUCT_PROPERTY_OVERRIDES += vendor.rild.libpath=/vendor/lib64/libril-qc-qmi-1.so
+#vendor prop to disable advanced network scanning
+PRODUCT_PROPERTY_OVERRIDES += \
+ persist.vendor.radio.enableadvancedscan=false
+
+
+# RenderScript
+PRODUCT_PACKAGES += \
+ android.hardware.renderscript@1.0-impl
+
+
+# SDCard
+# default is nosdcard, S/W button enabled in resource
+PRODUCT_CHARACTERISTICS := nosdcard
+
+
+# Seccomp
+PRODUCT_COPY_FILES += \
+ $(FP_PATH)/seccomp/mediacodec-seccomp.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/mediacodec.policy \
+ $(FP_PATH)/seccomp/mediaextractor-seccomp.policy:$(TARGET_COPY_OUT_VENDOR)/etc/seccomp_policy/mediaextractor.policy
+
+
+# System helper
+PRODUCT_PACKAGES += \
+ vendor.qti.hardware.systemhelper@1.0
+
+
+# Service tracker
+PRODUCT_PACKAGES += \
+ vendor.qti.hardware.servicetracker@1.2.vendor
+
+
+# Telephony Permissions
+
+
+# Thermal
+PRODUCT_PACKAGES += \
+ android.hardware.thermal@1.0-impl \
+ android.hardware.thermal@1.0-service
+
+
+# Tinyxml
+PRODUCT_PACKAGES += \
+ libtinyxml
+
+# USB
+PRODUCT_PACKAGES += \
+ android.hardware.usb@1.0-service
+
+-include vendor/qcom/opensource/usb/vendor_product.mk
+
+
+# Vendor move
+PRODUCT_VENDOR_MOVE_ENABLED := true
+
+
+# Vibrator
+PRODUCT_PACKAGES += \
+ android.hardware.vibrator@1.0-impl \
+ android.hardware.vibrator@1.0-service
+
+
+# Call the proprietary setup
+# Call this in the end so that flags if required can be utilized.
+$(call inherit-product, device/fairphone/fp3-proprietary/device-vendor.mk)
+
+###################################################################################
+# This is the End of target.mk file.
+# Now, Pickup other split product.mk files:
+###################################################################################
+$(call inherit-product-if-exists, vendor/qcom/opensource/commonsys-intf/display/config/display-product-system.mk)
+$(call inherit-product-if-exists, vendor/qcom/opensource/commonsys-intf/display/config/display-interfaces-product.mk)
+$(call inherit-product-if-exists, vendor/qcom/opensource/usb/vendor_product.mk)
+$(call inherit-product-if-exists, vendor/qcom/opensource/vibrator/vibrator-vendor-product.mk)
+###################################################################################