diff --git a/recipes-support/lc15-sysdev-remap/files/lc15-sysdev-remap b/recipes-support/lc15-sysdev-remap/files/lc15-sysdev-remap new file mode 100755 index 0000000..b6dfda8 --- /dev/null +++ b/recipes-support/lc15-sysdev-remap/files/lc15-sysdev-remap @@ -0,0 +1,434 @@ +#!/bin/sh +# This script performs symbolic linking all available system devices +# related to Litecell15 platform to a easy to reach location in filesystem +# +# Author: Minh-Quang Nguyen +# +# Licensed under terms of BSD + +VERSION="0.8" +LOG_FILE='lc15_sysdev_remap.log' +CWD=`pwd` +VERBOSE='' +__USESYSLOG=1 + +# Temp sensors coming from hwmon +declare -a TEMP_DEV_MAP=( + '/var/lc15/temp/main-supply/x' + '/var/lc15/temp/pa0/x' + '/var/lc15/temp/pa1/x' + '/var/lc15/temp/tx0/x' + '/var/lc15/temp/tx1/x' + '/var/lc15/temp/rmsdet/x' + '/var/lc15/temp/ocxo/x' + '/var/lc15/temp/fpga/x' +) + +# Temp sensors coming from thermal zones +declare -a TEMPTH_DEV_MAP=( + '/var/lc15/temp/dsp/x' + '/var/lc15/temp/cpu/x' + '/var/lc15/temp/core/x' + '/var/lc15/temp/iva/x' + '/var/lc15/temp/gpu/x' +) + +declare -a OCXO_DAC_DEV_MAP=( + '/var/lc15/ocxo/x' +) + +declare -a PA_SUPPLY_DEV_MAP=( + '/var/lc15/pa-supply/x' +) + +declare -a PA_STATE_DEV_MAP=( + '/var/lc15/pa-state/pa0/x' + '/var/lc15/pa-state/pa1/x' +) + +declare -a ETH_DEV_MAP=( + '/var/lc15/net/eth0/x' + '/var/lc15/net/eth1/x' +) + +declare -a PWR_SENSING_DEV_MAP=( + '/var/lc15/pwr-sense/main-supply/x' + '/var/lc15/pwr-sense/pa0/x' + '/var/lc15/pwr-sense/pa1/x' +) + +declare -a FPGA_SENSING_DEV_MAP=( + '/var/lc15/pwr-sense/fpga/x' +) + +declare -a RF_SENSING_DEV_MAP=( + '/var/lc15/rf-sense/fwd/x' + '/var/lc15/rf-sense/refl/x' +) + +declare -a LED_DEV_MAP=( + '/var/lc15/leds/led0/x' + '/var/lc15/leds/led1/x' +) + +declare -a OPT_DEV_MAP=( + '/var/lc15/platform/x' +) + +declare -a CLKERR_DEV_MAP=( + '/var/lc15/clkerr/x' +) + +declare -a VSWR_DEV_MAP=( + '/var/lc15/vswr/tx0/x' + '/var/lc15/vswr/tx1/x' +) + +function log_write() +{ + if [ ${__USESYSLOG} -eq 0 ]; then + echo "$*" + else + logger -p local7.info "$*" + fi +} + +function execute() +{ + $* > /dev/null + if [ $? -ne 0 ]; then + echo "ERROR: executing $*" + if [ ${__USESYSLOG} -ne 0 ]; then + logger -p local7.info "ERROR: $*" + fi + fi +} + +function version() +{ + echo + echo "`basename $1` version ${VERSION}" + echo "Script to create symbolic links of available sensors for Litecell15 platform" + echo + exit 0 +} + +function usage() +{ +cat <> /etc/syslog.conf + #execute "/etc/init.d/syslog restart" + __USESYSLOG=0 +} + +############################################# +# +# Main routine +# +############################################# + +# Parse the input options +while getopts :dvh ARG +do + case ${ARG} in + d ) VERBOSE=1;; + v ) version $0;; + h ) usage;; + \?) echo "Invalid option: -$OPTARG" && exit 1;; + esac +done + +#checking for syslog configuration +grep ${LOG_FILE} -r /etc/syslog.conf > /dev/null 2>&1 +if [ $? -ne 0 ]; then + echo 'WARNING: Syslog for Litecell15 system devices remapping is not enabled (using console output)' + syslog_config +fi + +#get Kernel major and minor version +KERNEL_MAJ=`uname -r | head -n1 | cut -d'.' -f1` +KERNEL_MIN=`uname -r | head -n1 | cut -d'.' -f2` +KERNEL_REL=`uname -r | head -n1 | cut -d'.' -f3` + +if [ ! -z ${VERBOSE} ]; then + echo 'Kernel version :' ${KERNEL_MAJ}.${KERNEL_MIN}.${KERNEL_REL} +fi + +log_write "Litecell15 system devices remapping script started" + +#temperature sensor device name coming from hwmon +declare -a TEMP_DEV_NAMES=( '2-0048' '4-0048' '1-0048' 'ncp15xh103_tx0' 'ncp15xh103_tx1' 'ncp15xh103_rmsdet' 'ncp15xh103_ocxo' 'iio_hwmon') +for (( i=0; i<${#TEMP_DEV_NAMES[@]}; i++)) +do + TEMP_DEV_PATHS[${i}]=`find /sys/devices -name 'temp*_input' | grep ${TEMP_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${TEMP_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${TEMP_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${TEMP_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${TEMP_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/temp1_input ${DST_DIR}/temp" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" + else + log_write "Can not find temperature sensor device" ${TEMP_DEV_NAMES[${i}]} + fi +done + +#temperature sensor device name coming from thermal zones +declare -a TEMPTH_DEV_NAMES=( 'dspeve' 'cpu' 'core' 'iva' 'gpu') +for (( i=0; i<${#TEMPTH_DEV_NAMES[@]}; i++)) +do + TEMPTH_DEV_IDS[${i}]=`grep ${TEMPTH_DEV_NAMES[${i}]} -r /sys/class/thermal/thermal_zone*/type | head -n1 | cut -d'/' -f5` + if [ ! -z ${TEMPTH_DEV_IDS[${i}]} ]; then + TEMPTH_DEV_PATHS[${i}]=`find /sys/devices -name 'temp' | grep ${TEMPTH_DEV_IDS[${i}]} | head -n1` + if [ ! -z ${TEMPTH_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${TEMPTH_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${TEMPTH_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${TEMPTH_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/temp ${DST_DIR}/temp" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/thermal" + else + log_write "Can not find temperature thermal device" ${TEMPTH_DEV_NAMES[${i}]} + fi + else + log_write "Can not find temperature thermal device id" ${TEMPTH_DEV_NAMES[${i}]} + fi +done + +#OCXO control device name +OCXO_DAC_DEV_NAME='iio:device' +OCXO_DAC_DEV_PATH=`find /sys/devices/platform -name 'store_eeprom' | grep ${OCXO_DAC_DEV_NAME} | head -n1` +if [ ! -z ${OCXO_DAC_DEV_PATH} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${OCXO_DAC_DEV_PATH} + fi + SRC_DIR=$(echo $(dirname ${OCXO_DAC_DEV_PATH})) + DST_DIR=$(echo $(dirname ${OCXO_DAC_DEV_MAP})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/out_voltage0_raw ${DST_DIR}/voltage" + execute "ln -sf ${SRC_DIR}/store_eeprom ${DST_DIR}/eeprom" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" +else + log_write "Can not find OCXO DAC device" ${OCXO_DAC_DEV_NAME} +fi + +#PA supply device name +PA_SUPPLY_DEV_NAME='pa-supply' +PA_SUPPLY_DEV_PATH=`find /sys/devices/platform -name '*_microvolts' | grep ${PA_SUPPLY_DEV_NAME} | head -n1` +if [ ! -z ${PA_SUPPLY_DEV_PATH} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${PA_SUPPLY_DEV_PATH} + fi + SRC_DIR=$(echo $(dirname ${PA_SUPPLY_DEV_PATH})) + DST_DIR=$(echo $(dirname ${PA_SUPPLY_DEV_MAP})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/min_microvolts ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/max_microvolts ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" +else + log_write "Can not find PA state sensor device" ${PA_SUPPLY_DEV_NAME} +fi + +#PA state device +declare -a PA_STATE_DEV_NAMES=( 'pa0' 'pa1' ) +for (( i=0; i<${#PA_STATE_DEV_NAMES[@]}; i++)) +do + PA_STATE_DEV_PATHS[${i}]=`find /sys/devices/platform -name 'state' | grep ${PA_STATE_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${PA_STATE_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${PA_STATE_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${PA_STATE_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${PA_STATE_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/state ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" + else + log_write "Can not find PA state sensor device" ${PA_STATE_DEV_NAMES[${i}]} + fi +done + +#Ethernet devices +declare -a ETH_DEV_NAMES=( 'eth0' 'eth1' ) +for (( i=0; i<${#ETH_DEV_NAMES[@]}; i++)) +do + ETH_DEV_PATHS[${i}]=`find /sys/devices/platform -name 'address' | grep ${ETH_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${ETH_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${ETH_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${ETH_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${ETH_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/address ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" + else + log_write "Can not find Ethernet device" ${ETH_DEV_NAMES[${i}]} + fi +done + +#Voltage and current sensing devices +declare -a PWR_SENSING_DEV_NAMES=( '0040' '0044' '0045' ) +for (( i=0; i<${#PWR_SENSING_DEV_NAMES[@]}; i++)) +do + PWR_SENSING_DEV_PATHS[${i}]=`find /sys/devices/platform -name '*_input' | grep ${PWR_SENSING_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${PWR_SENSING_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${PWR_SENSING_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${PWR_SENSING_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${PWR_SENSING_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/power1_input ${DST_DIR}/power" + execute "ln -sf ${SRC_DIR}/in1_input ${DST_DIR}/voltage" + execute "ln -sf ${SRC_DIR}/curr1_input ${DST_DIR}/current" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" + else + log_write "Can not find voltage/current sensing device" ${PWR_SENSING_DEV_NAMES[${i}]} + fi +done + +#FPGA voltage sensing devices +FPGA_SENSING_DEV_NAME='iio_hwmon' +FPGA_SENSING_DEV_PATH=`find /sys/devices/platform -name '*_input' | grep ${FPGA_SENSING_DEV_NAME} | head -n1` +if [ ! -z ${FPGA_SENSING_DEV_PATH} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${FPGA_SENSING_DEV_PATH} + fi + SRC_DIR=$(echo $(dirname ${FPGA_SENSING_DEV_PATH})) + DST_DIR=$(echo $(dirname ${FPGA_SENSING_DEV_MAP})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/in1_input ${DST_DIR}/vccint_voltage" + execute "ln -sf ${SRC_DIR}/in2_input ${DST_DIR}/vccaux_voltage" + execute "ln -sf ${FPGA_SENSING_DEV_PATH} ${DST_DIR}/hwmon" +else + log_write "Can not find voltage/current sensing device" ${FPGA_SENSING_DEV_NAME} +fi + +#RF sensing devices +declare -a RF_SENSING_DEV_NAMES=( 'adl5501_rf' 'adl5501_refl') +for (( i=0; i<${#RF_SENSING_DEV_NAMES[@]}; i++)) +do + RF_SENSING_DEV_PATHS[${i}]=`find /sys/devices/platform -name '*_input' | grep ${RF_SENSING_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${RF_SENSING_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${RF_SENSING_DEV_PATHS[${i}]} + fi + SRC_DIR=$(echo $(dirname ${RF_SENSING_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${RF_SENSING_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/power1_input ${DST_DIR}/voltage" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" + else + log_write "Can not find power sensing device" ${RF_SENSING_DEV_NAMES[${i}]} + fi +done + +#User LEDs +declare -a LED_DEV_NAMES=( 'usr0' 'usr1' ) +for (( i=0; i<${#LED_DEV_NAMES[@]}; i++)) +do + LED_DEV_PATHS[${i}]=`find /sys/devices/platform -name 'trigger' | grep ${LED_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${LED_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${LED_DEV_PATHS[${i}]} + fi + + SRC_DIR=$(echo $(dirname ${LED_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${LED_DEV_MAP[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/brightness ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/class" + else + log_write "Can not find user LED device" ${LED_DEV_NAMES[${i}]} + fi +done + +#Clock error measurement device +CLKERR_DEV_NAME='clkerr' +CLKERR_DEV_PATH=`find /sys/devices/platform -name 'clkerr1_*' | grep ${CLKERR_DEV_NAME} | head -n1` + +if [ ! -z ${CLKERR_DEV_PATH} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${CLKERR_DEV_PATH} + fi + SRC_DIR=$(echo $(dirname ${CLKERR_DEV_PATH})) + DST_DIR=$(echo $(dirname ${CLKERR_DEV_MAP})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/clkerr1_average ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/clkerr1_average_accuracy ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/clkerr1_average_interval ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/clkerr1_fault ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/refresh ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/reset ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" +else + log_write "Can not find user CLKERR device" ${CLKERR_DEV_NAME} +fi + +#VSWR measurement device +declare -a VSWR_DEV_NAMES=( 'tx0' 'tx1' ) +for (( i=0; i<${#VSWR_DEV_NAMES[@]}; i++)) +do + VSWR_DEV_PATHS[${i}]=`find /sys/devices/platform -name 'vswr_*' | grep ${VSWR_DEV_NAMES[${i}]} | head -n1` + + if [ ! -z ${VSWR_DEV_PATHS[${i}]} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${VSWR_DEV_PATHS[${i}]} + fi + + SRC_DIR=$(echo $(dirname ${VSWR_DEV_PATHS[${i}]})) + DST_DIR=$(echo $(dirname ${VSWR_DEV_MAP[${i}]})) + BASE_NAME=$(echo $(basename ${VSWR_DEV_PATHS[${i}]})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/${BASE_NAME} ${DST_DIR}/vswr" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/class" + else + log_write "Can not find user VSWR device" ${VSWR_DEV_NAMES[${i}]} + fi +done + +#Platform options and revision device +OPT_DEV_NAME='lc15' +OPT_DEV_PATH=`find /sys/devices/platform -name 'option' | grep ${OPT_DEV_NAME} | head -n1` + +if [ ! -z ${OPT_DEV_PATH} ]; then + if [ ! -z ${VERBOSE} ]; then + echo ${OPT_DEV_PATH} + fi + SRC_DIR=$(echo $(dirname ${OPT_DEV_PATH})) + DST_DIR=$(echo $(dirname ${OPT_DEV_MAP})) + [ ! -d ${DST_DIR} ] && execute "mkdir -p ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/revision ${DST_DIR}" + execute "ln -sf ${SRC_DIR}/option ${DST_DIR}" + execute "ln -sf ${SRC_DIR} ${DST_DIR}/hwmon" +else + log_write "Cannot find platform options device" ${MISC_DEV_NAME} +fi + +log_write "Litecell15 system devices remapping done!" + diff --git a/recipes-support/lc15-sysdev-remap/lc15-sysdev-remap_1.0.bb b/recipes-support/lc15-sysdev-remap/lc15-sysdev-remap_1.0.bb new file mode 100644 index 0000000..b7b2bf6 --- /dev/null +++ b/recipes-support/lc15-sysdev-remap/lc15-sysdev-remap_1.0.bb @@ -0,0 +1,28 @@ +DESCRITOPN = "Remap all available system devices of Litecell15 platform as symbolic links to easy to reach place in /var/lc15/" +LICENSE = "BSD" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/BSD;md5=3775480a712fc46a69647678acb234cb" + +SRC_URI = "file://lc15-sysdev-remap \ + file://lc15-sysdev-remap.init" + +S = "${WORKDIR}" + +inherit gitver-repo + +REPODIR = "${THISDIR}" +REPOFILE = "lc15-sysdev-remap_1.0.bb" +PR := "r${REPOGITFN}" + +REPODIR = "${THISDIR}/files" +REPOFILE = "" +PR := "${PR}.${REPOGITFN}" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${S}/lc15-sysdev-remap ${D}${bindir}/lc15-sysdev-remap +} + +FILES_${PN} += "${bindir} \ + ${sysconfdir}" + +INSANE_SKIP_${PN} = "arch"