#!/bin/bash ### BEGIN INIT INFO # Provides: setup-board # Required-Start: $portmap # Required-Stop: # Should-Start: # Should-Stop: # Default-Start: S # Default-Stop: 0 6 # Short-Description: Setup DX010 board. ### END INIT INFO function export_gpio { label=$3 gpio_dir=$2 gpio_num=$1 gpio_base=`( cat /sys/class/gpio/gpiochip*/base | head -1 ) 2>/dev/null` gpio_label=`( cat /sys/class/gpio/gpiochip*/label | head -1 ) 2>/dev/null` if [[ "X$gpio_base" == "X" ]] || ( [[ "X$label" != "X" ]] && [[ "$label" != "$gpio_label" ]] ); then echo "Platform driver error: No gpiochip found!" exit 1; fi ionum=$((gpio_base+gpio_num)) echo $ionum > /sys/class/gpio/export if [ $? -ne 0 ]; then echo "Platform driver error: Cannot export gpio$ionum!" exit 1; fi if [[ "X$gpio_dir" != "X" ]]; then echo $gpio_dir > /sys/class/gpio/gpio${ionum}/direction if [ $? -ne 0 ]; then echo "Platform driver error: Cannot set direction of gpio$ionum!" exit 1; fi fi } case "$1" in start) echo -n "Setting up board... " modprobe i2c-dev modprobe i2c-mux-pca954x force-deselect-on-exit=1 modprobe dx010_wdt modprobe leds-dx010 modprobe lm75 modprobe slx_gpio_ich found=0 for devnum in 0 1; do devname=`cat /sys/bus/i2c/devices/i2c-${devnum}/name` # iSMT adapter can be at either dffd0000 or dfff0000 if [[ $devname == 'SMBus iSMT adapter at '* ]]; then found=1 break fi done [ $found -eq 0 ] && echo "cannot find iSMT" && exit 1 i2cset -y ${devnum} 0x70 0x10 0x00 0x01 i sleep 0.1 # Attach PCA9548 0x71 Channel Extender for Main Board echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-${devnum}/new_device sleep 0.1 # Attach PCA9548 0x73 Channel Extender for CPU Board echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-${devnum}/new_device sleep 0.1 # Attach PCA9548 0x77 Channel Extender for Fan's EEPROMs echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-${devnum}/new_device sleep 0.1 # Attach syseeprom echo 24lc64t 0x50 > /sys/bus/i2c/devices/i2c-12/new_device # Attach temperature sensors echo lm75b 0x48 > /sys/bus/i2c/devices/i2c-5/new_device echo lm75b 0x49 > /sys/bus/i2c/devices/i2c-6/new_device echo lm75b 0x4a > /sys/bus/i2c/devices/i2c-7/new_device echo lm75b 0x48 > /sys/bus/i2c/devices/i2c-14/new_device echo lm75b 0x4e > /sys/bus/i2c/devices/i2c-15/new_device # Attach fans echo emc2305 0x2e > /sys/bus/i2c/devices/i2c-13/new_device echo emc2305 0x4d > /sys/bus/i2c/devices/i2c-13/new_device echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-18/new_device echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-19/new_device echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-20/new_device echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-21/new_device echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-22/new_device # Attach PSUs echo dps460 0x5a > /sys/bus/i2c/devices/i2c-10/new_device echo dps460 0x5b > /sys/bus/i2c/devices/i2c-11/new_device echo 24c02 0x52 > /sys/bus/i2c/devices/i2c-10/new_device echo 24c02 0x53 > /sys/bus/i2c/devices/i2c-11/new_device # Attach PCA9506 GPIO expander for 40 pins echo pca9505 0x20 > /sys/bus/i2c/devices/i2c-17/new_device modprobe dx010_cpld sleep 1 # Export platform gpio sysfs export_gpio 10 "in" # Fan 1 present export_gpio 11 "in" # Fan 2 present export_gpio 12 "in" # Fan 3 present export_gpio 13 "in" # Fan 4 present export_gpio 14 "in" # Fan 5 present export_gpio 15 "in" # Fan 1 direction export_gpio 16 "in" # Fan 2 direction export_gpio 17 "in" # Fan 3 direction export_gpio 18 "in" # Fan 4 direction export_gpio 19 "in" # Fan 5 direction export_gpio 22 "in" # PSU L PWOK export_gpio 25 "in" # PSU R PWOK export_gpio 27 "in" # PSU L ABS export_gpio 28 "in" # PSU R ABS export_gpio 29 "out" # Fan 2 LED: Red export_gpio 30 "out" # Fan 2 LED: Green export_gpio 31 "out" # Fan 1 LED: Red export_gpio 32 "out" # Fan 1 LED: Green export_gpio 33 "out" # Fan 5 LED: Red export_gpio 34 "out" # Fan 5 LED: Green export_gpio 35 "out" # Fan 3 LED: Red export_gpio 36 "out" # Fan 3 LED: Green export_gpio 37 "out" # Fan 4 LED: Red export_gpio 38 "out" # Fan 4 LED: Green # Turn off/down lpmod by defult (0 - Normal, 1 - Low Pow) echo 0x00000000 > /sys/devices/platform/dx010_cpld/qsfp_lpmode # Attach 32 instances of EEPROM driver QSFP ports for ((n=26;n<=58;n++)); do echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-$n/new_device sleep 0.1 done # Set pca9548 idle_state echo -2 > /sys/bus/i2c/devices/i2c-${devnum}/${devnum}-0071/idle_state echo -2 > /sys/bus/i2c/devices/i2c-${devnum}/${devnum}-0073/idle_state echo -2 > /sys/bus/i2c/devices/i2c-${devnum}/${devnum}-0077/idle_state sleep 0.1 bus_en=8 cfg_r=`i2cget -y -f 8 0x60 0xD1` ((cfg_w=$cfg_r+$bus_en)) i2cset -y -f 8 0x60 0xD1 $cfg_w sleep 0.1 cfg_r=`i2cget -y -f 9 0x20 0xD1` ((cfg_w=$cfg_r+$bus_en)) i2cset -y -f 9 0x20 0xD1 $cfg_w sleep 0.1 /bin/sh /usr/local/bin/platform_api_mgnt.sh init echo "done." ;; stop) echo "done." ;; force-reload|restart) echo "Not supported" ;; *) echo "Usage: /etc/init.d/platform-modules-dx010.init {start|stop}" exit 1 ;; esac exit 0