#!/bin/sh

# Some devices (xiaomi-surya) ship with a touchscreen that has no persistent
# firmware storage. That is unfortunate and means we need to provide firmware
# from the initramfs for FDE to work.
# This is only the case for the novatek touchscreens. Their firmware resides
# in /vendor/firmware. Let's copy it over.
# The file names are novatek_ts_huaxing_fw.bin and novatek_ts_tianma_fw.bin,
# for both panels respectively.

for input in /sys/class/input/input*/uevent
do
	if grep -q "NT36XXX" "$input"
	then
		echo "nt36xxx is loaded, mounting firmware for it!"

		mkdir /firmware-mnt

		for part in /sys/block/sd*/sd*
		do
			DEVNAME="$(grep DEVNAME "$part"/uevent | sed 's/DEVNAME=//g')"
			PARTNAME="$(grep PARTNAME "$part"/uevent | sed 's/PARTNAME=//g')"

			# Could be vendor_a or vendor_b
			if [[ "$PARTNAME" == "vendor"* ]]
			then
				mount -o ro,nodev,noexec,nosuid \
					"/dev/$DEVNAME" /firmware-mnt
				break
			# Super partition with vendor on a subpartition, system if retrofit
			elif [[ "$PARTNAME" == "super" ]] || [[ "$PARTNAME" == "system" ]]
			then
				if ! make-dynpart-mappings "/dev/$DEVNAME"; then continue; fi;

				for dynpart in /dev/mapper/*
				do
					if [[ "$dynpart" == *"vendor"* ]]
					then
						mount -o ro,nodev,noexec,nosuid \
							"$dynpart" /firmware-mnt
						break
					fi
				done
			fi
		done

		if [ -d /firmware-mnt/firmware ]
		then
			for firmware_file in /firmware-mnt/firmware/novatek_ts_*_fw.bin
			do
				echo "Found novatek firmware file at $firmware_file"

				cp $firmware_file /lib/firmware/
			done

			umount /firmware-mnt
		fi
	fi
done
