wwan: update

This commit is contained in:
CN_SZTL 2019-10-19 08:34:18 +08:00
parent 6fe5f3bda3
commit 119a70c7f5
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
4 changed files with 56 additions and 21 deletions

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=wwan
PKG_VERSION:=2014-07-17
PKG_RELEASE=1
PKG_VERSION:=2019-04-29
PKG_RELEASE=4
PKG_LICENSE:=GPL-2.0
PKG_LICENSE_FILES:=

View File

@ -0,0 +1,4 @@
{
"desc": "Sierra MC7304",
"type": "qmi"
}

View File

@ -0,0 +1,4 @@
{
"desc": "Quectel EC25",
"type": "qmi",
}

View File

@ -32,31 +32,55 @@ proto_wwan_init_config() {
proto_config_add_string pincode
proto_config_add_string delay
proto_config_add_string modes
proto_config_add_string bus
}
proto_wwan_setup() {
local driver usb devicename desc
local driver usb devicename desc bus
for a in `ls /sys/bus/usb/devices`; do
local vendor product
[ -z "$usb" -a -f /sys/bus/usb/devices/$a/idVendor -a -f /sys/bus/usb/devices/$a/idProduct ] || continue
vendor=$(cat /sys/bus/usb/devices/$a/idVendor)
product=$(cat /sys/bus/usb/devices/$a/idProduct)
[ -f /lib/network/wwan/$vendor:$product ] && {
usb=/lib/network/wwan/$vendor:$product
devicename=$a
}
done
json_get_vars bus
if [ -L "/sys/bus/usb/devices/${bus}" ]; then
if [ -f "/sys/bus/usb/devices/${bus}/idVendor" ] \
&& [ -f "/sys/bus/usb/devices/${bus}/idProduct" ]; then
local vendor product
vendor=$(cat /sys/bus/usb/devices/${bus}/idVendor)
product=$(cat /sys/bus/usb/devices/${bus}/idProduct)
[ -f /lib/network/wwan/$vendor:$product ] && {
usb=/lib/network/wwan/$vendor:$product
devicename=$bus
}
else
echo "wwan[$$]" "Specified usb bus ${bus} was not found"
proto_notify_error "$interface" NO_USB
proto_block_restart "$interface"
return 1
fi
else
echo "wwan[$$]" "Searching for a valid wwan usb device..."
for a in `ls /sys/bus/usb/devices`; do
local vendor product
[ -z "$usb" -a -f /sys/bus/usb/devices/$a/idVendor -a -f /sys/bus/usb/devices/$a/idProduct ] || continue
vendor=$(cat /sys/bus/usb/devices/$a/idVendor)
product=$(cat /sys/bus/usb/devices/$a/idProduct)
[ -f /lib/network/wwan/$vendor:$product ] && {
usb=/lib/network/wwan/$vendor:$product
devicename=$a
}
done
fi
echo "wwan[$$]" "Using wwan usb device on bus $devicename"
[ -n "$usb" ] && {
local old_cb control data
json_set_namespace wwan old_cb
json_init
json_load "$(cat $usb)"
json_load "$(cat "$usb")"
json_select
json_get_vars desc control data
json_set_namespace $old_cb
json_set_namespace "$old_cb"
[ -n "$control" -a -n "$data" ] && {
ttys=$(ls -d /sys/bus/usb/devices/$devicename/${devicename}*/tty?* /sys/bus/usb/devices/$devicename/${devicename}*/tty/tty?* | sed "s/.*\///g" | tr "\n" " ")
@ -68,6 +92,9 @@ proto_wwan_setup() {
[ -z "$ctl_device" ] && for net in $(ls /sys/class/net/ | grep -e wwan -e usb); do
[ -z "$ctl_device" ] || continue
[ -n "$bus" ] && {
[ $(readlink /sys/class/net/$net | grep $bus) ] || continue
}
driver=$(grep DRIVER /sys/class/net/$net/device/uevent | cut -d= -f2)
case "$driver" in
qmi_wwan|cdc_mbim)
@ -88,9 +115,9 @@ proto_wwan_setup() {
return 1
}
uci_set_state network $interface driver "$driver"
uci_set_state network $interface ctl_device "$ctl_device"
uci_set_state network $interface dat_device "$dat_device"
uci_set_state network "$interface" driver "$driver"
uci_set_state network "$interface" ctl_device "$ctl_device"
uci_set_state network "$interface" dat_device "$dat_device"
case $driver in
qmi_wwan) proto_qmi_setup $@ ;;
@ -103,9 +130,9 @@ proto_wwan_setup() {
proto_wwan_teardown() {
local interface=$1
local driver=$(uci_get_state network $interface driver)
ctl_device=$(uci_get_state network $interface ctl_device)
dat_device=$(uci_get_state network $interface dat_device)
local driver=$(uci_get_state network "$interface" driver)
ctl_device=$(uci_get_state network "$interface" ctl_device)
dat_device=$(uci_get_state network "$interface" dat_device)
case $driver in
qmi_wwan) proto_qmi_teardown $@ ;;