#!/bin/sh

set -eu

REVISION="$(od -D -An --endian big /proc/device-tree/system/linux,revision | tr -d ' ')"

if [ -n "$REVISION" ]; then
    IDENTIFIER="vc4"
    DRIVER="vc4"
    SOC=$((REVISION >> 12 & 0xF))

    if [ "$SOC" -eq 4 ]; then
        # This is a 2712 (a Pi 5). Adjust the driver when an alternate display
        # is in use
        case /dev/dri/by-path/*-card in
            /dev/dri/by-path/*.vec-card)
                IDENTIFIER="rp1"
                DRIVER="rp1-vec"
                ;;
            /dev/dri/by-path/*.d[sp]i-card)
                IDENTIFIER="rp1"
                DRIVER="rp1-dsi|rp1-dpi"
                ;;
        esac
    fi

    (
        TMPFILE="$(mktemp /etc/X11/xorg.conf.d/99-v3d-generated.XXX)"
        trap 'rm -f $TMPFILE' EXIT
        sed -e "s/IDENTIFIER/${IDENTIFIER}/; s/DRIVER/${DRIVER}/" > "$TMPFILE" << EOF
# WARNING: This file is generated by update-v3d-config.service; changes to it
# will be lost

Section "OutputClass"
  Identifier "IDENTIFIER"
  MatchDriver "DRIVER"
  Driver "modesetting"
  Option "PrimaryGPU" "true"
EndSection
EOF
        chmod 644 "$TMPFILE"
        mv "$TMPFILE" "/etc/X11/xorg.conf.d/99-v3d-generated.conf"
    )
fi
