235 lines
6.7 KiB
Bash
235 lines
6.7 KiB
Bash
#!/bin/sh
|
|
# kvmhwd Rev2.4
|
|
|
|
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
|
|
PCIe_HDMI_RST_Pin=451
|
|
|
|
init_alpha_hw(){
|
|
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 0x03001058 32 0x3 # GPIOA27
|
|
|
|
devmem 0x03001068 32 0x6 # GPIOA 18 UART1 RX
|
|
devmem 0x03001064 32 0x6 # GPIOA 19 UART1 TX
|
|
devmem 0x03001070 32 0x2 # GPIOA 28 UART2 TX
|
|
devmem 0x03001074 32 0x2 # GPIOA 29 UART2 RX
|
|
|
|
echo ${Alpha_OLED_RST_Pin} > /sys/class/gpio/export # OLED_RST
|
|
echo out > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/direction
|
|
echo 1 > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/value
|
|
|
|
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
|
|
|
|
# rm /etc/init.d/S25wifimod
|
|
# rm /etc/init.d/S30wifi
|
|
}
|
|
|
|
init_beta_pcie_hw(){
|
|
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 0x03001058 32 0x3 # GPIOA27
|
|
|
|
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
|
|
|
|
devmem 0x03001068 32 0x6 # GPIOA 18 UART1 RX
|
|
devmem 0x03001064 32 0x6 # GPIOA 19 UART1 TX
|
|
devmem 0x03001070 32 0x2 # GPIOA 28 UART2 TX
|
|
devmem 0x03001074 32 0x2 # GPIOA 29 UART2 RX
|
|
|
|
echo ${Beta_OLED_RST_Pin} > /sys/class/gpio/export # Beta OLED_RST
|
|
echo out > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/direction
|
|
echo 1 > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/value
|
|
|
|
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 ${PCIe_HDMI_RST_Pin} > /sys/class/gpio/export # hdmi 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 out > /sys/class/gpio/gpio${PCIe_HDMI_RST_Pin}/direction # rst key
|
|
|
|
echo 1 > /sys/class/gpio/gpio${PCIe_HDMI_RST_Pin}/value # rst key
|
|
|
|
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
|
|
}
|
|
|
|
kvm_hw_detect(){
|
|
if [ ! -e /etc/kvm/hdmi_version ]
|
|
then
|
|
rm /etc/kvm/hw
|
|
fi
|
|
if [ -e /etc/kvm/hw ]
|
|
then
|
|
echo "/etc/kvm/hw exist"
|
|
else
|
|
echo "/etc/kvm/hw not exist"
|
|
if [ -d "/etc/kvm/" ]
|
|
then
|
|
echo "/etc/kvm/ exist"
|
|
else
|
|
mkdir /etc/kvm/
|
|
fi
|
|
devmem 0x0300104C 32 0x3 # GPIOA26 / WiFi_EN
|
|
echo ${WiFi_EN_Pin} > /sys/class/gpio/export # WiFi_EN
|
|
echo out > /sys/class/gpio/gpio${WiFi_EN_Pin}/direction
|
|
echo 0 > /sys/class/gpio/gpio${WiFi_EN_Pin}/value
|
|
|
|
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 0x03001058 32 0x3 # GPIOA27
|
|
|
|
devmem 0x030010D0 32 0x2 # I2C1_SCL
|
|
devmem 0x030010DC 32 0x2 # I2C1_SDA
|
|
devmem 0x030010D4 32 0x3 # OLED_RST
|
|
echo ${Alpha_OLED_RST_Pin} > /sys/class/gpio/export # OLED_RST
|
|
echo out > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/direction
|
|
echo 1 > /sys/class/gpio/gpio${Alpha_OLED_RST_Pin}/value
|
|
|
|
kvm_tmp=$(i2cdetect -ry 1 0x3d 0x3d | grep 3d)
|
|
if [ -n "$kvm_tmp" ]
|
|
then
|
|
# alpha hw
|
|
echo "alpha" > /etc/kvm/hw
|
|
else
|
|
# beta/pcie hw
|
|
echo ${Alpha_OLED_RST_Pin} > /sys/class/gpio/unexport # OLED_RST
|
|
echo ${Beta_OLED_RST_Pin} > /sys/class/gpio/export # Beta_OLED_RST_Pin
|
|
echo out > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/direction
|
|
echo 1 > /sys/class/gpio/gpio${Beta_OLED_RST_Pin}/value
|
|
|
|
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
|
|
|
|
kvm_tmp=$(i2cdetect -ry 4 0x2c 0x2c | grep 2c)
|
|
if [ -n "$kvm_tmp" ]
|
|
then
|
|
echo "c" > /etc/kvm/hdmi_version
|
|
else
|
|
kvm_tmp1=$(i2cdetect -ry 4 0x2b 0x2b | grep 2b)
|
|
if [ -n "$kvm_tmp1" ]
|
|
then
|
|
echo "ux" > /etc/kvm/hdmi_version
|
|
else
|
|
echo "ue" > /etc/kvm/hdmi_version
|
|
fi
|
|
fi
|
|
|
|
kvm_tmp=$(i2cdetect -ry 5 0x3c 0x3c | grep 3c)
|
|
if [ -n "$kvm_tmp" ]
|
|
then
|
|
echo "pcie" > /etc/kvm/hw
|
|
sync
|
|
reboot
|
|
else
|
|
echo "beta" > /etc/kvm/hw
|
|
# rm /etc/init.d/S25wifimod
|
|
# rm /etc/init.d/S30wifi
|
|
sync
|
|
fi
|
|
|
|
echo 1 > /sys/class/gpio/gpio${WiFi_EN_Pin}/value
|
|
echo ${WiFi_EN_Pin} > /sys/class/gpio/unexport # WiFi_EN
|
|
fi
|
|
fi
|
|
sync
|
|
}
|
|
|
|
kvm_hw_init(){
|
|
FIND_FILE="/etc/kvm/hw"
|
|
if [ `grep -c "alpha" $FIND_FILE` -ne '0' ]
|
|
then
|
|
echo "hw = alpha!"
|
|
init_alpha_hw
|
|
fi
|
|
if [ `grep -c "beta" $FIND_FILE` -ne '0' ]
|
|
then
|
|
echo "hw = beta!"
|
|
init_beta_pcie_hw
|
|
fi
|
|
if [ `grep -c "pcie" $FIND_FILE` -ne '0' ]
|
|
then
|
|
echo "hw = pcie!"
|
|
init_beta_pcie_hw
|
|
fi
|
|
}
|
|
|
|
kvm_hdmi_version_detect(){
|
|
hdmi_tmp=$(i2cdetect -ry 4 0x2c 0x2c | grep 2c)
|
|
if [ -n "$hdmi_tmp" ]
|
|
then
|
|
echo "c" > /etc/kvm/hdmi_version
|
|
else
|
|
hdmi_tmp1=$(i2cdetect -ry 4 0x2b 0x2b | grep 2b)
|
|
if [ -n "$hdmi_tmp1" ]
|
|
then
|
|
echo "ux" > /etc/kvm/hdmi_version
|
|
else
|
|
echo "ue" > /etc/kvm/hdmi_version
|
|
fi
|
|
fi
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
kvm_hw_detect
|
|
kvm_hw_init
|
|
;;
|
|
re-detect)
|
|
rm /etc/kvm/hw
|
|
kvm_hw_detect
|
|
kvm_hw_init
|
|
;;
|
|
re-init)
|
|
kvm_hw_init
|
|
;;
|
|
get_hdmi_version)
|
|
kvm_hdmi_version_detect
|
|
;;
|
|
esac
|