#!/usr/bin/env bash set -euo pipefail root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" device=/dev/video5 loaded() { test -d "/sys/module/$1"; } root_command() { if [[ $EUID -eq 0 ]]; then "$@"; else sudo -n "$@"; fi; } if [[ -c "$device" ]] && loaded max9295 && loaded max9296 && loaded sgx_yuv_gmsl2; then echo "Camera already initialized: $device" exit 0 fi for driver in max9295 max9296 sgx-yuv-gmsl2; do file="$root/bin/drivers/$driver.ko" [[ -f "$file" ]] || { echo "Missing driver: $file" >&2; exit 1; } [[ "$(modinfo -F vermagic "$file")" == "$(uname -r) "* ]] || { echo "Kernel mismatch: $file" >&2; exit 1; } done loaded max9295 || root_command insmod "$root/bin/drivers/max9295.ko" loaded max9296 || root_command insmod "$root/bin/drivers/max9296.ko" loaded sgx_yuv_gmsl2 || root_command insmod "$root/bin/drivers/sgx-yuv-gmsl2.ko" gmsl_mode=2,2,2,2 for _ in {1..20}; do [[ -c "$device" ]] && break; sleep 0.25; done [[ -c "$device" ]] || { echo "$device was not created; verify camera/DTB" >&2; exit 1; } v4l2-ctl -d "$device" -c sensor_mode=1,trig_pin=0xffff0007