| #!/vendor/bin/sh |
| # Copyright (c) 2012-2018, 2020-2021 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: |
| # * Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # * Redistributions in binary form must reproduce the above |
| # copyright notice, this list of conditions and the following |
| # disclaimer in the documentation and/or other materials provided |
| # with the distribution. |
| # * Neither the name of The Linux Foundation nor the names of its |
| # contributors may be used to endorse or promote products derived |
| # from this software without specific prior written permission. |
| # |
| # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED |
| # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT |
| # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS |
| # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
| # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
| # OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN |
| # IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| # |
| # |
| |
| # Changes from Qualcomm Innovation Center are provided under the following license: |
| # Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. |
| # SPDX-License-Identifier: BSD-3-Clause-Clear |
| # |
| |
| # Set platform variables |
| soc_hwplatform=`cat /sys/devices/soc0/hw_platform 2> /dev/null` |
| soc_machine=`cat /sys/devices/soc0/machine 2> /dev/null` |
| soc_machine=${soc_machine:0:2} |
| soc_id=`cat /sys/devices/soc0/soc_id 2> /dev/null` |
| |
| # |
| # Check ESOC for external modem |
| # |
| # Note: currently only a single MDM/SDX is supported |
| # |
| esoc_name=`cat /sys/bus/esoc/devices/esoc0/esoc_name 2> /dev/null` |
| |
| target=`getprop ro.board.platform` |
| |
| # |
| # Override USB default composition |
| # |
| # If USB persist config not set, set default configuration |
| if [ "$(getprop persist.vendor.usb.config)" == "" -a "$(getprop ro.build.type)" != "user" ]; then |
| if [ "$esoc_name" != "" ]; then |
| setprop persist.vendor.usb.config diag,diag_mdm,qdss,qdss_mdm,serial_cdev,dpl,rmnet,adb |
| else |
| case "$(getprop ro.baseband)" in |
| "apq") |
| if [ "$target" == "neo" ] || [ "$target" == "anorak" ]; then |
| setprop persist.vendor.usb.config diag,qdss,adb |
| else |
| setprop persist.vendor.usb.config diag,adb |
| fi |
| ;; |
| *) |
| case "$soc_hwplatform" in |
| "Dragon" | "SBC") |
| setprop persist.vendor.usb.config diag,adb |
| ;; |
| *) |
| case "$soc_machine" in |
| "SA") |
| setprop persist.vendor.usb.config diag,adb |
| ;; |
| *) |
| case "$target" in |
| "msm8996") |
| setprop persist.vendor.usb.config diag,serial_cdev,serial_tty,rmnet_ipa,mass_storage,adb |
| ;; |
| "msm8909") |
| setprop persist.vendor.usb.config diag,serial_smd,rmnet_qti_bam,adb |
| ;; |
| "msm8937") |
| if [ -d /config/usb_gadget ]; then |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,adb |
| else |
| case "$soc_id" in |
| "313" | "320") |
| setprop persist.vendor.usb.config diag,serial_smd,rmnet_ipa,adb |
| ;; |
| *) |
| setprop persist.vendor.usb.config diag,serial_smd,rmnet_qti_bam,adb |
| ;; |
| esac |
| fi |
| ;; |
| "msm8953") |
| if [ -d /config/usb_gadget ]; then |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,adb |
| else |
| setprop persist.vendor.usb.config diag,serial_smd,rmnet_ipa,adb |
| fi |
| ;; |
| "msm8998" | "sdm660" | "apq8098_latv") |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,adb |
| ;; |
| "monaco") |
| setprop persist.vendor.usb.config diag,qdss,rmnet,adb |
| ;; |
| "sdm845" | "sdm710") |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,adb |
| ;; |
| "msmnile") |
| case "$soc_id" in |
| "362" | "367") |
| setprop persist.vendor.usb.config diag,adb |
| ;; |
| *) |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,qdss,adb |
| ;; |
| esac |
| ;; |
| "gen4") |
| setprop persist.vendor.usb.config adb |
| ;; |
| "sm6150" | "trinket" | "lito" | "atoll" | "bengal" | "lahaina" | "holi" | "taro" | "parrot" | "ravelin" | "kalama" | "crow") |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,qdss,adb |
| ;; |
| *) |
| setprop persist.vendor.usb.config diag,adb |
| ;; |
| esac |
| ;; |
| esac |
| ;; |
| esac |
| ;; |
| esac |
| fi |
| fi |
| |
| # This check is needed for GKI 1.0 targets where QDSS is not available |
| if [ "$(getprop persist.vendor.usb.config)" == "diag,serial_cdev,rmnet,dpl,qdss,adb" -a \ |
| ! -d /config/usb_gadget/g1/functions/qdss.qdss ]; then |
| setprop persist.vendor.usb.config diag,serial_cdev,rmnet,dpl,adb |
| fi |
| |
| # Start peripheral mode on primary USB controllers for Automotive platforms |
| case "$soc_machine" in |
| "SA") |
| if [ -f /sys/bus/platform/devices/a600000.ssusb/mode ]; then |
| default_mode=`cat /sys/bus/platform/devices/a600000.ssusb/mode` |
| case "$default_mode" in |
| "none") |
| echo peripheral > /sys/bus/platform/devices/a600000.ssusb/mode |
| ;; |
| esac |
| fi |
| ;; |
| esac |
| |
| # check configfs is mounted or not |
| if [ -d /config/usb_gadget ]; then |
| usb_product=`getprop vendor.usb.product_string`; |
| vendor_model=`getprop ro.product.vendor.model`; |
| if [ "$usb_product" == "" ]; then |
| setprop vendor.usb.product_string "$vendor_model" |
| fi |
| |
| # ADB requires valid iSerialNumber; if ro.serialno is missing, use dummy |
| serialnumber=`cat /config/usb_gadget/g1/strings/0x409/serialnumber 2> /dev/null` |
| if [ "$serialnumber" == "" ]; then |
| serialno=1234567 |
| echo $serialno > /config/usb_gadget/g1/strings/0x409/serialnumber |
| fi |
| setprop vendor.usb.configfs 1 |
| fi |
| |
| # |
| # Initialize RNDIS Diag option. If unset, set it to 'none'. |
| # |
| diag_extra=`getprop persist.vendor.usb.config.extra` |
| if [ "$diag_extra" == "" ]; then |
| setprop persist.vendor.usb.config.extra none |
| fi |
| |
| # enable rps cpus on msm8937 target |
| setprop vendor.usb.rps_mask 0 |
| case "$soc_id" in |
| "294" | "295" | "353" | "354") |
| setprop vendor.usb.rps_mask 40 |
| ;; |
| esac |
| |
| # |
| # Initialize UVC conifguration. |
| # |
| if [ -d /config/usb_gadget/g1/functions/uvc.0 ]; then |
| setprop vendor.usb.uvc.function.init 1 |
| fi |
| |
| if [ -d /config/usb_gadget/g1/functions/uac2.0 ]; then |
| setprop vendor.usb.uac2.function.init 1 |
| fi |
| |
| # enable ncm |
| case "$target" in |
| "neo" | "anorak") |
| if [ -d /config/usb_gadget/g1/functions/ncm.gs6 ]; then |
| cd /config/usb_gadget/g1/functions/ncm.gs6 |
| |
| echo WINNCM > os_desc/interface.ncm/compatible_id |
| fi |
| ;; |
| esac |
| |
| #Configure class, subclass, protocol for RNDIS SW path to be detected by Windows |
| case "$target" in |
| "anorak") |
| if [ -d /config/usb_gadget/g1/functions/rndis.rndis ]; then |
| cd /config/usb_gadget/g1/functions/rndis.rndis |
| |
| echo ef > class |
| echo 4 > subclass |
| echo 1 > protocol |
| fi |
| ;; |
| esac |