rk3588s android13 modem移植(仅参考)
(仅参考) 没有实物验证
rk3588s android13 modem移植
modem型号为移远EC20,内核版本5.10, radio服务版本为1.5
1.内核驱动移植
1.1 增加EC20 vid pid(补丁来自移远移植指导)
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index b878f4c87fee..e3272eac4ead 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -2161,6 +2161,7 @@ static struct usb_serial_driver option_1port_device = {
.suspend = usb_wwan_suspend,
.resume = usb_wwan_resume,
#endif
+ .reset_resume = usb_wwan_resume,
};
static struct usb_serial_driver * const serial_drivers[] = {
@@ -2184,6 +2185,10 @@ static int option_probe(struct usb_serial *serial,
&serial->interface->cur_altsetting->desc;
unsigned long device_flags = id->driver_info;
+ if (serial->dev->descriptor.idVendor == QUECTEL_VENDOR_ID &&
+ serial->dev->descriptor.idProduct == QUECTEL_PRODUCT_EC25 &&
+ serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4)
+ return -ENODEV;
/* Never bind to the CD-Rom emulation interface */
if (iface_desc->bInterfaceClass == USB_CLASS_MASS_STORAGE)
return -ENODEV;
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -435,8 +435,7 @@ void usb_wwan_close(struct usb_serial_port *port)
/*
* Need to take susp_lock to make sure port is not already being
- * resumed, but no need to hold it due to the tty-port initialized
- * flag.
+ * resumed, but no need to hold it due to initialized
*/
spin_lock_irq(&intfdata->susp_lock);
if (--intfdata->open_ports == 0)
@@ -469,6 +468,7 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
struct usb_serial *serial = port->serial;
struct usb_wwan_intf_private *intfdata = usb_get_serial_data(serial);
struct urb *urb;
+ struct usb_device_descriptor *desc = &serial->dev->descriptor;
urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */
if (!urb)
@@ -481,6 +481,14 @@ static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
if (intfdata->use_zlp && dir == USB_DIR_OUT)
urb->transfer_flags |= URB_ZERO_PACKET;
+ if (dir == USB_DIR_OUT) {
+ if ((desc->idVendor == cpu_to_le16(0x1286) &&
+ desc->idProduct == cpu_to_le16(0x4e3c)))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ if (desc->idVendor == cpu_to_le16(0x2c7c))
+ urb->transfer_flags |= URB_ZERO_PACKET;
+ }
+
return urb;
}
1.2 增加qmi_wwan_q驱动
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -37,7 +37,8 @@ obj-$(CONFIG_USB_NET_CX82310_ETH) += cx82310_eth.o
obj-$(CONFIG_USB_NET_CDC_NCM) += cdc_ncm.o
obj-$(CONFIG_USB_NET_HUAWEI_CDC_NCM) += huawei_cdc_ncm.o
obj-$(CONFIG_USB_VL600) += lg-vl600.o
-obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o
+#obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan.o
+obj-$(CONFIG_USB_NET_QMI_WWAN) += qmi_wwan_q.o
obj-$(CONFIG_USB_NET_CDC_MBIM) += cdc_mbim.o
obj-$(CONFIG_USB_NET_CH9200) += ch9200.o
obj-$(CONFIG_USB_NET_AQC111) += aqc111.o
1.3 增加供电配置打开usb接口,根据硬件实际情况配置
注册成功后确保存在如下节点
2 添加uevent权限节点
2.1 uevent节点修改
device/rockchip/common
2.2 修改usb节点名称
system/core
diff --git a/init/devices.cpp b/init/devices.cpp
index d4a3cb9d3..f7c99b626 100644
--- a/init/devices.cpp
+++ b/init/devices.cpp
@@ -550,6 +550,8 @@ void DeviceHandler::HandleUevent(const Uevent& uevent) {
int device_id = uevent.minor % 128 + 1;
devpath = StringPrintf("/dev/bus/usb/%03d/%03d", bus_id, device_id);
}
+ } else if (uevent.subsystem == "usbmisc" && !uevent.device_name.empty()) {
+ devpath = "/dev/" + uevent.device_name;
} else if (StartsWith(uevent.subsystem, "usb")) {
// ignore other USB events
return;
3 ril库移植与radio服务配置
默认的rk代码已经支持部分radio相关服务,但比较旧,需要修改
3.1 manifest配置
device/rockchip/common/4g_modem/manifest.xml
编译radio服务
device/rockchip/common/modules/4g_modem.mk
指定系统ril库路径



评论