{ config, lib, ... }:

let
  cfg = config.hardware.raspberry-pi."4".backlight;
in
{
  options.hardware = {
    raspberry-pi."4".backlight = {
      enable = lib.mkEnableOption ''
        Enable the backlight support for the Raspberry Pi official Touch Display
      '';
    };
  };

  config = lib.mkIf cfg.enable {
    hardware.deviceTree = {
      overlays = [
        # This overlay was originally taken from:
        # https://github.com/raspberrypi/linux/blob/rpi-6.1.y/arch/arm/boot/dts/overlays/rpi-backlight-overlay.dts
        # The only modification made was to change the compatible field to bcm2711
        # this is the same as for the 5.15.y kernel
        {
          name = "rpi-backlight-overlay";
          dtsText = ''
            /*
             * Devicetree overlay for mailbox-driven Raspberry Pi DSI Display
             * backlight controller
             */
            /dts-v1/;
            /plugin/;

            / {
              compatible = "brcm,bcm2711";

              fragment@0 {
                target-path = "/";
                __overlay__ {
                  rpi_backlight: rpi_backlight {
                    compatible = "raspberrypi,rpi-backlight";
                    firmware = <&firmware>;
                    status = "okay";
                  };
                };
              };
            };
          '';
        }
      ];
    };
  };
}