[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <aG42KblIHdoCxddQ@hovoldconsulting.com>
Date: Wed, 9 Jul 2025 11:28:09 +0200
From: Johan Hovold <johan@...nel.org>
To: Chukun Pan <amadeus@....edu.cn>
Cc: linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org
Subject: Re: [PATCH v2 1/1] USB: serial: option: add GosunCn GM800 series
On Tue, Jul 01, 2025 at 06:00:02PM +0800, Chukun Pan wrote:
> Add support for GosunCn GM800 series which are based on Qualcomm
> SDX55 chip. The ID of MBIM/ECM/RNDIS mode is the same as GM500.
>
> Download mode:
> 0x1402: DIAG + AT + MODEM
> T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=480 MxCh= 0
> D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
> P: Vendor=305a ProdID=1402 Rev= 4.14
> S: Manufacturer=GSW
> S: Product=GSW_GM800_123456
> S: SerialNumber=12345678
> C:* #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
> I:* If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=option
This line no longer reflects what the kernel binds to after you made the
matching more specific in v2.
But why not bind to the DIAG port here and in the other compositions?
> RmNet mode (old):
What do you mean by "old" here?
> 0x1403: DIAG + AT + MODEM + RMNET + ADB
> RNDIS mode:
> 0x1404: DIAG + AT + MODEM + RNDIS + ADB
> T: Bus=08 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 3 Spd=5000 MxCh= 0
> D: Ver= 3.20 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 9 #Cfgs= 1
> P: Vendor=305a ProdID=1404 Rev= 4.14
> S: Manufacturer=QCOM
> S: Product=SDXPRAIRIE-MTP _SN:12345678
> S: SerialNumber=12345678
> C:* #Ifs= 6 Cfg#= 1 Atr=a0 MxPwr=896mA
> A: FirstIf#= 0 IfCount= 2 Cls=ef(misc ) Sub=04 Prot=01
> I:* If#= 0 Alt= 0 #EPs= 1 Cls=ef(misc ) Sub=04 Prot=01 Driver=rndis_host
> E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=32ms
> I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
> E: Ad=8e(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> E: Ad=0f(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=30 Driver=(none)
> E: Ad=82(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> E: Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> I:* If#= 3 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> E: Ad=84(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
> E: Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> E: Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> I:* If#= 4 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
> E: Ad=86(I) Atr=03(Int.) MxPS= 10 Ivl=32ms
> E: Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> E: Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
> E: Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
> E: Ad=87(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
This is one of the PIDs shared with GM500 and which, since your v2, will
no longer bind to the ff/ff/ff interface that it has.
Is that intentional or a bug in v2? Either way, this needs to be
addressed in some way (e.g. explained in the commit message).
> @@ -2382,9 +2382,13 @@ static const struct usb_device_id option_ids[] = {
> { USB_DEVICE_AND_INTERFACE_INFO(0x2dee, 0x4d22, 0xff, 0xff, 0x40) }, /* MeiG Smart SRM825L */
> { USB_DEVICE_AND_INTERFACE_INFO(0x2dee, 0x4d22, 0xff, 0xff, 0x60) }, /* MeiG Smart SRM825L */
> { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */
> - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */
> - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
> - { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1406, 0xff) }, /* GosunCn GM500 ECM/NCM */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1402, 0xff, 0, 0) }, /* GosunCn GM800 (Download) */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1403, 0xff, 0, 0) }, /* GosunCn GM800 (RMNET, old) */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1404, 0xff, 0, 0) }, /* GosunCn GM500/GM800 RNDIS */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1405, 0xff, 0, 0) }, /* GosunCn GM500/GM800 MBIM */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1406, 0xff, 0, 0) }, /* GosunCn GM500/GM800 ECM */
According to commit 08d4ef5cc920 ("USB: serial: option: add GosunCn
GM500 series") all of these have an ff/ff/ff interface on GM500 which
will no longer be bound after this change.
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1421, 0xff, 0, 0) }, /* GosunCn GM800 (RMNET) */
> + { USB_DEVICE_AND_INTERFACE_INFO(0x305a, 0x1422, 0xff, 0, 0) }, /* GosunCn GM800 (EAP) */
> { USB_DEVICE(0x33f8, 0x0104), /* Rolling RW101-GL (laptop RMNET) */
> .driver_info = RSVD(4) | RSVD(5) },
> { USB_DEVICE_INTERFACE_CLASS(0x33f8, 0x01a2, 0xff) }, /* Rolling RW101-GL (laptop MBIM) */
Johan
Powered by blists - more mailing lists