Message ID | 1537647071-2691-2-git-send-email-t-herzog@gmx.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/2] cdc-acm: do not reset notification buffer index upon urb unlinking | expand |
On Sat, Sep 22, 2018 at 10:11:11PM +0200, Tobias Herzog wrote: > The usb standard ("Universal Serial Bus Class Definitions for Communication > Devices") distiguishes between "consistent signals" (DSR, DCD), and > "irregular signals" (break, ring, parity error, framing error, overrun). > The bits of "irregular signals" are set, if this error/event occurred on > the device side and are immeadeatly unset, if the serial state notification > was sent. > Like other drivers of real serial ports do, just the occurence of those > events should be counted in serial_icounter_struct (but no 1->0 > transitions). > > Signed-off-by: Tobias Herzog <t-herzog@gmx.de> > --- > drivers/usb/class/cdc-acm.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) Oliver, any thoughts about this patch series? thanks, greg k-h
On Sa, 2018-09-22 at 22:11 +0200, Tobias Herzog wrote: > The usb standard ("Universal Serial Bus Class Definitions for Communication > Devices") distiguishes between "consistent signals" (DSR, DCD), and > "irregular signals" (break, ring, parity error, framing error, overrun). > The bits of "irregular signals" are set, if this error/event occurred on > the device side and are immeadeatly unset, if the serial state notification > was sent. > Like other drivers of real serial ports do, just the occurence of those > events should be counted in serial_icounter_struct (but no 1->0 > transitions). > > Signed-off-by: Tobias Herzog <t-herzog@gmx.de> Acked-by: Oliver Neukum <oneukum@suse.com>
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 50339ca..187f386 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -310,17 +310,17 @@ static void acm_process_notification(struct acm *acm, unsigned char *buf) if (difference & ACM_CTRL_DSR) acm->iocount.dsr++; - if (difference & ACM_CTRL_BRK) - acm->iocount.brk++; - if (difference & ACM_CTRL_RI) - acm->iocount.rng++; if (difference & ACM_CTRL_DCD) acm->iocount.dcd++; - if (difference & ACM_CTRL_FRAMING) + if (newctrl & ACM_CTRL_BRK) + acm->iocount.brk++; + if (newctrl & ACM_CTRL_RI) + acm->iocount.rng++; + if (newctrl & ACM_CTRL_FRAMING) acm->iocount.frame++; - if (difference & ACM_CTRL_PARITY) + if (newctrl & ACM_CTRL_PARITY) acm->iocount.parity++; - if (difference & ACM_CTRL_OVERRUN) + if (newctrl & ACM_CTRL_OVERRUN) acm->iocount.overrun++; spin_unlock_irqrestore(&acm->read_lock, flags);
The usb standard ("Universal Serial Bus Class Definitions for Communication Devices") distiguishes between "consistent signals" (DSR, DCD), and "irregular signals" (break, ring, parity error, framing error, overrun). The bits of "irregular signals" are set, if this error/event occurred on the device side and are immeadeatly unset, if the serial state notification was sent. Like other drivers of real serial ports do, just the occurence of those events should be counted in serial_icounter_struct (but no 1->0 transitions). Signed-off-by: Tobias Herzog <t-herzog@gmx.de> --- drivers/usb/class/cdc-acm.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)