Merge tag 'staging-6.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging

Pull staging driver fixes from Greg KH:
"Here are some small staging driver fixes for the gpib subsystem to
resolve some reported issues. Included in here are:

- memory leak fixes

- error code fixes

- proper protocol fixes

All of these have been in linux-next for almost 2 weeks now with no
reported issues"

* tag 'staging-6.18-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging:
staging: gpib: Fix device reference leak in fmh_gpib driver
staging: gpib: Return -EINTR on device clear
staging: gpib: Fix sending clear and trigger events
staging: gpib: Fix no EOI on 1 and 2 byte writes

Changed files
+22 -8
drivers
staging
gpib
agilent_82350b
fmh_gpib
ni_usb
+7 -5
drivers/staging/gpib/agilent_82350b/agilent_82350b.c
··· 182 182 return retval; 183 183 #endif 184 184 185 - retval = agilent_82350b_write(board, buffer, 1, 0, &num_bytes); 186 - *bytes_written += num_bytes; 187 - if (retval < 0) 188 - return retval; 185 + if (fifotransferlength > 0) { 186 + retval = agilent_82350b_write(board, buffer, 1, 0, &num_bytes); 187 + *bytes_written += num_bytes; 188 + if (retval < 0) 189 + return retval; 190 + } 189 191 190 192 write_byte(tms_priv, tms_priv->imr0_bits & ~HR_BOIE, IMR0); 191 193 for (i = 1; i < fifotransferlength;) { ··· 219 217 break; 220 218 } 221 219 write_byte(tms_priv, tms_priv->imr0_bits, IMR0); 222 - if (retval) 220 + if (retval < 0) 223 221 return retval; 224 222 225 223 if (send_eoi) {
+5
drivers/staging/gpib/fmh_gpib/fmh_gpib.c
··· 1517 1517 resource_size(e_priv->gpib_iomem_res)); 1518 1518 } 1519 1519 fmh_gpib_generic_detach(board); 1520 + 1521 + if (board->dev) { 1522 + put_device(board->dev); 1523 + board->dev = NULL; 1524 + } 1520 1525 } 1521 1526 1522 1527 static int fmh_gpib_pci_attach_impl(struct gpib_board *board,
+10 -3
drivers/staging/gpib/ni_usb/ni_usb_gpib.c
··· 327 327 board->status &= ~clear_mask; 328 328 board->status &= ~ni_usb_ibsta_mask; 329 329 board->status |= ni_usb_ibsta & ni_usb_ibsta_mask; 330 - // FIXME should generate events on DTAS and DCAS 330 + if (ni_usb_ibsta & DCAS) 331 + push_gpib_event(board, EVENT_DEV_CLR); 332 + if (ni_usb_ibsta & DTAS) 333 + push_gpib_event(board, EVENT_DEV_TRG); 331 334 332 335 spin_lock_irqsave(&board->spinlock, flags); 333 336 /* remove set status bits from monitored set why ?***/ ··· 697 694 */ 698 695 break; 699 696 case NIUSB_ATN_STATE_ERROR: 700 - retval = -EIO; 701 - dev_err(&usb_dev->dev, "read when ATN set\n"); 697 + if (status.ibsta & DCAS) { 698 + retval = -EINTR; 699 + } else { 700 + retval = -EIO; 701 + dev_dbg(&usb_dev->dev, "read when ATN set stat: 0x%06x\n", status.ibsta); 702 + } 702 703 break; 703 704 case NIUSB_ADDRESSING_ERROR: 704 705 retval = -EIO;