aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordev-harsh1998 <harshit.india@linaro.org>2017-07-10 20:43:11 +0530
committermayankbali <mayankbali3@gmail.com>2017-07-10 20:52:45 +0530
commita1849fb2e7167a4d921d2ac5d062c7b11ba9a0f7 (patch)
tree5848c2c141df17895ff897bed865c2f0df4e0600
parentd3037aa5edf6c792768b4964ebda2b8ec8649952 (diff)
msm8916-common: fix bluetooth mac address partial loading
*Added bttnv tool flag in board config reverted commit LineageOS/android_device_cyanogen_msm8916-common@6a3f34a65b3abb3a08d66b53216d18ff84fad7c4 reverted commit LineageOS/android_device_cyanogen_msm8916-common@e8e03e896b709550d1181e5cb95e244a911b5012
-rw-r--r--board/qcom-bluetooth.mk1
-rw-r--r--product/qcom-bluetooth.mk3
-rw-r--r--rootdir/etc/init.qcom.bt.sh253
-rw-r--r--rootdir/etc/init.qcom.rc7
4 files changed, 256 insertions, 8 deletions
diff --git a/board/qcom-bluetooth.mk b/board/qcom-bluetooth.mk
index dd516c7..ad80de3 100644
--- a/board/qcom-bluetooth.mk
+++ b/board/qcom-bluetooth.mk
@@ -1,3 +1,4 @@
BOARD_HAVE_BLUETOOTH := true
BOARD_HAVE_BLUETOOTH_QCOM := true
BLUETOOTH_HCI_USE_MCT := true
+QCOM_BT_USE_BTNV := true
diff --git a/product/qcom-bluetooth.mk b/product/qcom-bluetooth.mk
index 0b96292..bc8dbdd 100644
--- a/product/qcom-bluetooth.mk
+++ b/product/qcom-bluetooth.mk
@@ -10,7 +10,4 @@ PRODUCT_COPY_FILES += \
# Properties
PRODUCT_PROPERTY_OVERRIDES += \
qcom.bluetooth.soc=smd \
- ro.bluetooth.dun=true \
- ro.bluetooth.hfp.ver=1.7 \
- ro.bluetooth.sap=true \
ro.qualcomm.bt.hci_transport=smd
diff --git a/rootdir/etc/init.qcom.bt.sh b/rootdir/etc/init.qcom.bt.sh
index 11db8c7..384e9c0 100644
--- a/rootdir/etc/init.qcom.bt.sh
+++ b/rootdir/etc/init.qcom.bt.sh
@@ -1,5 +1,5 @@
#!/system/bin/sh
-# Copyright (c) 2009-2016, The Linux Foundation. All rights reserved.
+# Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
@@ -26,9 +26,15 @@
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
+#Read the arguments passed to the script
+config="$1"
+
+BLUETOOTH_SLEEP_PATH=/proc/bluetooth/sleep/proto
LOG_TAG="qcom-bluetooth"
LOG_NAME="${0}:"
+hciattach_pid=""
+
loge ()
{
/system/bin/log -t $LOG_TAG -p e "$LOG_NAME $@"
@@ -45,11 +51,209 @@ failed ()
exit $2
}
+#
+# enable bluetooth profiles dynamically
+#
+config_bt ()
+{
+ baseband=`getprop ro.baseband`
+ target=`getprop ro.board.platform`
+ if [ -f /sys/devices/soc0/soc_id ]; then
+ soc_hwid=`cat /sys/devices/soc0/soc_id`
+ else
+ soc_hwid=`cat /sys/devices/system/soc/soc0/id`
+ fi
+ btsoc=`getprop qcom.bluetooth.soc`
+
+ case $baseband in
+ "apq")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.nap false
+ setprop ro.bluetooth.sap false
+ setprop ro.bluetooth.dun false
+ # For MPQ as baseband is same for both
+ case $soc_hwid in
+ "130")
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.pbap false
+ setprop ro.qualcomm.bluetooth.map false
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.hsp false
+ setprop ro.qualcomm.bluetooth.hfp false
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.map true
+ ;;
+ esac
+ ;;
+ "mdm" | "svlte2a" | "svlte1" | "csfb")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.map true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ case $target in
+ "apq8084")
+ setprop ro.bluetooth.dun true
+ logi "Enabling BT-DUN for APQ8084"
+ ;;
+ *)
+ setprop ro.bluetooth.dun false
+ ;;
+ esac
+ ;;
+ "msm")
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ setprop ro.bluetooth.dun true
+ case $btsoc in
+ "ath3k")
+ setprop ro.qualcomm.bluetooth.map false
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.map true
+ ;;
+ esac
+ ;;
+ *)
+ setprop ro.qualcomm.bluetooth.opp true
+ setprop ro.qualcomm.bluetooth.hfp true
+ setprop ro.qualcomm.bluetooth.hsp true
+ setprop ro.qualcomm.bluetooth.pbap true
+ setprop ro.qualcomm.bluetooth.ftp true
+ setprop ro.qualcomm.bluetooth.map true
+ setprop ro.qualcomm.bluetooth.nap true
+ setprop ro.bluetooth.sap true
+ setprop ro.bluetooth.dun true
+ ;;
+ esac
+
+ #Enable Bluetooth Profiles specific to target Dynamically
+ case $target in
+ "msm8960")
+ if [ "$btsoc" != "ath3k" ] && [ "$soc_hwid" != "130" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.6
+ setprop ro.qualcomm.bt.hci_transport smd
+ fi
+ ;;
+ "msm8974" | "msm8226" | "msm8610" | "msm8916" )
+ if [ "$btsoc" != "ath3k" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.7
+ setprop ro.qualcomm.bt.hci_transport smd
+ fi
+ ;;
+ "apq8084" | "mpq8092" )
+ if [ "$btsoc" != "rome" ]
+ then
+ setprop ro.qualcomm.bt.hci_transport smd
+ elif [ "$btsoc" = "rome" ]
+ then
+ setprop ro.bluetooth.hfp.ver 1.6
+ fi
+ ;;
+ *)
+ ;;
+ esac
+
+if [ -f /system/etc/bluetooth/stack.conf ]; then
+stack=`cat /system/etc/bluetooth/stack.conf`
+fi
+
+case "$stack" in
+ "bluez")
+ logi "Bluetooth stack is $stack"
+ setprop ro.qc.bluetooth.stack $stack
+ reason=`getprop vold.decrypt`
+ case "$reason" in
+ "trigger_restart_framework")
+ start dbus
+ ;;
+ esac
+ ;;
+ *)
+ logi "Bluetooth stack is Bluedroid"
+ ;;
+esac
+
+}
+
+start_hciattach ()
+{
+ /system/bin/hciattach -n $BTS_DEVICE $BTS_TYPE $BTS_BAUD &
+ hciattach_pid=$!
+ logi "start_hciattach: pid = $hciattach_pid"
+ echo 1 > $BLUETOOTH_SLEEP_PATH
+}
+
+kill_hciattach ()
+{
+ echo 0 > $BLUETOOTH_SLEEP_PATH
+ logi "kill_hciattach: pid = $hciattach_pid"
+ ## careful not to kill zero or null!
+ kill -TERM $hciattach_pid
+ # this shell doesn't exit now -- wait returns for normal exit
+}
+
+logi "init.qcom.bt.sh config = $config"
+case "$config" in
+ "onboot")
+ config_bt
+ exit 0
+ ;;
+ *)
+ ;;
+esac
+
+# mimic hciattach options parsing -- maybe a waste of effort
+USAGE="hciattach [-n] [-p] [-b] [-t timeout] [-s initial_speed] <tty> <type | id> [speed] [flow|noflow] [bdaddr]"
+
+while getopts "blnpt:s:" f
+do
+ case $f in
+ b | l | n | p) opt_flags="$opt_flags -$f" ;;
+ t) timeout=$OPTARG;;
+ s) initial_speed=$OPTARG;;
+ \?) echo $USAGE; exit 1;;
+ esac
+done
+shift $(($OPTIND-1))
+
+# Note that "hci_qcomm_init -e" prints expressions to set the shell variables
+# BTS_DEVICE, BTS_TYPE, BTS_BAUD, and BTS_ADDRESS.
+
+#Selectively Disable sleep
+BOARD=`getprop ro.board.platform`
+STACK=`getprop ro.qc.bluetooth.stack`
+
# BR/EDR & LE power class configurations
POWER_CLASS=`getprop qcom.bt.dev_power_class`
LE_POWER_CLASS=`getprop qcom.bt.le_dev_pwr_class`
-setprop bluetooth.status off
+#find the transport type
+TRANSPORT=`getprop ro.qualcomm.bt.hci_transport`
+logi "Transport : $TRANSPORT"
+case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status off
+ ;;
+esac
+
case $POWER_CLASS in
1) PWR_CLASS="-p 0" ;
@@ -80,12 +284,51 @@ eval $(/system/bin/hci_qcomm_init -e $PWR_CLASS $LE_PWR_CLASS && echo "exit_code
case $exit_code_hci_qcomm_init in
0) logi "Bluetooth QSoC firmware download succeeded, $BTS_DEVICE $BTS_TYPE $BTS_BAUD $BTS_ADDRESS";;
*) failed "Bluetooth QSoC firmware download failed" $exit_code_hci_qcomm_init;
-
- setprop bluetooth.status off
+ case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status off
+ ;;
+ esac
exit $exit_code_hci_qcomm_init;;
esac
-setprop bluetooth.status on
+# init does SIGTERM on ctl.stop for service
+trap "kill_hciattach" TERM INT
+
+case $TRANSPORT in
+ "smd")
+ case $STACK in
+ "bluez")
+ logi "** Bluez stack **"
+ echo 1 > /sys/module/hci_smd/parameters/hcismd_set
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status on
+ ;;
+ esac
+ ;;
+ *)
+ logi "start hciattach"
+ start_hciattach
+ case $STACK in
+ "bluez")
+ logi "Bluetooth is turning On with Bluez stack "
+ ;;
+ *)
+ logi "** Bluedroid stack **"
+ setprop bluetooth.status on
+ ;;
+ esac
+
+ wait $hciattach_pid
+ logi "Bluetooth stopped"
+ ;;
+esac
exit 0
diff --git a/rootdir/etc/init.qcom.rc b/rootdir/etc/init.qcom.rc
index 46219b7..1e1f268 100644
--- a/rootdir/etc/init.qcom.rc
+++ b/rootdir/etc/init.qcom.rc
@@ -276,6 +276,7 @@ on property:bluetooth.isEnabled=true
on property:vold.decrypt=trigger_restart_framework
start config_bt_addr
+ start config_bluetooth
on property:persist.env.fastdorm.enabled=true
setprop persist.radio.data_no_toggle 1
@@ -297,6 +298,12 @@ service config_bt_addr /system/bin/btnvtool -O
group bluetooth radio
oneshot
+service config_bluetooth /system/bin/sh /system/etc/init.qcom.bt.sh "onboot"
+ class core
+ user root
+ seclabel u:r:bluetooth_loader:s0
+ oneshot
+
service cnd /system/bin/cnd
class late_start
socket cnd stream 660 root inet