##################################################################################
# Helper script: /load_kernel_modules.scr/platform/aarch64/mediatek
# Purpose......: Set the Kernel modules for Hardware Models that uses the MediaTek
#                SoC within the Slackware initial RAM disk ('OS initrd')
#                and the Slackware Installer.
#                Currently supported SoC Models:
#                * Kompanio 1200 & 1390  (MT8195)
#                * Kompanio 820 & 828    (MT8192)
#                * Kompanio 839          (MT8188)
#                * Kompanio 520 & 528    (MT8186)
#                 Currently supported Hardware Models:
#                  * Lenovo IdeaPad Slim 3 (14M868) - Magneton (tested)
#                  * ASUS Chromebook CM14 Flip (CM1402F) - Tentacruel (not tested)
#                  * ASUS Chromebook CM14 (CM1402C) - Tentacool (not tested)
#                  * Lenovo 300e Yoga Chromebook Gen 4 - Steelix (not tested)
#                  * Lenovo 100e Chromebook Gen 4 - Rusty (not tested)
#                * Kompanio 500          (MT8183)
#                 Currently supported Hardware Models:
#                  * Lenovo Chromebook Duet/Lenovo IdeaPad Duet Chromebook (tested)
#                  * Lenovo 10e Chromebook Tablet (not tested)
#                  * Acer Chromebook Spin 311 (CP311-3H) (not tested)
#                  * HP Chromebook x360 11MK G3 EE (not tested)
#                  * ASUS Chromebook Flip CM3 (CM3200) (not tested)
#                  * ASUS Chromebook Detachable CM3 (CM3000) (not tested)
#                  * ASUS Chromebook Detachable CZ1 (not tested)
#                This script is sourced from '/load_kernel_modules'
##################################################################################

##################################################################################
# Author.......: William Burlamachi <william.armbit@outlook.com>
# Upstream repo: https://gitlab.com/w.slk-hw/cros-slk-aarch64
# Date.........: 22-Jun-2026
# Maintainer...: William Burlamachi <william.armbit@outlook.com>
##################################################################################

# define these at the specific board loader
#MOD_CARDS+="  ufs-mediatek"
#MOD_NET+="    dwmac-mediatek mtk-phy-lib mtk-2p5ge phy-mtk-xfi-tphy"

# Note: If the Chromebooks are booted in generic 'PLATWALK' mode, the SOC_NAME
# will need to be defined within its own case statement, if module black listing
# is required.
case $HWM in
   "Acer Tomato (rev1) board"|"Acer Tomato (rev2) board"|"Acer Tomato (rev3 - 4) board"|"HP Dojo (sku 1, 3, 5, 7) board"|"MediaTek MT8195 "*|PLATWALK)
      SOC_NAME=mt8195

      platform_detected=1
      # Load the parent platform drivers for the SoC:
      kmod_load_subsyst_soc=1

      MOD_CLKS="    clk-${SOC_NAME}-apusys_pll clk-${SOC_NAME}-cam \
                    clk-${SOC_NAME}-ccu clk-${SOC_NAME}-img \
                    clk-${SOC_NAME}-ipe clk-${SOC_NAME}-scp_adsp \
                    clk-${SOC_NAME}-vdec clk-${SOC_NAME}-vdo0 \
                    clk-${SOC_NAME}-vdo1 clk-${SOC_NAME}-venc \
                    clk-${SOC_NAME}-vpp0 clk-${SOC_NAME}-vpp1 \
                    clk-${SOC_NAME}-wpe"
      MOD_PHY+="    ${MOD_CLKS} mtk_iommu mtk-smi \
                    pwm-mediatek mediatek-cpufreq-hw mediatek-cpufreq"
      MOD_USB+="    mediatek"
      MOD_SOC+="    mtk-mutex mtk-mmsys mtk-socinfo mtk-svs"
      MOD_SOC+="    mtk-pmic-wrap mtk-dvfsrc"
      ;;

   "Google Hayato rev1"|"Google Spherion (rev0 - 3)"|"MediaTek MT8192 "*|PLATWALK)
      SOC_NAME=mt8192

      platform_detected=1
      # Load the parent platform drivers for the SoC:
      kmod_load_subsyst_soc=1

      MOD_CLKS="    clk-${SOC_NAME}-aud clk-${SOC_NAME}-cam \
                    clk-${SOC_NAME}-img clk-${SOC_NAME}-ipe \
                    clk-${SOC_NAME}-mdp clk-${SOC_NAME}-msdc \
                    clk-${SOC_NAME}-scp_adsp clk-${SOC_NAME}-vdec \
                    clk-${SOC_NAME}-venc"
      MOD_PHY+="    ${MOD_CLKS} mtk_iommu mtk-smi \
                    pwm-mediatek mediatek-cpufreq-hw mediatek-cpufreq"
      MOD_USB+="    mediatek"
      MOD_SOC+="    mtk-mutex mtk-mmsys mtk-socinfo mtk-svs"
      MOD_SOC+="    mtk-dvfsrc"
      ;;

   "Google Ciri sku"*|"MediaTek MT8188 "*|PLATWALK)
      SOC_NAME=mt8188

      platform_detected=1
      # Load the parent platform drivers for the SoC:
      kmod_load_subsyst_soc=1

      MOD_CLKS="    clk-${SOC_NAME}-adsp_audio26m clk-${SOC_NAME}-cam \
                    clk-${SOC_NAME}-ccu clk-${SOC_NAME}-img \
                    clk-${SOC_NAME}-ipe clk-${SOC_NAME}-vdec \
                    clk-${SOC_NAME}-vdo0 clk-${SOC_NAME}-vdo1 \
                    clk-${SOC_NAME}-venc clk-${SOC_NAME}-vpp0 \
                    clk-${SOC_NAME}-vpp1 clk-${SOC_NAME}-wpe"
      MOD_PHY+="    ${MOD_CLKS} mtk_iommu mtk-smi \
                    pwm-mediatek mediatek-cpufreq-hw mediatek-cpufreq"
      MOD_USB+="    mediatek"

      # Ethernet network driver:
      #MOD_NET+="    dwmac-mediatek mtk-phy-lib mtk-2p5ge"
      # Any modules related to compression/decompression and cryptography
      MOD_CMP+="    "
      #MOD_CRYPTO+=" "
      MOD_SOC+="    mtk-mutex mtk-mmsys mtk-socinfo mtk-svs"
      ;;

   "Google Magneton "*|"Google Ponyta sku"*|"Google Rusty "*|"Google Starmie sku"*|"Google Steelix "*|"Google Tentacool "*|"Google Tentacruel "*|"Google Voltorb "*|"Google chinchou "*|"Google squirtle "*|"MediaTek MT8186"*|PLATWALK)
      SOC_NAME=mt8186

      platform_detected=1
      # Load the parent platform drivers for the SoC:
      kmod_load_subsyst_soc=1

      MOD_CLKS="    clk-${SOC_NAME}-cam clk-${SOC_NAME}-img \
                    clk-${SOC_NAME}-ipe clk-${SOC_NAME}-mdp \
                    clk-${SOC_NAME}-apmixedsys clk-${SOC_NAME}-mm \
                    clk-${SOC_NAME}-vdec clk-${SOC_NAME}-venc \
                    clk-${SOC_NAME}-wpe clk-${SOC_NAME}-topckgen \
                    clk-${SOC_NAME}-infra_ao clk-${SOC_NAME}-mfg clk-${SOC_NAME}-img \
                    clk-${SOC_NAME}-mcu clk-${SOC_NAME}-cam \
                    clk-${SOC_NAME}-imp_iic_wrap clk-${SOC_NAME}-mdp"

      MOD_PHY+="    ${MOD_CLKS} mtk_iommu mtk-smi \
                    pwm-mediatek mediatek-cpufreq-hw mediatek-cpufreq"
      MOD_PHY+="    phy-mtk-hdmi-drv phy-mtk-dp lvts-thermal mtk-pmic-keys"
      MOD_PHY+="    mtk-dvfsrc-regulator phy-mtk-xsphy phy-mtk-tphy mtk-adsp-ipc"

      # Video/display drivers:
      MOD_VIDEO+="  pwm_bl drm_display_helper drm_dma_helper drm_dp_aux_bus mediatek-drm mtk_cec panel-edp gpu-sched panfrost mtk_dp pwm-mtk-disp"
      MOD_VIDEO+="  analogix_dp anx7625 ite-it6505 phy-mtk-mipi-dsi-drv"
      MOD_VIDEO+="  simple-bridge mtk_hdmi mtk_hdmi_ddc panel-boe-tv101wum-nl6 cec"

      # MFD (Multi Functional Devices) drivers:
      MOD_MFD+="    spi-mtk-nor spi-mt65xx mt6397"

      # For SDHC/MMC storage:
      MOD_CARDS+="  dw_mmc dw_mmc_pltfm mtk-sd ahci_mtk"

      # Drivers for USB hardware for this particular Hardware Model:
      MOD_USB+="    mediatek mtu3 xhci-mtk-hcd"

      # Ethernet network driver:
      #MOD_NET+="    dwmac-mediatek mtk-phy-lib mtk-2p5ge"
      # Any modules related to compression/decompression and cryptography
      MOD_CMP+="    "
      #MOD_CRYPTO+=" "

      # Real Time Clock:
      MOD_RTC+="    rtc_mt6397"
      # Modules for the peripherals on the Hardware Model's main board
      # (outside of the SoC itself)
      MOD_HWM+="    tpm-tis-i2c-cr50 cros_ec_keyb mt6358-regulator led-class-multicolor"

      # Modules for the IP blocks/peripherals embedded within the SoC:
      MOD_SOC+="    mtk-mutex mtk-mmsys mtk-socinfo mtk-svs"
      MOD_SOC+="    mtk-pmic-wrap mtk-devapc mtk-cmdq-helper mtk-dvfsrc"
      ;;


      "Google burnet"*|"Google cozmo"*|"Google damu"*|"Google fennel"*|"Google juniper"*|"Google kappa"*|"Google kenzo"*|"Google makomo"*|"Google pico"*|"Google willow"*|"MediaTek kakadu"*|"Google katsu"*|"MediaTek kodama sku"*|"MediaTek krane sku"*|"Pumpkin MT8183"|"MediaTek MT8183"*|PLATWALK)

      SOC_NAME=mt8183

      platform_detected=1
      # Load the parent platform drivers for the SoC:
      kmod_load_subsyst_soc=1

      MOD_CLKS="    clk-${SOC_NAME}-audio clk-${SOC_NAME}-cam \
                    clk-${SOC_NAME}-img clk-${SOC_NAME}-ipu0 \
                    clk-${SOC_NAME}-ipu1 clk-${SOC_NAME}-ipu_adl \
                    clk-${SOC_NAME}-vdec clk-${SOC_NAME}-venc \
                    clk-${SOC_NAME}-ipu_conn"
      MOD_PHY+="    ${MOD_CLKS} mtk_iommu mtk-smi \
                    pwm-mediatek mediatek-cpufreq-hw mediatek-cpufreq"

      # Drivers for PCI and other core sub systems:
      MOD_PHY+="    phy-mtk-hdmi-drv phy-mtk-dp mtk-pmic-keys"
      MOD_PHY+="    mtk-dvfsrc-regulator phy-mtk-xsphy phy-mtk-tphy mtk-adsp-ipc mt8183"

      # Video/display drivers:
      MOD_VIDEO+="  pwm_bl drm_display_helper drm_dma_helper drm_dp_aux_bus mediatek-drm mtk_cec panel-edp gpu-sched panfrost mtk_dp pwm-mtk-disp"
      MOD_VIDEO+="  analogix_dp anx7625 ite-it6505 phy-mtk-mipi-dsi-drv ite-it66121"
      MOD_VIDEO+="  simple-bridge mtk_hdmi mtk_hdmi_ddc panel-boe-tv101wum-nl6 cec mt6370-backlight"

      # MFD (Multi Functional Devices) drivers:
      MOD_MFD+="    spi-mtk-nor spi-mt65xx mt6360-core mt6370 mt6397 nvmem_mtk-efuse"

      # For SDHC/MMC storage:
      MOD_CARDS+="  dw_mmc dw_mmc_pltfm mtk-sd ahci_mtk"

      # Drivers for USB hardware for this particular Hardware Model:
      MOD_USB+="    mediatek mtu3 xhci-mtk-hcd tcpci_mt6370"

      # Ethernet network driver:
      #MOD_NET+="    dwmac-mediatek mtk-phy-lib mtk-2p5ge"
      # Any modules related to compression/decompression and cryptography
      MOD_CMP+="    "
      #MOD_CRYPTO+=" "

      # Real Time Clock:
      MOD_RTC+="    rtc_mt6397"
      # Modules for the peripherals on the Hardware Model's main board
      # (outside of the SoC itself)
      MOD_HWM+="    tpm-tis-i2c-cr50 mt6370-adc mt6360_charger mt6370-charger cros_ec_keyb mt6358-regulator led-class-multicolor"
      MOD_HWM+="    mt6360-adc"

      # Modules for the IP blocks/peripherals embedded within the SoC:
      MOD_SOC+="    mtk-mutex mtk-mmsys mtk-socinfo mtk-svs"
      MOD_SOC+="    mtk-pmic-wrap mtk-devapc mtk-cmdq-helper mtk-dvfsrc"
      ;;
esac

# TODO: fix screen orientation, hammer and accel
#case $hwm in
#   "MediaTek krane sku"*)
#      # Define a post module load hook:
#      # Try to set the screen rotation.
#      function hwm_hook_post-modload() {
#          ( echo 3 > /sys/class/graphics/fbcon/rotation ) > /dev/null 2>&1 ;}
#esac

case $hwm in
   # MT8186
   "Google Magneton board")
      HWM_SHORTNAME=google-magneton ;;
   "Google Tentacruel board")
      HWM_SHORTNAME=google-tentacruel ;;
   "Google Tentacool board")
      HWM_SHORTNAME=google-tentacool ;;
   "Google Steelix board")
      HWM_SHORTNAME=google-steelix ;;
   "Google Rusty board")
      HWM_SHORTNAME=google-rusty ;;
   "Google Voltorb board")
      HWM_SHORTNAME=google-voltorb ;;
   # MT8183
   "MediaTek krane sku"*)
      HWM_SHORTNAME=google-krane ;;
   "Google burnet board")
      HWM_SHORTNAME=google-burnet ;;
   "Google cozmo board")
      HWM_SHORTNAME=google-cozmo ;;
   "Google damu board")
      HWM_SHORTNAME=google-damu ;;
   "Google kappa board")
      HWM_SHORTNAME=google-kappa ;;
   "Google pico board")
      HWM_SHORTNAME=google-pico ;;
   "Google pico6 board")
      HWM_SHORTNAME=google-pico6 ;;
esac

# The '/load_kernel_modules' script will load the modules
# set above.
