diff mbox series

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

Message ID 20220207000822.697343-1-dimich.dmb@gmail.com
State New
Headers show
Series Revert "USB: serial: ch341: add new Product ID for CH341A" | expand

Commit Message

Dmytro Bagrii Feb. 7, 2022, 12:08 a.m. UTC
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.

Signed-off-by: Dmytro Bagrii <dimich.dmb@gmail.com>
---
 drivers/usb/serial/ch341.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Dmytro Bagrii Feb. 8, 2022, 1:34 p.m. UTC | #1
On 08.02.22 12:34, Greg KH wrote:
> On Mon, Feb 07, 2022 at 02:08:23AM +0200, Dmytro Bagrii wrote:
>> 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.

>> 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.

>> (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?

> thanks,
> 
> greg k-h

-dmytro
Johan Hovold Feb. 21, 2022, 8:48 a.m. UTC | #2
On Thu, Feb 10, 2022 at 07:41:22AM +0200, Dmytro Bagrii wrote:
> On 09.02.22 16:18, Johan Hovold wrote:

> > 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.

Thanks for confirming.

Johan
Johan Hovold Feb. 21, 2022, 8:49 a.m. UTC | #3
On Thu, Feb 10, 2022 at 11:18:22AM +0100, Jan-Niklas Burfeind wrote:
> 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

No problem. Thanks for helping us clear this up.

Johan
diff mbox series

Patch

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index 29f4b87a9e74..65f1286f7905 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -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) },