# Komodo specific init.rc
import /vendor/etc/init/hw/init.${ro.board.platform}.board.rc

on init && property:ro.vendor.factory=1
    import /vendor/etc/init/hw/init.factory.rc

on init && property:ro.boot.hardware.platform=zuma
    setprop vendor.powerhal.config powerhint-proto.json

on init
    # eSE streset tool name
    setprop persist.vendor.se.streset libstreset24
# No se_chip_en for P1.0
on late-init && property:ro.boot.hardware.revision=PROTO1.0
    setprop persist.vendor.se.reset.chip_en false

on early-boot
    # Wait for insmod_sh to finish all common modules
    wait_for_prop vendor.common.modules.ready 1
    start insmod_sh_komodo

service insmod_sh_komodo /vendor/bin/insmod.sh /vendor_dlkm/etc/init.insmod.${ro.hardware}.cfg
    class main
    user root
    group root system
    disabled
    oneshot

on property:vendor.mfgapi.touchpanel.permission=1
    chmod 0600 /sys/devices/virtual/sec/tsp/cmd
    chown system system /sys/devices/virtual/sec/tsp/cmd

# Permissions for display
on fs
    chown system system /sys/class/backlight/panel0-backlight/acl_mode

    # Permission for SSC mode enable
    chown system system /sys/class/backlight/panel0-backlight/ssc_en
    chmod 664 /sys/class/backlight/panel0-backlight/ssc_en

# WiFi
on post-fs-data
    setprop wifi.direct.interface p2p-dev-wlan0
    setprop wifi.aware.interface aware_nmi0

    # Speaker amp permission
    chmod 644 /mnt/vendor/persist/audio/speaker.cal

# Bluetooth
on post-fs-data
    chown bluetooth system /proc/bluetooth/timesync

# Thermal
on late-init && property:ro.boot.hardware.revision=PROTO1.0
    setprop vendor.thermal.config "thermal_info_config_proto.json"

on late-init && property:ro.boot.hardware.revision=PROTO1.1
    setprop vendor.thermal.config "thermal_info_config_proto.json"

# Toggle high_sensitivity according to touch_sensitivity_mode
on property:persist.vendor.touch_sensitivity_mode=0 && property:sys.boot_completed=1
    write /sys/devices/virtual/goog_touch_interface/gti.0/screen_protector_mode_enabled 0

on property:persist.vendor.touch_sensitivity_mode=1 && property:sys.boot_completed=1
    write /sys/devices/virtual/goog_touch_interface/gti.0/screen_protector_mode_enabled 1

# ODPM
on early-boot && property:ro.boot.hardware.sku=GZC4K
    write /sys/bus/iio/devices/iio:device0/enabled_rails "CH11=BUCK12S"
    write /sys/bus/iio/devices/iio:device1/enabled_rails "CH11=BUCK12S"
on early-boot && property:ro.boot.hardware.sku=GQ57S
    write /sys/bus/iio/devices/iio:device0/enabled_rails "CH11=BUCK12S"
    write /sys/bus/iio/devices/iio:device1/enabled_rails "CH11=BUCK12S"

# Start the twoshay touch service
on property:sys.boot_completed=1
    chown system input /dev/touch_offload
    chmod 660 /dev/touch_offload
    start twoshay

# For Japan sku, always enforce camera shutter sound
# Since this property is read by the audio server in system service,
# it should be written by the system init.
on property:ro.boot.hardware.sku=GQ57S
    setprop audio.camerasound.force true

# Check serial no. from specific KM4 devices for audio.
on property:ro.boot.serialno=*
    setprop vendor.audio_hal.device.serialno ${ro.boot.serialno}
