# Copyright (c) 2013-2014, 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.
#
#

on early-init
    mkdir /firmware 0771 system system
    mkdir /firmware-modem 0771 system system
    mkdir /system 0777 root root
    symlink /data/tombstones /tombstones

# import cne init file
#on post-fs
#    export LD_PRELOAD /vendor/lib/libNimsWrap.so

on fs
    mount_all fstab.qcom

    # Keeping following partitions outside fstab file. As user may not have
    # these partition flashed on the device. Failure to mount any partition in fstab file
    # results in failure to launch late-start class.

    wait /dev/block/bootdevice/by-name/cache
    check_fs /dev/block/bootdevice/by-name/cache ext4
    mount ext4 /dev/block/bootdevice/by-name/cache /cache nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic

    wait /dev/block/bootdevice/by-name/persist
    check_fs /dev/block/bootdevice/by-name/persist ext4
    mount ext4 /dev/block/bootdevice/by-name/persist /persist nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic

    wait /dev/block/bootdevice/by-name/efs
    check_fs /dev/block/bootdevice/by-name/efs ext4
    mount ext4 /dev/block/bootdevice/by-name/efs /efs nosuid nodev noatime noauto_da_alloc,discard,journal_async_commit,errors=panic
    chown system radio /efs
    chmod 0771 /efs
    rm -rf /efs/dmverity
    restorecon -R /efs

on post-fs-data
    mkdir /data/tombstones 0771 system system
    mkdir /tombstones/modem 0771 system system
    mkdir /tombstones/lpass 0771 system system
    mkdir /tombstones/wcnss 0771 system system
    mkdir /tombstones/dsps 0771 system system
    mkdir /persist/data/sfs 0700 system system
    mkdir /persist/data/tz 0700 system system

#start camera server as daemon
service qcamerasvr /system/bin/mm-qcamera-daemon
    class main
    user camera
    group camera system inet input graphics

#enable zram
on property:ro.config.zram=true
    swapon_all fstab.qcom
    write /proc/sys/vm/swappiness 100

# Allow usb charging to be disabled peristently
on property:persist.usb.chgdisabled=1
    write /sys/class/power_supply/battery/charging_enabled 0

on property:persist.usb.chgdisabled=0
    write /sys/class/power_supply/battery/charging_enabled 1

service qseecomd /system/bin/qseecomd
   class core
   user root
   group root

service perfd /system/bin/perfd
   class main
   user root
   disabled

service thermal-engine /system/bin/thermal-engine
   class main
   user root
   socket thermal-send-client stream 0666 system system
   socket thermal-recv-client stream 0660 system system
   socket thermal-recv-passive-client stream 0666 system system
   group root

service time_daemon /system/bin/time_daemon
   class late_start
   user root
   group root

service audiod /system/bin/audiod
   class late_start
   user system
   group system

on boot
    start rmt_storage
    #load modules at boot
    insmod /system/lib/modules/adsprpc.ko
    insmod /system/lib/modules/ansi_cprng.ko
    insmod /system/lib/modules/core_ctl.ko
    insmod /system/lib/modules/evbug.ko
    insmod /system/lib/modules/gator.ko
    insmod /system/lib/modules/msm-buspm-dev.ko
    insmod /system/lib/modules/radio-iris-transport.ko
    insmod /system/lib/modules/spidev.ko
    insmod /system/lib/modules/tcp_htcp.ko
    insmod /system/lib/modules/tcp_westwood.ko
    insmod /system/lib/modules/wlan.ko
#    insmod /system/lib/modules/oprofile.ko
#    insmod /system/lib/modules/test-iosched.ko
#    insmod /system/lib/modules/mmc_block_test.ko
#    insmod /system/lib/modules/mmc_test.ko
#    insmod /system/lib/modules/dma_test.ko
    
# access permission for secure touch
    chmod 0660 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch_enable
    chmod 0440 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch
    chmod 0660 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch_enable
    chmod 0440 /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch
    chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch_enable
    chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0020/secure_touch
    chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch_enable
    chown system drmrpc /sys/devices/soc.0/78b9000.i2c/i2c-5/5-0070/secure_touch

service wcnss-service /system/bin/wcnss_service
    class main
    user system
    group system wifi radio
    oneshot

on charger
    wait /dev/block/bootdevice/by-name/system
    mount ext4 /dev/block/bootdevice/by-name/system /system ro barrier=1
    chown root system /sys/class/power_supply/bms/current_now
    chown root system /sys/class/power_supply/bms/voltage_ocv
    chmod 0664 /sys/class/power_supply/bms/current_now
    chmod 0664 /sys/class/power_supply/bms/voltage_ocv
    start vm_bms
    load_all_props
    start qcom-post-boot

service imsqmidaemon /system/bin/imsqmidaemon
    class main
    user system
    socket ims_qmid stream 0660 system radio
    group radio net_raw log qcom_diag

service imsdatadaemon /system/bin/imsdatadaemon
    class main
    user system
    socket ims_datad stream 0660 system radio
    group system wifi radio inet net_raw log qcom_diag net_admin
    disabled

on property:sys.ims.QMI_DAEMON_STATUS=1
    start imsdatadaemon

service qmi_sfs_server /system/bin/qmi_sfs_server
   class core
   user system
   group system net_raw

service ims_rtp_daemon /system/bin/ims_rtp_daemon
   class main
   user system
   socket ims_rtpd stream 0660 system radio
   group radio net_raw diag qcom_diag log
   disabled

on property:sys.ims.DATA_DAEMON_STATUS=1
    start ims_rtp_daemon
