on init
    # Update fastcharge firmware
    write /proc/fastchg_fw_update 1

on fs
    mount_all /vendor/etc/fstab.mt6785 --early
    mount_all /vendor/etc/fstab.mt6785 --late

    # Update touchpanel firmware in case we ship newer firmware in /odm
    write /proc/touchpanel/tp_fw_update 0

on post-fs
    # Unmount the overridden fstab because the SELinux label is incorrect
    # and some MTK daemons can crash because of that
    # (at post-fs, the fstab has already been used to mount the partitions,
    #  so it is fine to just revert back)
    umount /vendor/etc/fstab.mt6785

on post-fs-data
    # VideoCodec
    chmod 0666 /dev/video0
    chmod 0666 /dev/video1

    # Services
    setprop init.svc.console stopped

    # AudioDump
    mkdir /data/vendor/audiohal 0771 system audio
    mkdir /data/vendor/audiohal/audio_param 0771 system audio

on property:sys.boot_completed=1
    # ZRAM
    swapon_all /vendor/etc/fstab.mt6785

    # Disable edge limit control interface
    write /proc/touchpanel/oplus_tp_limit_enable 0

    # Enable oppo touchpanel direction
    write /proc/touchpanel/oplus_tp_direction 1

    # OTG
    write /sys/class/power_supply/usb/otg_switch 1

on property:persist.vendor.radio.port_index=""
    setprop sys.usb.config adb

service vendor.media.omx /vendor/bin/hw/android.hardware.media.omx@1.0-service
    override
    class main
    user mediacodec
    group camera drmrpc mediadrm system
    ioprio rt 4
    writepid /dev/cpuset/foreground/tasks

on property:ro.boot.product.hardware.sku=nfc
    start vendor.nfc_hal_service

service vendor.nfc_hal_service /vendor/bin/hw/android.hardware.nfc@1.2-service
    override
    disabled
    class hal
    user nfc
    group nfc
