diff options
Diffstat (limited to 'init.insmod.sh')
-rwxr-xr-x | init.insmod.sh | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/init.insmod.sh b/init.insmod.sh new file mode 100755 index 00000000..645391af --- /dev/null +++ b/init.insmod.sh @@ -0,0 +1,78 @@ +#!/vendor/bin/sh + +############################################################# +### init.insmod.cfg format: ### +### ----------------------------------------------------- ### +### [insmod|setprop|enable/moprobe|wait] [path|prop name] ### +### ... ### +############################################################# + +modules_dir= + +for f in /vendor/lib/modules/*/modules.dep /vendor/lib/modules/modules.dep; do + if [[ -f "$f" ]]; then + modules_dir="$(dirname "$f")" + break + fi +done + +if [[ -z "${modules_dir}" ]]; then + echo "Unable to locate kernel modules directory" 2>&1 + exit 1 +fi + +# imitates wait_for_file() in init +wait_for_file() +{ + filename="${1}" + timeout="${2:-5}" + + expiry=$(($(date "+%s")+timeout)) + while [[ ! -e "${filename}" ]] && [[ "$(date "+%s")" -le "${expiry}" ]] + do + sleep 0.01 + done +} + +install_display_drivers() +{ + panel_drv=`getprop ro.boot.primary_panel_drv` + if [[ -z "$panel_drv" ]]; then + panel_drv="panel-samsung-emul" + fi + modprobe -d "${modules_dir}" exynos-drm.ko + modprobe -d "${modules_dir}" $panel_drv.ko +} + +if [ $# -eq 1 ]; then + cfg_file=$1 +else + # Set property even if there is no insmod config + # to unblock early-boot trigger + setprop vendor.common.modules.ready + setprop vendor.device.modules.ready + setprop vendor.all.modules.ready + setprop vendor.all.devices.ready + exit 1 +fi + +if [ -f $cfg_file ]; then + while IFS="|" read -r action arg + do + case $action in + "insmod") insmod $arg ;; + "setprop") setprop $arg 1 ;; + "enable") echo 1 > $arg ;; + "modprobe") + case ${arg} in + "-b *" | "-b") + arg="-b --all=${modules_dir}/modules.load" ;; + "*" | "") + arg="--all=${modules_dir}/modules.load" ;; + esac + modprobe -a -d "${modules_dir}" $arg ;; + "wait") wait_for_file $arg ;; + "install_display_drivers") install_display_drivers ;; + esac + done < $cfg_file +fi |