#!/bin/sh
# kvmhwd Rev1.0

case "$1" in
  start)
    Alpha_OLED_RST_Pin=371
    Beta_OLED_RST_Pin=502
    Beta_OLED_SCL=595
    Beta_OLED_SDA=507
    WiFi_EN_Pin=506
    Alpha_PWR_LED_Pin=504
    Alpha_HDD_LED_Pin=505
    Alpha_PWR_KEY_Pin=503
    Alpha_RST_KEY_Pin=507
    Beta_PWR_LED_Pin=504
    Beta_PWR_KEY_Pin=503
    Beta_RST_KEY_Pin=505

    if [ ! -d "/etc/kvm/" ]
    then
      mkdir /etc/kvm/
    fi
    
    devmem 0x030010D0 32 0x2  # I2C1_SCL
    devmem 0x030010DC 32 0x2  # I2C1_SDA
    devmem 0x030010D4 32 0x3  # OLED_RST
    devmem 0x0300103C 32 0x3  # GPIOA15
    devmem 0x03001050 32 0x3  # GPIOA22
    devmem 0x0300105C 32 0x3  # GPIOA23
    devmem 0x03001060 32 0x3  # GPIOA24
    devmem 0x03001054 32 0x3  # GPIOA25
    devmem 0x0300104C 32 0x3  # GPIOA26 / WiFi_EN
    devmem 0x03001058 32 0x3  # GPIOA27
    echo ${Alpha_OLED_RST_Pin} > /sys/class/gpio/export  # OLED_RST
    echo ${WiFi_EN_Pin} > /sys/class/gpio/export  # WiFi_EN

    echo out > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/direction
    echo out > /sys/class/gpio/gpio${WiFi_EN_Pin}/direction

    echo 1 > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/value
    echo 0 > /sys/class/gpio/gpio${WiFi_EN_Pin}/value

    kvm_tmp=$(i2cdetect -ry 1 0x3d 0x3d | grep 3d)
    if [ -n "$kvm_tmp" ]
    then
      # alpha hw
      echo "alpha" > /etc/kvm/hw
      echo 1 > /sys/class/gpio/gpio${WiFi_EN_Pin}/value
      echo ${WiFi_EN_Pin} > /sys/class/gpio/unexport  # WiFi_EN

      echo ${Alpha_PWR_LED_Pin} > /sys/class/gpio/export   # pwr led
      echo ${Alpha_HDD_LED_Pin} > /sys/class/gpio/export   # hdd led
      echo ${Alpha_PWR_KEY_Pin} > /sys/class/gpio/export   # pwr key
      echo ${Alpha_RST_KEY_Pin} > /sys/class/gpio/export   # rst key

      echo in > /sys/class/gpio/gpio${Alpha_PWR_LED_Pin}/direction     # pwr led
      echo in > /sys/class/gpio/gpio${Alpha_HDD_LED_Pin}/direction     # hdd led
      echo out > /sys/class/gpio/gpio${Alpha_PWR_KEY_Pin}/direction    # pwr key
      echo out > /sys/class/gpio/gpio${Alpha_RST_KEY_Pin}/direction    # rst key

      rmmod /mnt/system/ko/i2c-gpio.ko
      rmmod /mnt/system/ko/i2c-algo-bit.ko
    else
      echo 1 > /sys/class/gpio/gpio${WiFi_EN_Pin}/value
      echo ${WiFi_EN_Pin} > /sys/class/gpio/unexport  # WiFi_EN
      # beta hw
      echo "beta" > /etc/kvm/hw

      # SDIO
      devmem 0x030010E4 32 0x0  # SDIO CLK
      devmem 0x030010E0 32 0x0  # SDIO CMD
      devmem 0x030010DC 32 0x0  # SDIO D0
      devmem 0x030010D8 32 0x0  # SDIO D1
      devmem 0x030010D4 32 0x0  # SDIO D2
      devmem 0x030010D0 32 0x0  # SDIO D3

      echo ${Beta_PWR_LED_Pin} > /sys/class/gpio/export   # pwr led
      echo ${Beta_PWR_KEY_Pin} > /sys/class/gpio/export   # pwr key
      echo ${Beta_RST_KEY_Pin} > /sys/class/gpio/export   # rst key

      echo in > /sys/class/gpio/gpio${Beta_PWR_LED_Pin}/direction     # pwr led
      echo out > /sys/class/gpio/gpio${Beta_PWR_KEY_Pin}/direction    # pwr key
      echo out > /sys/class/gpio/gpio${Beta_RST_KEY_Pin}/direction    # rst key

      echo ${Alpha_OLED_RST_Pin} > /sys/class/gpio/unexport  # OLED_RST
      
      echo ${Beta_OLED_RST_Pin} > /sys/class/gpio/export  # WiFi_EN
      # echo ${Beta_OLED_SCL} > /sys/class/gpio/export  # WiFi_EN
      # echo ${Beta_OLED_SDA} > /sys/class/gpio/export  # WiFi_EN
      echo out > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/direction
      # echo out > /sys/class/gpio/gpio${Beta_OLED_SCL}/direction
      # echo out > /sys/class/gpio/gpio${Beta_OLED_SDA}/direction
      echo ${Beta_OLED_SCL} > /sys/class/gpio/unexport  # OLED_SCL
      echo ${Beta_OLED_SDA} > /sys/class/gpio/unexport  # OLED_SDA
      rmmod /mnt/system/ko/i2c-gpio.ko
      rmmod /mnt/system/ko/i2c-algo-bit.ko
      insmod /mnt/system/ko/i2c-algo-bit.ko
      insmod /mnt/system/ko/i2c-gpio.ko
      echo 1 > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/value
    fi
    sync
  ;;
esac
