Skip to contentSkip to conversation

Revert "USB: serial: ch341: add new Product ID for CH341A"

PATCH Superseded Dmytro Bagrii 4 participants 11 messages Feb 7, 2022 – Feb 21, 2022

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Revert "USB: serial: ch341: add new Product ID for CH341A"

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

---
 drivers/usb/serial/ch341.c | 1 -
 1 file changed, 1 deletion(-)
drivers/usb/serial/ch341.c +0 -1
index 29f4b87a9e74..65f1286f7905 100644
@@ -81,7 +81,6 @@
 #define CH341_QUIRK_SIMULATE_BREAK	BIT(1)
 
 static const struct usb_device_id id_table[] = {
-	{ USB_DEVICE(0x1a86, 0x5512) },
 	{ USB_DEVICE(0x1a86, 0x5523) },
 	{ USB_DEVICE(0x1a86, 0x7522) },
 	{ USB_DEVICE(0x1a86, 0x7523) },
Signature · 1 line
2.35.1
maintainer
#1 lore raw
Quoted 1 line · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

You forgot to cc: the author of that commit, why?

Also forgot to cc: the maintainer of the driver/subsytem?

Quoted 7 lines

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

That does not corrispond with what Jan-Niklas said in the original commit.

Quoted 9 lines

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

Please wrap your lines at 72 columns.

thanks,

greg k-h

#2 lore raw
Quoted 6 lines · Greg KH
Quoted 1 line · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

You forgot to cc: the author of that commit, why?

Also forgot to cc: the maintainer of the driver/subsytem?

Sorry, forgot to add them. Also adding Johan Hovold, Frank A Kingswood and Frank Zago in the loop.

Quoted 10 lines
Quoted 7 lines

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

That does not corrispond with what Jan-Niklas said in the original commit.

The page mentioned in the original commit is unavailable for me for some reason.

I refer to the chip manufacturer documentation from here: http://wch-ic.com/downloads/CH341DS1_PDF.html.

I have this kind of CH341A programmer: http://www.chinalctech.com/cpzx/Programmer/Serial_Module/266.html

When mode selection jumper is set to UART:

[52206.834474] usb 1-4.1: new full-speed USB device number 10 using xhci_hcd
[52206.925482] usb 1-4.1: New USB device found, idVendor=1a86, idProduct=5523, bcdDevice= 3.04
[52206.925494] usb 1-4.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[52206.973701] usbcore: registered new interface driver ch341
[52206.973710] usbserial: USB Serial support registered for ch341-uart
[52206.973720] ch341 1-4.1:1.0: ch341-uart converter detected
[52206.974424] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 and it works as a serial port, as expected.

When mode selection jumper is set to I2C/SPI (it uses EPP/MEM Interface):

[52413.942116] usb 1-4.1: new full-speed USB device number 11 using xhci_hcd
[52414.033085] usb 1-4.1: New USB device found, idVendor=1a86, idProduct=5512, bcdDevice= 3.04
[52414.033097] usb 1-4.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[52414.040928] ch341 1-4.1:1.0: ch341-uart converter detected
[52414.041930] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 but it doesn't work.

To use CH341A programmer as I2C/SPI converter either external module is required or userspace tools must be used. But they don't work until ch341 handles 1a86:5512.

If unbind device from ch341 module:

# echo 1-4.1:1.0 > /sys/bus/usb/drivers/ch341/unbind

I2C/SPI tools start to work correctly.

Quoted 10 lines
Quoted 8 lines

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

Please wrap your lines at 72 columns.

Sure. Should i submit new patch verіon then?

Quoted 3 lines

thanks,

greg k-h

-dmytro

maintainer
#3 lore raw
Quoted 65 lines · Dmytro Bagrii
Quoted 7 lines · Greg KH
Quoted 6 lines · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

Quoted 6 lines
Quoted 3 lines

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

That does not corrispond with what Jan-Niklas said in the original commit.

The page mentioned in the original commit is unavailable for me for some reason.

I refer to the chip manufacturer documentation from here:
http://wch-ic.com/downloads/CH341DS1_PDF.html.

I have this kind of CH341A programmer:
http://www.chinalctech.com/cpzx/Programmer/Serial_Module/266.html

When mode selection jumper is set to UART:

[52206.834474] usb 1-4.1: new full-speed USB device number 10 using xhci_hcd
[52206.925482] usb 1-4.1: New USB device found, idVendor=1a86, 
idProduct=5523, bcdDevice= 3.04
[52206.925494] usb 1-4.1: New USB device strings: Mfr=0, Product=0, 
SerialNumber=0
[52206.973701] usbcore: registered new interface driver ch341
[52206.973710] usbserial: USB Serial support registered for ch341-uart
[52206.973720] ch341 1-4.1:1.0: ch341-uart converter detected
[52206.974424] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 and it works as a serial port, as expected.

When mode selection jumper is set to I2C/SPI (it uses EPP/MEM Interface):

[52413.942116] usb 1-4.1: new full-speed USB device number 11 using xhci_hcd
[52414.033085] usb 1-4.1: New USB device found, idVendor=1a86, 
idProduct=5512, bcdDevice= 3.04
[52414.033097] usb 1-4.1: New USB device strings: Mfr=0, Product=0, 
SerialNumber=0
[52414.040928] ch341 1-4.1:1.0: ch341-uart converter detected
[52414.041930] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 but it doesn't work.

To use CH341A programmer as I2C/SPI converter either external module is required or userspace tools must be used. But they don't work until ch341 handles 1a86:5512.

If unbind device from ch341 module:

# echo 1-4.1:1.0 > /sys/bus/usb/drivers/ch341/unbind

I2C/SPI tools start to work correctly.

Quoted 5 lines
Quoted 5 lines

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

Quoted 7 lines
Quoted 5 lines
Quoted 3 lines

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

Please wrap your lines at 72 columns.

Sure. Should i submit new patch verіon then?

Please do so. But make sure you read this thread first if you haven't already:

https://lore.kernel.org/r/YJ0OCS/sh+1ifD/[email protected]

I don't remember all the details, but judging from a quick look it seems we're just waiting for someone to resend the revert with a proper explanation.

It would be good if Jan-Niklas could chime in too and confirm if he's able to use the device in UART mode instead.

Johan

#4 lore raw

I'm sorry, I did not notice this earlier;
will look into it tomorrow morning.

Thanks
Jan-Niklas Burfeind

Quoted 5 lines · Johan Hovold

It would be good if Jan-Niklas could chime in too and confirm if he's able to use the device in UART mode instead.

Johan

#5 lore raw
In reply to Johan Hovold
Quoted 70 lines · Johan Hovold
Quoted 69 lines · Dmytro Bagrii
Quoted 7 lines · Greg KH
Quoted 6 lines · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

Quoted 6 lines
Quoted 3 lines

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

That does not corrispond with what Jan-Niklas said in the original commit.

The page mentioned in the original commit is unavailable for me for some reason.

I refer to the chip manufacturer documentation from here:
http://wch-ic.com/downloads/CH341DS1_PDF.html.

I have this kind of CH341A programmer:
http://www.chinalctech.com/cpzx/Programmer/Serial_Module/266.html

When mode selection jumper is set to UART:

[52206.834474] usb 1-4.1: new full-speed USB device number 10 using xhci_hcd
[52206.925482] usb 1-4.1: New USB device found, idVendor=1a86, 
idProduct=5523, bcdDevice= 3.04
[52206.925494] usb 1-4.1: New USB device strings: Mfr=0, Product=0, 
SerialNumber=0
[52206.973701] usbcore: registered new interface driver ch341
[52206.973710] usbserial: USB Serial support registered for ch341-uart
[52206.973720] ch341 1-4.1:1.0: ch341-uart converter detected
[52206.974424] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 and it works as a serial port, as expected.

When mode selection jumper is set to I2C/SPI (it uses EPP/MEM Interface):

[52413.942116] usb 1-4.1: new full-speed USB device number 11 using xhci_hcd
[52414.033085] usb 1-4.1: New USB device found, idVendor=1a86, 
idProduct=5512, bcdDevice= 3.04
[52414.033097] usb 1-4.1: New USB device strings: Mfr=0, Product=0, 
SerialNumber=0
[52414.040928] ch341 1-4.1:1.0: ch341-uart converter detected
[52414.041930] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 but it doesn't work.

To use CH341A programmer as I2C/SPI converter either external module is required or userspace tools must be used. But they don't work until ch341 handles 1a86:5512.

If unbind device from ch341 module:

# echo 1-4.1:1.0 > /sys/bus/usb/drivers/ch341/unbind

I2C/SPI tools start to work correctly.

Quoted 9 lines
Quoted 8 lines

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

Quoted 8 lines
Quoted 3 lines
Quoted 1 line

Please wrap your lines at 72 columns.

Sure. Should i submit new patch verіon then?

Please do so. But make sure you read this thread first if you haven't already:

https://lore.kernel.org/r/YJ0OCS/sh+1ifD/[email protected]

Thanks. After i saw this patch i figured it out to remove and blacklist ch341 module to get CH341A working as I2C/SPI converter with i2c-ch341 and spi-ch341-usb drivers.

I can confirm, CH341A works as serial converter with ch341 driver when it is configured as UART and has PID 5523. It can't work as I2C/SPI converter when configured as I2C/SPI and has PID5512 unless ch341 module is removed and blacklisted.

Quoted 6 lines

I don't remember all the details, but judging from a quick look it seems we're just waiting for someone to resend the revert with a proper explanation.

It would be good if Jan-Niklas could chime in too and confirm if he's able to use the device in UART mode instead.

I'd like to take a look at that keeyees device from original commit message to see if it has EEPROM chip. I can hypothesize that some manufacturer of a CH341-based programmer could use external configuration EEPROM and mixed-up PID value. I haven't experiment with configuring CH341A with EEPROM but suppose it's possible to burn any custom VID:PID there. I don't think ch341 driver has to handle any of such custom VID/PID, especially if it conflicts with an original VID/PID assigned by chip manufacturer. In case of some peculiar devices it's possible to bind custom VID:PID to the driver via sysfs.

But it's just my hypothetical assumption how ch341-based device with PID 5512 could work as UART in that case.

I just checked if CH341 that i have can work as UART when configured as I2C/SPI (PID 5512). I doesn't work: no output signal on TX pin, no loopback echo when RX connected to self TX.

Signature · 2 lines
Best Regards,
Dmytro Bagrii.
maintainer
#6 lore raw
Quoted 19 lines · Dmytro Bagrii
Quoted 6 lines · Johan Hovold

I don't remember all the details, but judging from a quick look it seems we're just waiting for someone to resend the revert with a proper explanation.

It would be good if Jan-Niklas could chime in too and confirm if he's able to use the device in UART mode instead.

I'd like to take a look at that keeyees device from original commit message to see if it has EEPROM chip. I can hypothesize that some manufacturer of a CH341-based programmer could use external configuration EEPROM and mixed-up PID value. I haven't experiment with configuring CH341A with EEPROM but suppose it's possible to burn any custom VID:PID there. I don't think ch341 driver has to handle any of such custom VID/PID, especially if it conflicts with an original VID/PID assigned by chip manufacturer. In case of some peculiar devices it's possible to bind custom VID:PID to the driver via sysfs.

Quoted 6 lines

But it's just my hypothetical assumption how ch341-based device with PID 5512 could work as UART in that case.

I just checked if CH341 that i have can work as UART when configured as I2C/SPI (PID 5512). I doesn't work: no output signal on TX pin, no loopback echo when RX connected to self TX.

Thanks for confirming.

Johan

#7 lore raw
In reply to Johan Hovold

Hello everyone.

For now I can identify two different USB-IDs depending on the Jumper position on the board:

1-2 connected: idVendor=1a86, idProduct=5512
2-3 or none : idVendor=1a86, idProduct=5523

I'm not sure how I'd plug it to reach the Parallel Printer Interface mentioned before.

The advertised position of this Jumper is 1-2.
Both positions are labeled with two different chinese symbols, "2-3" is labeled with TTL as well.

Looking at the devices schematics I think its safe to revert my original commit and I'm sorry to have caused you all this trouble.

At the time I added the device I missidentified the Jumper as voltage level selector.

I had seen others using the board on youtube, with Jumper position 1-2; and did not understand, why my system would not recognize it at all.

Sorry again and thanks for the effort
Jan-Niklas

Quoted 87 lines · Johan Hovold
Quoted 65 lines · Dmytro Bagrii
Quoted 7 lines · Greg KH
Quoted 6 lines · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341A has three different modes of operation selectable either by hardware pin connections or by external EEPROM configuration. Each mode is represented by corresponding product ID:

Quoted 6 lines
Quoted 3 lines

0x5523: Asyncronous Serial Interface
0x5584: Parallel Printer Interface
0x5512: EPP/MEM Interface

That does not corrispond with what Jan-Niklas said in the original commit.

The page mentioned in the original commit is unavailable for me for some reason.

I refer to the chip manufacturer documentation from here:
http://wch-ic.com/downloads/CH341DS1_PDF.html.

I have this kind of CH341A programmer:
http://www.chinalctech.com/cpzx/Programmer/Serial_Module/266.html

When mode selection jumper is set to UART:

[52206.834474] usb 1-4.1: new full-speed USB device number 10 using xhci_hcd
[52206.925482] usb 1-4.1: New USB device found, idVendor=1a86,
idProduct=5523, bcdDevice= 3.04
[52206.925494] usb 1-4.1: New USB device strings: Mfr=0, Product=0,
SerialNumber=0
[52206.973701] usbcore: registered new interface driver ch341
[52206.973710] usbserial: USB Serial support registered for ch341-uart
[52206.973720] ch341 1-4.1:1.0: ch341-uart converter detected
[52206.974424] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 and it works as a serial port, as expected.

When mode selection jumper is set to I2C/SPI (it uses EPP/MEM Interface):

[52413.942116] usb 1-4.1: new full-speed USB device number 11 using xhci_hcd
[52414.033085] usb 1-4.1: New USB device found, idVendor=1a86,
idProduct=5512, bcdDevice= 3.04
[52414.033097] usb 1-4.1: New USB device strings: Mfr=0, Product=0,
SerialNumber=0
[52414.040928] ch341 1-4.1:1.0: ch341-uart converter detected
[52414.041930] usb 1-4.1: ch341-uart converter now attached to ttyUSB0

ch341 creates /dev/ttyUSB0 but it doesn't work.

To use CH341A programmer as I2C/SPI converter either external module is required or userspace tools must be used. But they don't work until ch341 handles 1a86:5512.

If unbind device from ch341 module:

# echo 1-4.1:1.0 > /sys/bus/usb/drivers/ch341/unbind

I2C/SPI tools start to work correctly.

Quoted 5 lines
Quoted 5 lines

(See "5.3.Function configuration" in datasheet at wch-ic.com/downloads/CH341DS1_PDF.html)

When CH341A is configured as EPP/MEM Interface it appears as 1a86:5512 and being mistakenly handled by ch341 USB serial driver.

Quoted 7 lines
Quoted 5 lines
Quoted 3 lines

It is possible to use CH341A in EPP/MEM mode only if ch341 module is blacklisted, but it must be unblacklisted every time to use CH341A as a serial converter. Also obviously it is impossible to use two CH341A boards in different modes simoultaneously.

Please wrap your lines at 72 columns.

Sure. Should i submit new patch verіon then?

Please do so. But make sure you read this thread first if you haven't already:

https://lore.kernel.org/r/YJ0OCS/sh+1ifD/[email protected]

I don't remember all the details, but judging from a quick look it seems we're just waiting for someone to resend the revert with a proper explanation.

It would be good if Jan-Niklas could chime in too and confirm if he's able to use the device in UART mode instead.

Johan

maintainer
#8 lore raw
Quoted 18 lines · Jan-Niklas Burfeind

Hello everyone.

For now I can identify two different USB-IDs depending on the Jumper position on the board:

1-2 connected: idVendor=1a86, idProduct=5512
2-3 or none : idVendor=1a86, idProduct=5523

I'm not sure how I'd plug it to reach the Parallel Printer Interface mentioned before.

The advertised position of this Jumper is 1-2.
Both positions are labeled with two different chinese symbols, "2-3" is labeled with TTL as well.

Looking at the devices schematics I think its safe to revert my original commit and I'm sorry to have caused you all this trouble.

Quoted 8 lines

At the time I added the device I missidentified the Jumper as voltage level selector.

I had seen others using the board on youtube, with Jumper position 1-2; and did not understand, why my system would not recognize it at all.

Sorry again and thanks for the effort

No problem. Thanks for helping us clear this up.

Johan

#9 lore raw

PATCH v2 1/1 Revert "USB: serial: ch341: add new Product ID for CH341A"

In reply to Greg KH

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341 has Product ID 0x5512 in EPP/MEM mode which is used for I2C/SPI/GPIO interfaces. In asynchronous serial interface mode CH341 has PID 0x5523 which is already in the table.

Mode is selected by corresponding jumper setting.

---
 drivers/usb/serial/ch341.c | 1 -
 1 file changed, 1 deletion(-)
drivers/usb/serial/ch341.c +0 -1
index 29f4b87a9e74..65f1286f7905 100644
@@ -81,7 +81,6 @@
 #define CH341_QUIRK_SIMULATE_BREAK	BIT(1)
 
 static const struct usb_device_id id_table[] = {
-	{ USB_DEVICE(0x1a86, 0x5512) },
 	{ USB_DEVICE(0x1a86, 0x5523) },
 	{ USB_DEVICE(0x1a86, 0x7522) },
 	{ USB_DEVICE(0x1a86, 0x7523) },
Signature · 1 line
2.35.1
maintainer
#10 lore raw
Quoted 9 lines · Dmytro Bagrii

This reverts commit 46ee4abb10a07bd8f8ce910ee6b4ae6a947d7f63.

CH341 has Product ID 0x5512 in EPP/MEM mode which is used for I2C/SPI/GPIO interfaces. In asynchronous serial interface mode CH341 has PID 0x5523 which is already in the table.

Mode is selected by corresponding jumper setting.

I was hoping for some more details in the commit message so we don't have to dig out the information from long email-threads if this ever comes up again.

Well, well. I added links to the mail archives before applying.

Thanks!

Johan