summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Penkler <dpenkler@gmail.com>2025-09-28 13:33:59 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-10-13 10:54:44 +0200
commitaaf2af1ed147ef49be65afb541a67255e9f60d15 (patch)
tree892fd8b559c7c2a6f0cbdbedc52bb85564b75a32
parent92a2b74a6b5a5d9b076cd9aa75e63c6461cbd073 (diff)
staging: gpib: Return -EINTR on device clear
When the ATN (Attention) line is asserted during a read we get a NIUSB_ATN_STATE_ERROR during a read. For the controller to send a device clear it asserts ATN. Normally this is an error but in the case of a device clear it should be regarded as an interrupt. Return -EINTR when the Device Clear Active State (DCAS) is entered else signal an error with dev_dbg with status instead of just dev_err. Signed-off-by: Dave Penkler <dpenkler@gmail.com> Cc: stable <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/gpib/ni_usb/ni_usb_gpib.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/staging/gpib/ni_usb/ni_usb_gpib.c b/drivers/staging/gpib/ni_usb/ni_usb_gpib.c
index ea44a766fda2..1f8412de9fa3 100644
--- a/drivers/staging/gpib/ni_usb/ni_usb_gpib.c
+++ b/drivers/staging/gpib/ni_usb/ni_usb_gpib.c
@@ -697,8 +697,12 @@ static int ni_usb_read(struct gpib_board *board, u8 *buffer, size_t length,
*/
break;
case NIUSB_ATN_STATE_ERROR:
- retval = -EIO;
- dev_err(&usb_dev->dev, "read when ATN set\n");
+ if (status.ibsta & DCAS) {
+ retval = -EINTR;
+ } else {
+ retval = -EIO;
+ dev_dbg(&usb_dev->dev, "read when ATN set stat: 0x%06x\n", status.ibsta);
+ }
break;
case NIUSB_ADDRESSING_ERROR:
retval = -EIO;