blob: 9c3c066013a4923d1db24f7873938d3fca14d92e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
|
#!/bin/bash
# This script must be run after mts-io
# to read the hw-version,
# but before anything else needs the
# device tree.
sysdir=/sys/devices/platform/mts-io
I2CDIR="/sys/bus/i2c/devices"
eepromPath="${I2CDIR}/1-0050/eeprom"
DEVTREE="/sys/kernel/config/device-tree/overlays/"
SYSFS="/usr/sbin/mts-io-sysfs"
AP1_EEPROM=${I2CDIR}"/i2c-2/2-0050/eeprom"
AP2_EEPROM=${I2CDIR}"/i2c-2/2-0052/eeprom"
install_all_dtbo() {
for f in *.dtbo ; do
if ! [[ -f $f ]] ; then
continue
fi
# f2 is the extracted device name
base=$(basename $f .dtbo)
/bin/mkdir ${DEVTREE}/$base || true
/bin/cat $f >${DEVTREE}/$base/dtbo
done
}
install_dtbo_dir() {
if ! [[ -d ${DEVTREE} ]] ; then
mount configfs
fi
install_all_dtbo
gpiob1=0
gpiob2=0
if [[ -f $AP1_EEPROM ]] ; then
eeprom1=$(mts-id-eeprom --accessory-card --in-file "$AP1_EEPROM" 2>/dev/null)
if [[ $eeprom1 =~ [[:space:]]hw-version:[[:space:]]*\"MTAC-GPIOB- ]] ; then
gpiob1=1
fi
fi
if [[ -f $AP2_EEPROM ]] ; then
eeprom2=$(mts-id-eeprom --accessory-card --in-file "$AP2_EEPROM" 2>/dev/null)
if [[ $eeprom2 =~ [[:space:]]hw-version:[[:space:]]*\"MTAC-GPIOB- ]] ; then
gpiob2=1
fi
fi
if ((gpiob1 == 1)) || ((gpiob2 == 1)) ; then
/usr/bin/logger -t "mts-io" -p daemon.info -s 'Loading MTAC-GPIOB Device Tree'
cd gpiob
else
/usr/bin/logger -t "mts-io" -p daemon.info -s 'Loading standard SPI Device Tree'
cd lora
fi
install_all_dtbo
}
# Device tree format:
# [mach]
# [rev]
# [file1] [file2] [file3] capability
# [flag]
# [file1] [file2] [file3]
setdevtree() {
eeprom=$(mts-id-eeprom --in-file "$eepromPath" 2>/dev/null)
if (( $? != 0 )); then
echo "Failed to read EEPROM from the Base Board"
return 1
fi
[[ $eeprom =~ [[:space:]]hw-version:[[:space:]]*\"([^\"]+) ]]
hw=${BASH_REMATCH[1]}
mach=${hw/%-*}
rev=${hw/#*-/}
echo mach is $mach
echo rev is $rev
regx='capa-(.*):[[:space:]]*true'
capflags=$(echo "$eeprom" | egrep "$regx" | sed -e 's/capa-//g' -e 's/: true//')
capflags=" ${capflags} "
# add device tree overlays, if they exist.
[[ -d /lib/dtoverlays ]] || return 1
(
cd /lib/dtoverlays
cd ${mach}
best="-1"
for d in * ; do
if awk "BEGIN{if ($d <= $rev)exit 1}" ; then
continue
fi
if awk "BEGIN{if ($d < $best)exit 1}" ; then
best="$d"
fi
done
if [[ $best == -1 ]] ; then
# No overlay found
exit 0
fi
cd $best
install_dtbo_dir
if [[ -d capability ]] ; then
cd capability
for d in * ; do
echo "We have found overlay capability directory $d"
if [[ ${capflags} =~ [[:space:]]${d}[[:space:]] ]] ; then
echo "This device has capabilithy $d so install the overlay"
(
cd $d
install_dtbo_dir
)
fi # Does a given capability flag exist in the EEPROM
done # Loop over all capabilities for this machine and version overlays
fi # Is there a capability directory to be installed?
)
}
case $1 in
start)
/usr/bin/logger -t "mts-io" -p daemon.info -s "Loading device tree overlay"
setdevtree
;;
stop)
echo "Not implemented"
;;
*)
echo "Usage: $0 {start|stop}"
exit 2
;;
esac
|