summaryrefslogtreecommitdiff
path: root/drivers/staging
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-29 14:10:31 +0100
commit689c3773ddc4c07b6f0f22721727c9e0ef4e794c (patch)
tree3b4f6829439c1e5d8580188d3bd5966f2c5167da /drivers/staging
parent86c8ada87edc4eea30c8c3452d57c73ad4eb1c83 (diff)
downloadlinux-689c3773ddc4c07b6f0f22721727c9e0ef4e794c.tar.gz
linux-689c3773ddc4c07b6f0f22721727c9e0ef4e794c.tar.bz2
linux-689c3773ddc4c07b6f0f22721727c9e0ef4e794c.zip
staging: gpib: Return -EINTR on device clear
commit aaf2af1ed147ef49be65afb541a67255e9f60d15 upstream. 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>
Diffstat (limited to 'drivers/staging')
-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 73ea72f34c0a..4e9a654bf51f 100644
--- a/drivers/staging/gpib/ni_usb/ni_usb_gpib.c
+++ b/drivers/staging/gpib/ni_usb/ni_usb_gpib.c
@@ -694,8 +694,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;