From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [1/5] USB: serial: f81232: clear overrun flag From: "Ji-Ze Hong \(Peter Hong\)" Message-Id: <1516607927-8887-1-git-send-email-hpeter+linux_kernel@gmail.com> Date: Mon, 22 Jan 2018 15:58:43 +0800 To: johan@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, peter_hong@fintek.com.tw, "Ji-Ze Hong \(Peter Hong\)" List-ID: VGhlIEY4MTIzMiB3aWxsIHJlcG9ydCBkYXRhIGFuZCBMU1Igd2l0aCBidWxrIGxpa2UgZm9sbG93 aW5nIGZvcm1hdDoKYnVsay1pbiBkYXRhOiBbTFNSKDFCeXRlKStEQVRBKDFCeXRlKV1bTFNSKDFC eXRlKStEQVRBKDFCeXRlKV0uLi4KCkxTUiB3aWxsIGF1dG8gY2xlYXIgZnJhbWUvcGFyaXR5L2Jy ZWFrIGVycm9yIGZsYWcgd2hlbiByZWFkaW5nIGJ5IEgvVywKYnV0IG92ZXJycnVuIHdpbGwgb25s eSBjbGVhcmVkIHdoZW4gcmVhZGluZyBMU1IuIFNvIHRoaXMgcGF0Y2ggYWRkIGEKd29ya2VyIHRv IHJlYWQgTFNSIHdoZW4gT0UuCgpTaWduZWQtb2ZmLWJ5OiBKaS1aZSBIb25nIChQZXRlciBIb25n KSA8aHBldGVyK2xpbnV4X2tlcm5lbEBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy91c2Ivc2VyaWFs L2Y4MTIzMi5jIHwgMjAgKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMCBp bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Y4MTIzMi5jIGIv ZHJpdmVycy91c2Ivc2VyaWFsL2Y4MTIzMi5jCmluZGV4IDk2MDM2Zjg3YjFkZS4uNDY4MzYwNDFj NTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZjgxMjMyLmMKKysrIGIvZHJpdmVy cy91c2Ivc2VyaWFsL2Y4MTIzMi5jCkBAIC00MSwxMiArNDEsMTQgQEAgTU9EVUxFX0RFVklDRV9U QUJMRSh1c2IsIGlkX3RhYmxlKTsKICNkZWZpbmUgRklGT19DT05UUk9MX1JFR0lTVEVSCQkoMHgw MiArIFNFUklBTF9CQVNFX0FERFJFU1MpCiAjZGVmaW5lIExJTkVfQ09OVFJPTF9SRUdJU1RFUgkJ KDB4MDMgKyBTRVJJQUxfQkFTRV9BRERSRVNTKQogI2RlZmluZSBNT0RFTV9DT05UUk9MX1JFR0lT VEVSCQkoMHgwNCArIFNFUklBTF9CQVNFX0FERFJFU1MpCisjZGVmaW5lIExJTkVfU1RBVFVTX1JF R0lTVEVSCQkoMHgwNSArIFNFUklBTF9CQVNFX0FERFJFU1MpCiAjZGVmaW5lIE1PREVNX1NUQVRV U19SRUdJU1RFUgkJKDB4MDYgKyBTRVJJQUxfQkFTRV9BRERSRVNTKQogCiBzdHJ1Y3QgZjgxMjMy X3ByaXZhdGUgewogCXN0cnVjdCBtdXRleCBsb2NrOwogCXU4IG1vZGVtX2NvbnRyb2w7CiAJdTgg bW9kZW1fc3RhdHVzOworCXN0cnVjdCB3b3JrX3N0cnVjdCBsc3Jfd29yazsKIAlzdHJ1Y3Qgd29y a19zdHJ1Y3QgaW50ZXJydXB0X3dvcms7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsK IH07CkBAIC0yODIsNiArMjg0LDcgQEAgc3RhdGljIHZvaWQgZjgxMjMyX3JlYWRfaW50X2NhbGxi YWNrKHN0cnVjdCB1cmIgKnVyYikKIHN0YXRpYyB2b2lkIGY4MTIzMl9wcm9jZXNzX3JlYWRfdXJi KHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJi LT5jb250ZXh0OworCXN0cnVjdCBmODEyMzJfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFs X3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9i dWZmZXI7CiAJY2hhciB0dHlfZmxhZzsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTMxNSw2ICszMTgs NyBAQCBzdGF0aWMgdm9pZCBmODEyMzJfcHJvY2Vzc19yZWFkX3VyYihzdHJ1Y3QgdXJiICp1cmIp CiAKIAkJCWlmIChsc3IgJiBVQVJUX0xTUl9PRSkgewogCQkJCXBvcnQtPmljb3VudC5vdmVycnVu Kys7CisJCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+bHNyX3dvcmspOwogCQkJCXR0eV9pbnNlcnRf ZmxpcF9jaGFyKCZwb3J0LT5wb3J0LCAwLAogCQkJCQkJVFRZX09WRVJSVU4pOwogCQkJfQpAQCAt NjIzLDYgKzYyNywyMSBAQCBzdGF0aWMgdm9pZCAgZjgxMjMyX2ludGVycnVwdF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKIAlmODEyMzJfcmVhZF9tc3IocHJpdi0+cG9ydCk7CiB9CiAK K3N0YXRpYyB2b2lkIGY4MTIzMl9sc3Jfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK K3sKKwlzdHJ1Y3QgZjgxMjMyX3ByaXZhdGUgKnByaXY7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9y dCAqcG9ydDsKKwlpbnQgc3RhdHVzOworCXU4IHRtcDsKKworCXByaXYgPSBjb250YWluZXJfb2Yo d29yaywgc3RydWN0IGY4MTIzMl9wcml2YXRlLCBsc3Jfd29yayk7CisJcG9ydCA9IHByaXYtPnBv cnQ7CisKKwlzdGF0dXMgPSBmODEyMzJfZ2V0X3JlZ2lzdGVyKHBvcnQsIExJTkVfU1RBVFVTX1JF R0lTVEVSLCAmdG1wKTsKKwlpZiAoc3RhdHVzKQorCQlkZXZfd2FybigmcG9ydC0+ZGV2LCAicmVh ZCBMU1IgZmFpbGVkOiAlZFxuIiwgc3RhdHVzKTsKK30KKwogc3RhdGljIGludCBmODEyMzJfcG9y dF9wcm9iZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBmODEyMzJf cHJpdmF0ZSAqcHJpdjsKQEAgLTYzMyw2ICs2NTIsNyBAQCBzdGF0aWMgaW50IGY4MTIzMl9wb3J0 X3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiAKIAltdXRleF9pbml0KCZwcml2 LT5sb2NrKTsKIAlJTklUX1dPUksoJnByaXYtPmludGVycnVwdF93b3JrLCAgZjgxMjMyX2ludGVy cnVwdF93b3JrKTsKKwlJTklUX1dPUksoJnByaXYtPmxzcl93b3JrLCBmODEyMzJfbHNyX3dvcmtl cik7CiAKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7CiAK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: ARC-Seal: i=1; a=rsa-sha256; t=1516607931; cv=none; d=google.com; s=arc-20160816; b=yy4IwkQhKqWg0h0igK3OPPCrrZJSJ4WwWtWHIYG70Qk4nhAAId+vuHOEDZ+ErJFz1D zyHiVIxdHYnT+j2ffR+JqtG4yL9N6LMAfiMt35rKhzKzqNFGbKlym7hSTo40xKllnLoe JJFlVY5JXGGEfhfNJczeNCW6eJLC/I/HaxyE1zwiS74H07OHaoQFZh9e4vg/mc7bYbUi H6kGzbfRaOF6WBUu6o5LNXBnEePWV06dBpOJKcCl8UhRQ7ZxqD2+yqamNZHLh8ATqjWA Ieq3X/wxZ4K83NpDOyGbq1tt0ykFFl9WWTEUTReY9s5zkSiZE50c36GeGRP5qbNtc+Ou fdLQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=xroenPQVy6VzbO2PaitV40OimOqyLugpS2uz94DhGuA=; b=AQoVESUPUak2GnfJj/Um13FCSsHk986GCTjMEzmSSDGq/vLvANmCdtYhCkjbC9zqp1 k8u1x3UM9rf7b4lYZGFfFpnYVAGVk0EoAl+M00gmAe5z8doNaBbr8dhhvrfqcTzir7PY fwfgiILkGrYbOVfP9MfLgIUknbNnKkF3VuI515snsDM9ltiR0wuWEB34RLVNrqEgjnPY JM+b8jpS3ARm2xoHK9cpk+vInB0l3Dr3ukRAwKkeyC7ciizxCYtZ0zdmslO22qU7IRHz PAl4jX3ErIACOfSFTlXPhYBq37+3BgXw3siT2Rwx1+jVzlFt5yT6tNvVmUL3EjV9mvqU IJOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nlJbtZQF; spf=pass (google.com: domain of hpeter@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=hpeter@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=nlJbtZQF; spf=pass (google.com: domain of hpeter@gmail.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=hpeter@gmail.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com X-Google-Smtp-Source: AH8x2250Ad0DYzesZ1ZBeIFwQ4nYOIdKoHDPfrRgJireY7zMF27bD6BvFwQAJNqwNuhYCIdxpn76OA== From: "Ji-Ze Hong (Peter Hong)" X-Google-Original-From: "Ji-Ze Hong (Peter Hong)" To: johan@kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, peter_hong@fintek.com.tw, "Ji-Ze Hong (Peter Hong)" Subject: [PATCH 1/5] USB: serial: f81232: clear overrun flag Date: Mon, 22 Jan 2018 15:58:43 +0800 Message-Id: <1516607927-8887-1-git-send-email-hpeter+linux_kernel@gmail.com> X-Mailer: git-send-email 2.7.4 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: =?utf-8?q?1590278678016900188?= X-GMAIL-MSGID: =?utf-8?q?1590278678016900188?= X-Mailing-List: linux-kernel@vger.kernel.org List-ID: The F81232 will report data and LSR with bulk like following format: bulk-in data: [LSR(1Byte)+DATA(1Byte)][LSR(1Byte)+DATA(1Byte)]... LSR will auto clear frame/parity/break error flag when reading by H/W, but overrrun will only cleared when reading LSR. So this patch add a worker to read LSR when OE. Signed-off-by: Ji-Ze Hong (Peter Hong) --- drivers/usb/serial/f81232.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/usb/serial/f81232.c b/drivers/usb/serial/f81232.c index 96036f87b1de..46836041c50e 100644 --- a/drivers/usb/serial/f81232.c +++ b/drivers/usb/serial/f81232.c @@ -41,12 +41,14 @@ MODULE_DEVICE_TABLE(usb, id_table); #define FIFO_CONTROL_REGISTER (0x02 + SERIAL_BASE_ADDRESS) #define LINE_CONTROL_REGISTER (0x03 + SERIAL_BASE_ADDRESS) #define MODEM_CONTROL_REGISTER (0x04 + SERIAL_BASE_ADDRESS) +#define LINE_STATUS_REGISTER (0x05 + SERIAL_BASE_ADDRESS) #define MODEM_STATUS_REGISTER (0x06 + SERIAL_BASE_ADDRESS) struct f81232_private { struct mutex lock; u8 modem_control; u8 modem_status; + struct work_struct lsr_work; struct work_struct interrupt_work; struct usb_serial_port *port; }; @@ -282,6 +284,7 @@ static void f81232_read_int_callback(struct urb *urb) static void f81232_process_read_urb(struct urb *urb) { struct usb_serial_port *port = urb->context; + struct f81232_private *priv = usb_get_serial_port_data(port); unsigned char *data = urb->transfer_buffer; char tty_flag; unsigned int i; @@ -315,6 +318,7 @@ static void f81232_process_read_urb(struct urb *urb) if (lsr & UART_LSR_OE) { port->icount.overrun++; + schedule_work(&priv->lsr_work); tty_insert_flip_char(&port->port, 0, TTY_OVERRUN); } @@ -623,6 +627,21 @@ static void f81232_interrupt_work(struct work_struct *work) f81232_read_msr(priv->port); } +static void f81232_lsr_worker(struct work_struct *work) +{ + struct f81232_private *priv; + struct usb_serial_port *port; + int status; + u8 tmp; + + priv = container_of(work, struct f81232_private, lsr_work); + port = priv->port; + + status = f81232_get_register(port, LINE_STATUS_REGISTER, &tmp); + if (status) + dev_warn(&port->dev, "read LSR failed: %d\n", status); +} + static int f81232_port_probe(struct usb_serial_port *port) { struct f81232_private *priv; @@ -633,6 +652,7 @@ static int f81232_port_probe(struct usb_serial_port *port) mutex_init(&priv->lock); INIT_WORK(&priv->interrupt_work, f81232_interrupt_work); + INIT_WORK(&priv->lsr_work, f81232_lsr_worker); usb_set_serial_port_data(port, priv); -- 2.7.4