Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

usb: cdc-acm: Restore CAP_BRK functionnality to CH343

The CH343 USB/serial adapter is as buggy as it is popular (very).
One of its quirks is that despite being capable of signalling a
BREAK condition, it doesn't advertise it.

This used to work nonetheless until 66aad7d8d3ec5 ("usb: cdc-acm:
return correct error code on unsupported break") applied some
reasonable restrictions, preventing breaks from being emitted on
devices that do not advertise CAP_BRK.

Add a quirk for this particular device, so that breaks can still
be produced on some of my machines attached to my console server.

Fixes: 66aad7d8d3ec5 ("usb: cdc-acm: return correct error code on unsupported break")
Signed-off-by: Marc Zyngier <maz@kernel.org>
Cc: stable <stable@kernel.org>
Cc: Oliver Neukum <oneukum@suse.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Oliver Neukum <oneukum@suse.com>
Link: https://patch.msgid.link/20260301124440.1192752-1-maz@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Marc Zyngier and committed by
Greg Kroah-Hartman
14ae24cb 8479891d

+6
+5
drivers/usb/class/cdc-acm.c
··· 1379 1379 acm->ctrl_caps = h.usb_cdc_acm_descriptor->bmCapabilities; 1380 1380 if (quirks & NO_CAP_LINE) 1381 1381 acm->ctrl_caps &= ~USB_CDC_CAP_LINE; 1382 + if (quirks & MISSING_CAP_BRK) 1383 + acm->ctrl_caps |= USB_CDC_CAP_BRK; 1382 1384 acm->ctrlsize = ctrlsize; 1383 1385 acm->readsize = readsize; 1384 1386 acm->rx_buflimit = num_rx_buf; ··· 2003 2001 { USB_DEVICE(0x32a7, 0x0000), 2004 2002 .driver_info = IGNORE_DEVICE, 2005 2003 }, 2004 + 2005 + /* CH343 supports CAP_BRK, but doesn't advertise it */ 2006 + { USB_DEVICE(0x1a86, 0x55d3), .driver_info = MISSING_CAP_BRK, }, 2006 2007 2007 2008 /* control interfaces without any protocol set */ 2008 2009 { USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM,
+1
drivers/usb/class/cdc-acm.h
··· 113 113 #define CLEAR_HALT_CONDITIONS BIT(5) 114 114 #define SEND_ZERO_PACKET BIT(6) 115 115 #define DISABLE_ECHO BIT(7) 116 + #define MISSING_CAP_BRK BIT(8)