联系管理员

开通文章发布权限

扫码 添加微信
微信图片
电话: QQ:1602036736

RK3566 Android13 EC20-4G模块

硬件方案

已在 Android11 调通,无硬件问题。

参考方案

  1. Android13适配EC20能否提供RIL驱动 - 功能分类 / 驱动相关 - 移远支持社区

  2. 求助添加HIDL后编译报错的问题 - 功能分类 / 驱动相关 - 移远支持社区

  3. Android13适配EC20 - 能否提供资料 - 功能分类 / 驱动相关 - 移远支持社区

  4. Android12 适配EC20 - 功能分类 / 驱动相关 - 移远支持社区

  5. RK3588 Android12调试移远EC20模块(外挂小板)_3588 12 适配4g-CSDN博客

  6. RK3568-ANDROID11-4G-EC20-(详细步骤)_rk3568 ec20-CSDN博客

  7. rk3568 android11 ec20 无法上网 - 物联网模组 / 4G标准模组 - 移远支持社区

  8. QuectelWB/Quectel_RIL

  9. q_drivers/qmi_wwan/qmi_wwan_q.c at master · QuectelWB/q_drivers

  10. rk3588 android13调试移远EC20模块(仅参考)-硬件文档博客

  11. rk3588s android13 modem移植(仅参考)-硬件文档博客

 

移植补丁

之前 Android11 移植成功的补丁:

通过网盘分享的文件:RK3566-Android11-EC20补丁
链接: https://pan.baidu.com/s/12Sw7eRT52uoLqlnxKGXYlg 提取码: 1234

参考了上面一堆相关文章后,我制作的:

通过网盘分享的文件:RK3566-Android13-失败补丁EC20
链接: https://pan.baidu.com/s/12yjWiIFRke0ItNn0Ps3vaA 提取码: 1234

相关命令

logcat -b all
getprop | grep ril
ps -elf | grep ril
ps -elf | grep radio
find /  -name  "*.xml"  2>/dev/null | xargs grep IRadio
strings /vendor/lib64/libril.so | grep Quectel
strings  /vendor/lib64/librk-ril.so | grep Quectel
ls -l /dev/cdc-wdm0
ls -l dev/ttyUSB*

 

echo -e "AT+CSQ\r" > /dev/ttyUSB2
//AT命令验证能不能通信

 

报错记录

  1. 串口日志输出 ril-daemon 无法启动。
    图片#B #S #R #60% #auto

解决办法1
/home/lckfb/EX_DISK_4T/liguoyi/android13/hardware/ril/rild/rild.rc

service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libquec-EC20-ril.so
    class main
    user radio
    group radio cache inet misc audio log readproc wakelock
    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW

确保你的 so 文件路径正确。

libquec-EC20-ril.so 换成你自己的 so 文件

解决办法2
 查看logcat信息,发现系统加载 /vendor/lib64/libreference-EC20-ril.so 时会崩溃;查看这个RIL库是否适合在Android 13上使用,若不支持Android 13需找模组厂提供新的库。实测更新用新的就好了。

  1. 获取APN数据为空,导致APN设置失败不注网
    报相关错误:

    07-12 17:23:48.361 D/Phone   (  866): getImsRegistrationTechnology =-1
    07-12 17:23:48.362 E/DCT-C-0 (  866): getPreferredApnSetId: cursor is null
    07-12 17:23:48.362 D/DCT-C-0 (  866): hasMatchedTetherApnSetting: APNs=[]
    07-12 17:23:48.380 D/DCT-C-0 (  866): shouldRestrictDataForEcbm: isInEcm=false isInImsEcm=false

    因系统获取不到APN数据,没法匹配SIM卡对应的APN,导致无法注网的解决办法:

--- a/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/frameworks/opt/telephony/src/java/com/android/internal/telephony/dataconnection/DcTracker.java

public class DcTracker extends Handler {
 
         if (!isCarrierConfigApplied()) {
             log("onCarrierConfigChanged: Carrier config is not ready yet.");
-            return;
+            //return;
         }

3.上网成功,但状态栏上移动信号图标显示只有空三角图标显示

修改qi-ril.conf文件:LTE_ls_Report_SignalStrength=1

成功移植补丁

device_rockchip_common.patch

diff --git a/4g_modem/manifest.xml b/4g_modem/manifest.xml
index 9a19b3c..c6f1491 100644
--- a/4g_modem/manifest.xml
+++ b/4g_modem/manifest.xml
@@ -1,28 +1,10 @@
 <manifest version="1.0" type="device">
+ <!-- IRADIO -->
     <hal format="hidl">
         <name>android.hardware.radio</name>
         <transport>hwbinder</transport>
-        <fqname>@1.1::IRadio/slot1</fqname>
-        <fqname>@1.1::IRadio/slot2</fqname>
+        <fqname>@1.5::IRadio/slot1</fqname>
         <fqname>@1.2::ISap/slot1</fqname>
     </hal>
-    <hal format="hidl">
-        <name>android.hardware.radio.deprecated</name>
-        <transport>hwbinder</transport>
-        <version>1.0</version>
-        <interface>
-            <name>IOemHook</name>
-            <instance>slot1</instance>
-        </interface>
-    </hal>
-    <hal format="hidl">
-        <name>android.hardware.radio.config</name>
-        <transport>hwbinder</transport>
-        <version>1.0</version>
-        <interface>
-            <name>IRadioConfig</name>
-            <instance>default</instance>
-        </interface>
-    </hal>
 </manifest>
 
diff --git a/BoardConfig.mk b/BoardConfig.mk
index 0d1c886..1646be2 100755
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -17,7 +17,7 @@
 TARGET_USES_64_BIT_BINDER := true
 TARGET_BOARD_PLATFORM ?= rk3288
 TARGET_BOARD_HARDWARE ?= rk30board
-PRODUCT_KERNEL_VERSION ?= 4.19
+PRODUCT_KERNEL_VERSION ?= 5.10
 PRODUCT_KERNEL_PATH ?= kernel-$(PRODUCT_KERNEL_VERSION)
 
 # value: tablet,box,phone
@@ -36,7 +36,7 @@ TARGET_BOARD_PLATFORM_PRODUCT ?= tablet
 endif
 endif
 
-TARGET_ARCH ?= arm
+TARGET_ARCH ?= arm64
 TARGET_ARCH_VARIANT ?= armv7-a-neon
 ARCH_ARM_HAVE_TLS_REGISTER ?= true
 TARGET_CPU_ABI ?= armeabi-v7a
@@ -101,6 +101,10 @@ else
 DEVICE_MATRIX_FILE   ?= device/rockchip/common/manifests/compatibility_matrix.xml
 endif
 
+ifeq ($(strip $(BOARD_HAS_RK_4G_MODEM)),true)
+DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
+endif
+
 # GPU configration
 TARGET_BOARD_PLATFORM_GPU ?= mali-t760
 GRAPHIC_MEMORY_PROVIDER ?= ump
@@ -297,7 +301,7 @@ BOARD_FORCE_UDISK_VISIBLE ?= true
 BOARD_DISABLE_SAFE_MODE ?= true
 
 #enable 3g dongle
-BOARD_HAVE_DONGLE ?= false
+BOARD_HAVE_DONGLE ?= true
 
 #for boot and shutdown animation ringing
 BOOT_SHUTDOWN_ANIMATION_RINGING ?= false
@@ -328,7 +332,78 @@ BOARD_BLUETOOTH_LE_SUPPORT ?= true
 BOARD_WIFI_SUPPORT ?= true
 
 #for rk 4g modem
-BOARD_HAS_RK_4G_MODEM ?= false
+BOARD_HAS_RK_4G_MODEM ?= true
+
+# ifeq ($(strip $(BOARD_HAS_RK_4G_MODEM)),true)
+# DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
+# endif
+
+
+
+PRODUCT_PACKAGES += \
+    CarrierDefaultApp \
+    CarrierConfig \
+    TelephonyProvider \
+    TeleService \
+    Telecom \
+    rild \
+    libquec-EC20-ril \
+    dhcpcd
+
+PRODUCT_COPY_FILES += vendor/rockchip/common/phone/etc/apns-full-conf.xml:system/etc/apns-conf.xml
+
+# DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
+
+PRODUCT_PACKAGES += \
+    android.hardware.secure_element@1.0 \
+    android.hardware.secure_element@1.1 \
+    android.hardware.secure_element@1.2 \
+    android.hardware.secure_element@1.0.vendor \
+    android.hardware.secure_element@1.1.vendor \
+    android.hardware.secure_element@1.2.vendor
+
+PRODUCT_PACKAGES += \
+    android.hardware.radio@1.5-radio-service \
+    android.hardware.radio.config@1.2-service \
+    android.hardware.radio.config@1.0-service \
+    android.hardware.radio.config@1.0.vendor \
+    android.hardware.radio.config@1.2.vendor \
+    android.hardware.radio@1.5.vendor \
+    libhwbinder.vendor
+    
+#PRODUCT_PACKAGES += \
+    android.hardware.radio@1.2-radio-service \
+    android.hardware.radio.config@1.0-service
+
+PRODUCT_PROPERTY_OVERRIDES += \
+    ro.boot.noril=false \
+    ro.telephony.default_network=9
+
+
+# ifeq ($(strip $(TARGET_ARCH)), arm64)
+PRODUCT_PROPERTY_OVERRIDES += \
+    vendor.rild.libpath=/vendor/lib64/libquec-EC20-ril.so
+
+PRODUCT_COPY_FILES += \
+    device/rockchip/common/4g_modem/bin64/dhcpcd:vendor/bin/dhcpcd \
+    device/rockchip/common/4g_modem/quec/ip-down:system/etc/ppp/ip-down \
+    device/rockchip/common/4g_modem/quec/ip-up:system/etc/ppp/ip-up \
+    device/rockchip/common/4g_modem/quec/chat:system/bin/chat \
+    device/rockchip/common/4g_modem/quec/apns-full-conf.xml:system/etc/apns-conf.xml \
+    device/rockchip/common/4g_modem/quec/libquec-EC20-ril.so:vendor/lib64/libquec-EC20-ril.so \
+    device/rockchip/common/4g_modem/quec/libril.so:vendor/lib64/libril.so \
+    device/rockchip/common/4g_modem/quec/ql-ril.conf:vendor/etc/ql-ril.conf \
+    device/rockchip/common/4g_modem/quec/ql-ril.conf:system/etc/ql-ril.conf \
+    device/rockchip/common/4g_modem/quec/gps_cfg.inf:vendor/etc/gps_cfg.inf
+# else
+# PRODUCT_PROPERTY_OVERRIDES += \
+#     vendor.rild.libpath=/vendor/lib/librk-ril.so
+
+# PRODUCT_COPY_FILES += \
+#     $(LOCAL_PATH)/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
+#     $(LOCAL_PATH)/4g_modem/lib32/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/librk-ril.so
+# endif
+
 
 #for rk DLNA
 PRODUCT_HAVE_DLNA ?= false
diff --git a/modules/4g_modem.mk b/modules/4g_modem.mk
index 5037d9e..8b35555 100644
--- a/modules/4g_modem.mk
+++ b/modules/4g_modem.mk
@@ -17,13 +17,34 @@
 PRODUCT_PACKAGES += \
     CarrierDefaultApp \
     CarrierConfig \
+    TelephonyProvider \
+    TeleService \
+    Telecom \
     rild \
-    librk-ril \
-    dhcpcd
+    libquec-EC20-ril
 
 PRODUCT_COPY_FILES += vendor/rockchip/common/phone/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml
 
+DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
+
+PRODUCT_PACKAGES += \
+    android.hardware.secure_element@1.0 \
+    android.hardware.secure_element@1.1 \
+    android.hardware.secure_element@1.2 \
+    android.hardware.secure_element@1.0.vendor \
+    android.hardware.secure_element@1.1.vendor \
+    android.hardware.secure_element@1.2.vendor
+
 PRODUCT_PACKAGES += \
+    android.hardware.radio@1.5-radio-service \
+    android.hardware.radio.config@1.2-service \
+    android.hardware.radio.config@1.0-service \
+    android.hardware.radio.config@1.0.vendor \
+    android.hardware.radio.config@1.2.vendor \
+    android.hardware.radio@1.5.vendor \
+    libhwbinder.vendor
+    
+#PRODUCT_PACKAGES += \
     android.hardware.radio@1.2-radio-service \
     android.hardware.radio.config@1.0-service
 
@@ -31,20 +52,21 @@ PRODUCT_PROPERTY_OVERRIDES += \
     ro.boot.noril=false \
     ro.telephony.default_network=9
 
-DEVICE_MANIFEST_FILE += device/rockchip/common/4g_modem/manifest.xml
 
-ifeq ($(strip $(TARGET_ARCH)), arm64)
+# ifeq ($(strip $(TARGET_ARCH)), arm64)
 PRODUCT_PROPERTY_OVERRIDES += \
-    vendor.rild.libpath=/vendor/lib64/librk-ril.so
+    vendor.rild.libpath=/vendor/lib64/libquec-EC20-ril.so
 
 PRODUCT_COPY_FILES += \
-    $(LOCAL_PATH)/4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
-    $(LOCAL_PATH)/4g_modem/lib64/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/librk-ril.so
-else
-PRODUCT_PROPERTY_OVERRIDES += \
-    vendor.rild.libpath=/vendor/lib/librk-ril.so
+    device/rockchip/common/4g_modem/quec/libquec-EC20-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libquec-EC20-ril.so \
+    device/rockchip/common/4g_modem/quec/libril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libril.so \
+    device/rockchip/common/4g_modem/quec/ql-ril.conf:$(TARGET_COPY_OUT_VENDOR)/etc/ql-ril.conf \
+    device/rockchip/common/4g_modem/quec/gps_cfg.inf:$(TARGET_COPY_OUT_VENDOR)/etc/gps_cfg.inf
+# else
+# PRODUCT_PROPERTY_OVERRIDES += \
+#     vendor.rild.libpath=/vendor/lib/librk-ril.so
 
-PRODUCT_COPY_FILES += \
-    $(LOCAL_PATH)/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
-    $(LOCAL_PATH)/4g_modem/lib32/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/librk-ril.so
-endif
+# PRODUCT_COPY_FILES += \
+#     $(LOCAL_PATH)/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
+#     $(LOCAL_PATH)/4g_modem/lib32/librk-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/librk-ril.so
+# endif
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 3f46959..b3e81f8 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -20,10 +20,10 @@
 <resources>
 
     <!-- This device is not "voice capable"; it's data-only. -->
-    <bool name="config_voice_capable">false</bool>
+    <bool name="config_voice_capable">true</bool>
 
     <!-- This device does not allow sms service. -->
-    <bool name="config_sms_capable">false</bool>
+    <bool name="config_sms_capable">true</bool>
 
     <!-- If this is true, the screen will come on when you unplug usb/power/whatever. -->
     <bool name="config_unplugTurnsOnScreen">true</bool>
diff --git a/overlay_wifi_only/frameworks/base/core/res/res/values/config.xml b/overlay_wifi_only/frameworks/base/core/res/res/values/config.xml
index 33e8c93..bf4f825 100644
--- a/overlay_wifi_only/frameworks/base/core/res/res/values/config.xml
+++ b/overlay_wifi_only/frameworks/base/core/res/res/values/config.xml
@@ -22,5 +22,5 @@
          If true, this means that the device supports data connectivity through
          the telephony network.
          This can be overridden to false for devices that support voice and/or sms . -->
-    <bool name="config_mobile_data_capable">false</bool>
+    <bool name="config_mobile_data_capable">true</bool>
 </resources>
diff --git a/rootdir/ueventd.rockchip.rc b/rootdir/ueventd.rockchip.rc
index 6e98b92..3bc3e84 100755
--- a/rootdir/ueventd.rockchip.rc
+++ b/rootdir/ueventd.rockchip.rc
@@ -53,6 +53,12 @@
 /dev/accelirq             0660   system     system
 /dev/compassirq           0660   system     system
 
+/dev/ttyACM*             0666   radio          radio
+/dev/cdc-wdm*            0666   radio          radio
+/dev/qcqmi*              0660   radio          radio
+/dev/cdc-acm*            0660   radio		radio
+/dev/ttyUSB*              0666   radio		radio
+
 # for GPS
 #/dev/ttyS3                0600   gps        gps
 /dev/gps                  0660   gps        gps

 

device_rockchip_rk356x.patch

diff --git a/device.mk b/device.mk
index d25c3ef..5c22a38 100644
--- a/device.mk
+++ b/device.mk
@@ -66,10 +66,14 @@ PRODUCT_COPY_FILES += \
 #
 # add Rockchip properties here
 #
+# 优选网络接入模式为 4G ro.telephony.default_network=9
 PRODUCT_PROPERTY_OVERRIDES += \
                 ro.ril.ecclist=112,911 \
                 ro.opengles.version=196610 \
                 wifi.interface=wlan0 \
+                ro.telephony.default_network=9 \
+				rild.libpath=/vendor/lib64/libquec-EC20-ril.so \
+                rild.libargs=-d /dev/ttyUSB2 \
                 ro.audio.monitorOrientation=true \
                 debug.nfc.fw_download=false \
                 debug.nfc.se=false \
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 58a7e08..39de3bb 100755
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -32,6 +32,16 @@
     <string-array translatable="false" name="networkAttributes">
         <item>"wifi,1,1,2,-1,true"</item>
         <item>"bluetooth,7,7,0,-1,true"</item>
+	<!--support for 4G Mobile Network, wucaicheng,1378913492@qq.com,20230817 start-->
+	<item>"mobile,0,0,0,-1,true"</item>
+	<item>"mobile_mms,2,0,2,60000,true"</item>
+	<item>"mobile_supl,3,0,2,60000,true"</item>
+	<item>"mobile_dun,4,0,2,60000,true"</item>
+	<item>"mobile_hipri,5,0,3,60000,true"</item>
+	<item>"mobile_fota,10,0,2,60000,true"</item>
+	<item>"mobile_ims,11,0,2,60000,true"</item>
+	<item>"mobile_cbs,12,0,2,60000,true"</item>
+	<!--support for 4G Mobile Network, wucaicheng,1378913492@qq.com,20230817 end-->
         <item>"ethernet,9,9,9,-1,true"</item>
     </string-array>
diff --git a/rk3566_t/BoardConfig.mk b/rk3566_t/BoardConfig.mk
index 5eefe65..5602f52 100644
--- a/rk3566_t/BoardConfig.mk
+++ b/rk3566_t/BoardConfig.mk
@@ -17,10 +17,11 @@ include device/rockchip/rk356x/BoardConfig.mk
 BUILD_WITH_GO_OPT := false
 
 PRODUCT_UBOOT_CONFIG := rk3566
-PRODUCT_KERNEL_DTS := rk3566-evb2-lp4x-v10
+PRODUCT_KERNEL_DTS := tspi-rk3566-user-v10-linux#rk3566-evb2-lp4x-v10
 BOARD_GSENSOR_MXC6655XA_SUPPORT := true
 BOARD_CAMERA_SUPPORT_EXT := true
 BOARD_HS_ETHERNET := true
+BOARD_BOOTIMAGE_PARTITION_SIZE := 64512000   #修改为64M
 
 # AB image definition
 BOARD_USES_AB_IMAGE := false
@@ -31,3 +32,11 @@ ifeq ($(strip $(BOARD_USES_AB_IMAGE)), true)
     include device/rockchip/common/BoardConfig_AB.mk
     TARGET_RECOVERY_FSTAB := device/rockchip/rk356x/rk3566_t/recovery.fstab_AB
 endif
+
+# 如果copy失败的话可以在同级目录下Boardconfig.mk做出以下修改
+BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES :=true
+BUILD_BROKEN_DUP_RULES := true
+# 禁用默认RIL
+BOARD_USES_LEGACY_RIL := false
+# 启用Vendor RIL
+BOARD_HAVE_VENDOR_RIL := true
\ No newline at end of file

external_wifi_driver.patch

diff --git a/bcmdhd/Makefile b/bcmdhd/Makefile
index 144a2d2..bd52479 100755
--- a/bcmdhd/Makefile
+++ b/bcmdhd/Makefile
@@ -34,7 +34,7 @@ CONFIG_BCMDHD_PROPTXSTATUS := y
 CONFIG_BCMDHD_AG := y
 CONFIG_DHD_USE_STATIC_BUF := y
 CONFIG_BCMDHD_STATIC_BUF_IN_DHD := y
-CONFIG_BCMDHD_ANDROID_VERSION := 9
+CONFIG_BCMDHD_ANDROID_VERSION := 13
 CONFIG_BCMDHD_AUTO_SELECT := y
 CONFIG_BCMDHD_DEBUG := y
 #CONFIG_BCMDHD_RECONNECT := y

hardware_interfaces.patch

diff --git a/compatibility_matrices/compatibility_matrix.7.xml b/compatibility_matrices/compatibility_matrix.7.xml
index 26b8d63c5..7e764fde5 100644
--- a/compatibility_matrices/compatibility_matrix.7.xml
+++ b/compatibility_matrices/compatibility_matrix.7.xml
@@ -516,9 +516,17 @@
             <instance>default</instance>
         </interface>
     </hal>
-    <hal format="aidl" optional="true">
+    <hal format="hidl" optional="true">
         <name>android.hardware.radio.config</name>
-        <version>1</version>
+        <!--
+        Note: Devices launching with target-level 4, if implementing the
+        radio config HAL, must provide an implementation of 1.1 IRadioConfig
+        that can handle version 1.2 of IRadioConfigResponse and
+        IRadioConfigIndication.
+        -->
+       <version>1.0</version>
+        <version>1.1</version>
+        <version>1.2</version>
         <interface>
             <name>IRadioConfig</name>
             <instance>default</instance>
@@ -573,6 +581,28 @@
             <instance>slot2</instance>
             <instance>slot3</instance>
         </interface>
+     </hal>
+    <hal format="hidl" optional="true">
+        <name>android.hardware.radio</name>
+       <version>1.1</version>
+       <version>1.2</version>
+       <version>1.3</version>
+        <version>1.4</version>
+        <version>1.5</version>
+        <interface>
+             <name>IRadio</name>
+             <instance>slot1</instance>
+             <instance>slot2</instance>
+             <instance>slot3</instance>
+         </interface>
+    </hal>
+    <hal format="hidl" optional="true">
+       <name>android.hardware.radio.deprecated</name>
+        <version>1.0</version>
+        <interface>
+        <name>IOemHook</name>
+        <instance>slot1</instance>
+        </interface>
     </hal>
     <hal format="aidl" optional="true">
         <name>android.hardware.radio.voice</name>

 

hardware_ril.patch

diff --git a/rild/rild.c b/rild/rild.c
index 781db78..f999670 100644
--- a/rild/rild.c
+++ b/rild/rild.c
@@ -84,6 +84,70 @@ static struct RIL_Env s_rilEnv = {
 
 extern void RIL_startEventLoop();
 
+typedef struct{
+        char *PidVid;
+        char *ttyPort;
+        char *libPath;
+    }rild_t;
+    
+    rild_t rild_list[]={
+    	{"2c7c:0125","-d /dev/ttyUSB2","/vendor/lib64/libquec-EC20-ril.so"},/* Quectel EC20 R2.0/EC20 R2.1/EC25/EG25-G/EM05 */
+    	{"2c7c:0121","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EC21.so"},/* Quectel EC21/EG21-G */
+    	{"2c7c:0191","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EG91.so"},/* Quectel EG91 */
+    	{"2c7c:0195","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EG95.so"},/* Quectel EG95 */
+    	{"2c7c:0306","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EG06.so"},/* Quectel EG06/EP06/EM06 */
+    	{"2c7c:0512","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EG12.so"},/* Quectel EG12/EM12/EG18 */
+    	{"2c7c:0296","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-BG96.so"},/* Quectel BG96 */
+    	{"2c7c:0700","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-BG95.so"},/* Quectel BG95/BG77/BG600L-M3/BC69 */
+    	{"2c7c:0435","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-AG35.so"},/* Quectel AG35 */
+    	{"2c7c:0415","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-AG15.so"},/* Quectel AG15 */
+    	{"2c7c:0452","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-AG520R.so"},/* Quectel AG520R */
+    	{"2c7c:0455","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-AG550R.so"},/* Quectel AG550R */
+    	{"2c7c:0620","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EC20.so"},/* Quectel EG20 */
+    	{"2c7c:0800","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-RG500Q.so"},/* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
+    	{"2c7c:6026","-d /dev/ttyUSB3","/vendor/lib64/libreference-ril-EC200T.so"},/* Quectel EC200T*/
+    
+    	{"05c6:9025","-d /dev/ttyUSB1","/system/lib64/libreference-ril-CLM920.so"},/*YUGA CLM920*/
+    
+    	{NULL,NULL,NULL}
+    	
+    };
+    int get_usb_pid_vid(char **pPort,char **pPath){
+    	
+    	int count = 30;
+    	FILE *fp = NULL;
+    	char data[100] = {'0'};
+    	
+    	ALOGE("GWDBG get_usb_pid_vid start\n");
+    	while(count--){
+    		fp = popen("lsusb", "r");
+    		if (fp == NULL){
+    			ALOGE("GWDEB popen error!\n");
+    		}
+    		while (fgets(data, sizeof(data), fp) != NULL){
+    			
+    			for(int i=0;rild_list[i].PidVid != NULL; i++){
+    				//ALOGE("%s %s\n",data,rild_list[i].PidVid);
+    				if(strstr(data,rild_list[i].PidVid)) {
+    					ALOGE("%s\n%s\n%s\n",rild_list[i].PidVid,rild_list[i].ttyPort,rild_list[i].libPath);
+    					*pPort = rild_list[i].ttyPort;
+    					*pPath = rild_list[i].libPath;
+    					pclose(fp);
+    					ALOGE("GWDBG get_usb_pid_vid end ");
+    					return 0;
+    				}
+    			}
+    		}	
+    		ALOGE("GWDBG get_usb_pid_vid again\n");
+    		pclose(fp);
+    		sleep(1);
+    	}
+    	ALOGE("GWDBG get_usb_pid_vid end\n\n");
+    	return -1;
+    }
+    /*multi 4G/5Gmodule, wucaicheng,1378913492@qq.com,20230817 end*/
+    
+
 static int make_argv(char * args, char ** argv) {
     // Note: reserve argv[0]
     int count = 1;
@@ -99,9 +163,11 @@ static int make_argv(char * args, char ** argv) {
 }
 
 int main(int argc, char **argv) {
-    // vendor ril lib path either passed in as -l parameter, or read from rild.libpath property
-    const char *rilLibPath = NULL;
-    // ril arguments either passed in as -- parameter, or read from rild.libargs property
+    // // vendor ril lib path either passed in as -l parameter, or read from rild.libpath property
+    // const char *rilLibPath = NULL;
+    // // ril arguments either passed in as -- parameter, or read from rild.libargs property
+    char * rilLibPath = NULL;
+	char * rilLibProt = NULL;
     char **rilArgv;
     // handle for vendor ril lib
     void *dlHandle;
@@ -162,11 +228,13 @@ int main(int argc, char **argv) {
             rilLibPath = libPath;
         }
     }
+    get_usb_pid_vid(&rilLibProt,&rilLibPath);
 
+    ALOGE("rilLibProt:%s rilLibPath:%s\n",rilLibProt,rilLibPath);
     dlHandle = dlopen(rilLibPath, RTLD_NOW);
 
     if (dlHandle == NULL) {
-        RLOGE("dlopen failed: %s", dlerror());
+        ALOGE("dlopen failed: %s", dlerror());
         exit(EXIT_FAILURE);
     }
 
@@ -200,34 +268,38 @@ int main(int argc, char **argv) {
         static char args[PROPERTY_VALUE_MAX];
         rilArgv = newArgv;
         property_get(LIB_ARGS_PROPERTY, args, "");
+        	
+		ALOGE("GWDBG LIB_ARGS_PROPERTY args:%s rilLibProt:%s\n\n",args,rilLibProt);
+		strcpy(args,rilLibProt);
         argc = make_argv(args, rilArgv);
     }
-
+	ALOGE("GWDBG rilArgv argc:%d rilArgv:%s %s\n\n",argc,(char*)rilArgv,rilLibPath);
+	ALOGE("GWDBG rilLibProt:%s rilLibPath:%s\n",rilLibProt,rilLibPath);
     rilArgv[argc++] = "-c";
     rilArgv[argc++] = (char*)clientId;
-    RLOGD("RIL_Init argc = %d clientId = %s", argc, rilArgv[argc-1]);
+    ALOGE("RIL_Init argc = %d clientId = %s", argc, rilArgv[argc-1]);
 
     // Make sure there's a reasonable argv[0]
     rilArgv[0] = argv[0];
 
     funcs = rilInit(&s_rilEnv, argc, rilArgv);
-    RLOGD("RIL_Init rilInit completed");
+    ALOGE("RIL_Init rilInit completed");
 
     RIL_register(funcs);
 
-    RLOGD("RIL_Init RIL_register completed");
+    ALOGE("RIL_Init RIL_register completed");
 
     if (rilUimInit) {
-        RLOGD("RIL_register_socket started");
+        ALOGE("RIL_register_socket started");
         RIL_register_socket(rilUimInit, RIL_SAP_SOCKET, argc, rilArgv);
     }
 
-    RLOGD("RIL_register_socket completed");
+    ALOGE("RIL_register_socket completed");
 
     rilc_thread_pool();
 
 done:
-    RLOGD("RIL_Init starting sleep loop");
+    ALOGE("RIL_Init starting sleep loop");
     while (true) {
         sleep(UINT32_MAX);
     }
diff --git a/rild/rild.rc b/rild/rild.rc
index f6beb54..6dfaf98 100644
--- a/rild/rild.rc
+++ b/rild/rild.rc
@@ -1,5 +1,5 @@
-service vendor.ril-daemon /vendor/bin/hw/rild
+service ril-daemon /vendor/bin/hw/rild -l /vendor/lib64/libquec-EC20-ril.so
     class main
     user radio
     group radio cache inet misc audio log readproc wakelock
-    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
+    capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
\ No newline at end of file

system_core.patch

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;

system_libvintf.patch

diff --git a/check_vintf.cpp b/check_vintf.cpp
index 163ba47..77235ec 100644
--- a/check_vintf.cpp
+++ b/check_vintf.cpp
@@ -422,10 +422,10 @@ void AddResult(std::optional<android::base::Error<>>* retError,
     SetErrorCode(retError, other.error().code()) << other.error() << additionalMessage;
 }
 
-static constexpr const char* gCheckMissingHalsSuggestion{
-    "\n- If this is a new package, add it to the latest framework compatibility matrix."
-    "\n- If no interface should be added to the framework compatibility matrix (e.g. "
-    "types-only package), add it to the exempt list in libvintf_fcm_exclude."};
+// static constexpr const char* gCheckMissingHalsSuggestion{
+//     "\n- If this is a new package, add it to the latest framework compatibility matrix."
+//     "\n- If no interface should be added to the framework compatibility matrix (e.g. "
+//     "types-only package), add it to the exempt list in libvintf_fcm_exclude."};
 
 android::base::Result<void> checkAllFiles(const Dirmap& dirmap, const Properties& props,
                                           std::shared_ptr<StaticRuntimeInfo> runtimeInfo) {
@@ -513,6 +513,7 @@ int checkDirmaps(const Dirmap& dirmap, const Properties& props) {
                 LOG(ERROR) << "ERROR: Cannot fetch system matrix.";
                 exitCode = EX_SOFTWARE;
             }
+            #if 0
             auto res = vintfObject->checkMissingHalsInMatrices(HidlInterfaceMetadata::all(),
                                                                AidlInterfaceMetadata::all(),
                                                                ShouldCheckMissingHalsInFcm);
@@ -520,13 +521,14 @@ int checkDirmaps(const Dirmap& dirmap, const Properties& props) {
                 LOG(ERROR) << "ERROR: " << res.error() << gCheckMissingHalsSuggestion;
                 exitCode = EX_SOFTWARE;
             }
-
+            
             res = vintfObject->checkMatrixHalsHasDefinition(HidlInterfaceMetadata::all(),
                                                             AidlInterfaceMetadata::all());
             if (!res.ok()) {
                 LOG(ERROR) << "ERROR: " << res.error();
                 exitCode = EX_SOFTWARE;
             }
+            #endif
             continue;
         }
 

vendor_rockchip_common.patch

diff --git a/phone/bin/chat b/phone/bin/chat
old mode 100755
new mode 100644
index 486ce25..15fa47a
Binary files a/phone/bin/chat and b/phone/bin/chat differ
diff --git a/phone/etc/apns-full-conf.xml b/phone/etc/apns-full-conf.xml
index 5718e10..43c8e53 100644
--- a/phone/etc/apns-full-conf.xml
+++ b/phone/etc/apns-full-conf.xml
@@ -21,6 +21,13 @@
 <!-- This version must agree with that in apps/common/res/apns.xml -->
 <apns version="8">
 
+  <apn carrier="China Telecom" mcc="460" mnc="11" apn="ctnet" type="default,supl" />
+  <apn carrier="中国移动物联网4G" mcc="460" mnc="04" apn="cmiot" type="default,supl" />
+  <apn carrier="中国移动物联网2G" mcc="460" mnc="04"  apn="cmmtm" type="default,supl" />
+  <apn carrier="中国联通物联网gzm2mapn" mcc="460" mnc="06" apn="unim2m.gzm2mapn" port="80" type="default,supl" />
+  <apn carrier="中国联通物联网njm2mapn" mcc="460" mnc="06" apn="unim2m.njm2mapn"  type="default,supl" />
+  <apn carrier="中国电信物联网m2m" mcc="460" mnc="03" apn="CTNET" user="m2m" password="vnet.mobi" type="default" />
+
   <apn carrier="AT&amp;T PHONE TEST SIM"
       carrier_id = "1911"
       mcc="001"
diff --git a/phone/etc/ppp/ip-down b/phone/etc/ppp/ip-down
index c1328a9..e635dfb 100644
Binary files a/phone/etc/ppp/ip-down and b/phone/etc/ppp/ip-down differ
diff --git a/phone/etc/ppp/ip-up b/phone/etc/ppp/ip-up
index 9fd367e..32fd521 100644
Binary files a/phone/etc/ppp/ip-up and b/phone/etc/ppp/ip-up differ
diff --git a/phone/phone.mk b/phone/phone.mk
index 61881e4..351d822 100755
--- a/phone/phone.mk
+++ b/phone/phone.mk
@@ -27,7 +27,7 @@ PRODUCT_PACKAGES += \
 
 PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=false
 else
-PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=true
+PRODUCT_PROPERTY_OVERRIDES +=ro.boot.noril=false
 endif
 
 

 

kernel-5.10.patch

diff --git a/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts b/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
index 31e59689d8eb..cdd606517ba6 100755
--- a/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
+++ b/arch/arm64/boot/dts/rockchip/tspi-rk3566-user-v10-linux.dts
@@ -251,124 +265,115 @@ &leds {
+&usbhost_dwc3 {
+	phys = <&u2phy0_host>; 
+	phy-names = "usb2-phy";
+	maximum-speed = "high-speed"; 
+	status = "okay";
+};
+&combphy1_usq {
+	rockchip,dis-u3otg1-port; 
+	status = "okay";
+};
+
+&sata1 {
+	rockchip,enable-ssc;
+	status = "okay";
+};
+

diff --git a/arch/arm64/configs/rockchip_defconfig b/arch/arm64/configs/rockchip_defconfig
index b2912832b178..0b0f185bc06d 100644
--- a/arch/arm64/configs/rockchip_defconfig
+++ b/arch/arm64/configs/rockchip_defconfig
@@ -56,7 +56,6 @@ CONFIG_ARCH_ROCKCHIP=y
 # CONFIG_ARM64_ERRATUM_1463225 is not set
 # CONFIG_ARM64_ERRATUM_1542419 is not set
 # CONFIG_ARM64_ERRATUM_1508412 is not set
-# CONFIG_ARM64_ERRATUM_2051678 is not set
 # CONFIG_ARM64_ERRATUM_2054223 is not set
 # CONFIG_ARM64_ERRATUM_2067961 is not set
 # CONFIG_CAVIUM_ERRATUM_22375 is not set
@@ -80,13 +79,10 @@ CONFIG_ARMV8_DEPRECATED=y
 CONFIG_SWP_EMULATION=y
 CONFIG_CP15_BARRIER_EMULATION=y
 CONFIG_SETEND_EMULATION=y
-# CONFIG_ARM64_PTR_AUTH is not set
 # CONFIG_ARM64_AMU_EXTN is not set
-# CONFIG_ARM64_TLB_RANGE is not set
 # CONFIG_ARM64_BTI is not set
 # CONFIG_ARM64_E0PD is not set
 # CONFIG_ARCH_RANDOM is not set
-# CONFIG_ARM64_MTE is not set
 # CONFIG_ARM64_SVE is not set
 CONFIG_ARM64_PSEUDO_NMI=y
 CONFIG_RANDOMIZE_BASE=y
@@ -859,7 +855,6 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=y
 CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_HYM8563=y
-CONFIG_RTC_DRV_RK808=y
 CONFIG_DMADEVICES=y
 CONFIG_PL330_DMA=y
 CONFIG_RK_DMABUF_DEBUG=y
@@ -1023,3 +1018,12 @@ CONFIG_SCHEDSTATS=y
 CONFIG_BUG_ON_DATA_CORRUPTION=y
 CONFIG_ENABLE_DEFAULT_TRACERS=y
 # CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_TOUCHSCREEN_GT9XX=y
+CONFIG_LTE=y
+CONFIG_LTE_RM310=y
+CONFIG_USB_SERIAL_WWAN=y
+CONFIG_PPPOLAC=y
+CONFIG_PPPOPNS=y
+CONFIG_SLIP=y
+CONFIG_SLHC=y
+CONFIG_USB_NET_CDCETHER=y
\ No newline at end of file
diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig
index 0efc7e75a3dd..b1f0bedc57b7 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -566,6 +566,7 @@ config USB4_NET
 	  called thunderbolt-net.
 
 source "drivers/net/hyperv/Kconfig"
+source "drivers/net/lte/Kconfig"
 
 config NETDEVSIM
 	tristate "Simulated networking device"
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 72e18d505d1a..e15af2d5caeb 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -84,3 +84,5 @@ thunderbolt-net-y += thunderbolt.o
 obj-$(CONFIG_USB4_NET) += thunderbolt-net.o
 obj-$(CONFIG_NETDEVSIM) += netdevsim/
 obj-$(CONFIG_NET_FAILOVER) += net_failover.o
+
+obj-$(CONFIG_LTE) += lte/
\ No newline at end of file
diff --git a/drivers/net/usb/Makefile b/drivers/net/usb/Makefile
index 99fd12be2111..b9c09268e6da 100644
--- a/drivers/net/usb/Makefile
+++ b/drivers/net/usb/Makefile
@@ -37,6 +37,7 @@ 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_q.o
 obj-$(CONFIG_USB_NET_QMI_WWAN)	+= qmi_wwan.o
 obj-$(CONFIG_USB_NET_CDC_MBIM)	+= cdc_mbim.o
 obj-$(CONFIG_USB_NET_CH9200)	+= ch9200.o
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 5636b8f52216..3354b8b6c3dc 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -1119,6 +1119,23 @@ static const struct usb_device_id option_ids[] = {
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x0023)}, /* ONYX 3G device */
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, 0x9000), /* SIMCom SIM5218 */
 	  .driver_info = NCTRL(0) | NCTRL(1) | NCTRL(2) | NCTRL(3) | RSVD(4) },
+	//EC20, wucaicheng,1378913492@qq.com,20230817
+	#if 1 //Added by Quectel
+	{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC20 R2.0/EC20 R2.1/EC25/EG25-G/EM05 */
+	{ USB_DEVICE(0x2C7C, 0x0121) }, /* Quectel EC21/EG21-G */
+	{ USB_DEVICE(0x2C7C, 0x0191) }, /* Quectel EG91 */
+	{ USB_DEVICE(0x2C7C, 0x0195) }, /* Quectel EG95 */
+	{ USB_DEVICE(0x2C7C, 0x0306) }, /* Quectel EG06/EP06/EM06 */
+	{ USB_DEVICE(0x2C7C, 0x0512) }, /* Quectel EG12/EM12/EG18 */
+	{ USB_DEVICE(0x2C7C, 0x0296) }, /* Quectel BG96 */
+	{ USB_DEVICE(0x2C7C, 0x0700) }, /* Quectel BG95/BG77/BG600L-M3/BC69 */
+	{ USB_DEVICE(0x2C7C, 0x0435) }, /* Quectel AG35 */
+	{ USB_DEVICE(0x2C7C, 0x0415) }, /* Quectel AG15 */
+	{ USB_DEVICE(0x2C7C, 0x0452) }, /* Quectel AG520R */
+	{ USB_DEVICE(0x2C7C, 0x0455) }, /* Quectel AG550R */
+	{ USB_DEVICE(0x2C7C, 0x0620) }, /* Quectel EG20 */
+	{ USB_DEVICE(0x2C7C, 0x0800) }, /* Quectel RG500Q/RM500Q/RG510Q/RM510Q */
+	#endif
 	/* Quectel products using Qualcomm vendor ID */
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC15)},
 	{ USB_DEVICE(QUALCOMM_VENDOR_ID, QUECTEL_PRODUCT_UC20),
@@ -2229,6 +2246,9 @@ static struct usb_serial_driver option_1port_device = {
 #ifdef CONFIG_PM
 	.suspend           = usb_wwan_suspend,
 	.resume            = usb_wwan_resume,
+#if 1 //Added by Quectel
+	.reset_resume = usb_wwan_resume,
+#endif
 #endif
 };
 
@@ -2272,6 +2292,20 @@ static int option_probe(struct usb_serial *serial,
 	if (device_flags & NUMEP2 && iface_desc->bNumEndpoints != 2)
 		return -ENODEV;
 
+	//EC20 wwn, wucaicheng,1378913492@qq.com,20230817
+#if 0 //Added by Quectel
+	//Quectel modules’s interface 4 can be used as USB network device
+	if (serial->dev->descriptor.idVendor == cpu_to_le16(0x2C7C)) {
+		//some interfaces can be used as USB Network device (ecm, rndis, mbim)
+		if (serial->interface->cur_altsetting->desc.bInterfaceClass != 0xFF) {
+			return -ENODEV;
+		}
+		//interface 4 can be used as USB Network device (qmi)
+		else if (serial->interface->cur_altsetting->desc.bInterfaceNumber >= 4) {
+			return -ENODEV;
+		}
+	}
+#endif
 	/* Store the device flags so we can use them during attach. */
 	usb_set_serial_data(serial, (void *)device_flags);
 
diff --git a/drivers/usb/serial/usb_wwan.c b/drivers/usb/serial/usb_wwan.c
index 628a75d1232a..58b0123f0b14 100644
--- a/drivers/usb/serial/usb_wwan.c
+++ b/drivers/usb/serial/usb_wwan.c
@@ -469,7 +469,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)
 		return NULL;
@@ -481,6 +481,15 @@ 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;
 
+	//EC20, wucaicheng,1378913492@qq.com,20230817
+	#if 1 //Added by Quectel for zero packet
+	if (dir == USB_DIR_OUT) {
+		desc = &serial->dev->descriptor;
+		if (desc->idVendor == cpu_to_le16(0x2C7C))
+			urb->transfer_flags |= URB_ZERO_PACKET;
+	}
+	#endif
+
 	return urb;
 }

下载完整的成功补丁

平台 RK3566 Android13 USB通信方式的EC20模块

通过网盘分享的文件:usb-wifi-ble-hdmi-sd-rgb-m2-gamc-lvds-edp-mipi-backl-rtc-ir-485-232-spk-mic-dp-touch-ec20_pach.zip
链接: https://pan.baidu.com/s/1t05FbQ6s6vkvmMSPmEB2EA 提取码: 1234

请搭配上面的移植步骤删减。

 

评论

快捷导航

把好文章收藏到微信

打开微信,扫码查看

关闭

还没有账号?立即注册