#!/bin/bash

VERSION=1.0

# ------------------------------------------------------------

# for old OS (buster)
backlight_buster() {
  DTBDIR=/boot/dtb/rockchip/
  DTBBASE=rk3328-roc-cc
  DTSFILE=${DTBBASE}.dts
  DTBFILE=${DTBDIR}/${DTBBASE}.dtb
  KSCONF=/home/mks/KlipperScreen/KlipperScreen.conf

  if [[ $1 == install ]] ; then
    echo "Adding backlight section to ${DTBFILE}."
    [ -e ${DTBFILE}.nobacklight ] || cp ${DTBFILE} ${DTBFILE}.nobacklight
    dtc -q -I dtb -O dts ${DTBFILE} -o ${DTSFILE}
    if grep -q "\sbacklight {" ${DTSFILE} ; then
      echo "Already installed (not added again)."
    else
      patch -p0 << __PATCH_EOF__
--- ${DTSFILE}	2025-02-26 00:00:00 +0000
+++ ${DTSFILE}	2025-02-26 00:00:00 +0000
@@ -2686,6 +2686,12 @@
 		};
 	};
 
+	backlight {
+		compatible = "gpio-backlight";
+		gpios = <0x31 5 0>;
+		default-on;
+	};
+
 	__symbols__ {
 		ddr_timing = "/ddr_timing";
 		cpu0 = "/cpus/cpu@0";
__PATCH_EOF__
      dtc -q -I dts -O dtb ${DTSFILE} -o ${DTBFILE}
    fi
    echo "Enabling dpms in ${KSCONF}."
    sed -i "/^use_dpms\>/ s/.*/use_dpms = True/" ${KSCONF}
  elif [[ $1 == remove ]] ; then
    echo "Disabling dpms in ${KSCONF}."
    sed -i "/^use_dpms\>/ s/.*/use_dpms = False/" ${KSCONF}
    echo "Reverting to original ${DTBFILE}."
    if [ -e ${DTBFILE}.nobacklight ] ; then
      cp ${DTBFILE}.nobacklight ${DTBFILE}
    else
      echo Error: Could not find ${DTBFILE}.nobacklight
      exit 1
    fi
  fi
}

# ------------------------------------------------------------

# for recent OS (bookworm, trixie, noble, jammy)
backlight_bookworm() {
  OVERLAYNAME=backlight
  USEROVERLAY=/boot/overlay-user
  ARMBIANENV=/boot/armbianEnv.txt

  if [[ $1 == install ]] ; then
    echo "Creating $USEROVERLAY/${OVERLAYNAME}.dtbo"
    cat << __OVERLAY_EOF__ > ${OVERLAYNAME}.dtso
/dts-v1/;
/plugin/;

&{/} {
	backlight {
		compatible = "gpio-backlight";
		gpios = <&gpio3 5 0>;
		default-on;
	};
};
__OVERLAY_EOF__
    mkdir -p $USEROVERLAY
    dtc -@ -I dts -O dtb ${OVERLAYNAME}.dtso -o $USEROVERLAY/${OVERLAYNAME}.dtbo
    echo "Enabling backlight overlay."
    if ! grep -q "user_overlays" $ARMBIANENV ; then
      echo "user_overlays=${OVERLAYNAME}" >> $ARMBIANENV
    else
      if ! grep -q "user_overlays.*${OVERLAYNAME}" $ARMBIANENV ; then
	sed -i "/user_overlays/ s/.*/& ${OVERLAYNAME}/" $ARMBIANENV
      fi
    fi
  elif [[ $1 == remove ]] ; then
    echo "Disabling backlight overlay."
    sed -i "/user_overlays/ s/${OVERLAYNAME}//" $ARMBIANENV
  fi
}

# ------------------------------------------------------------

echo "Backlight-fix v$VERSION for MKS-Klipad50"

[ -e /etc/os-release ] && . /etc/os-release
if [ -z $VERSION_CODENAME ]; then
  echo Error: Could not detect os-release
  exit 1
else
  echo "Detected OS: $VERSION_CODENAME"
fi

if [[ $1 == install ]] || [[ $1 == remove ]]; then
  if [[ $VERSION_CODENAME == buster ]] ; then
    echo "Replacing devicetree for old OS. Action=$1"
    VER=buster
  else
    echo "Using devicetree overlay for recent OS. Action=$1"
    VER=bookworm
  fi
  backlight_$VER $1
  echo "Reboot required for the settings to take effect."
else
  echo "Syntax: $(basename $0) <install>|<remove>"
  exit 1
fi
