Commit 40282418 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents aa6085a0 b1aabb8e
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -182,10 +182,12 @@ static int agilent_82350b_accel_write(struct gpib_board *board, u8 *buffer,
		return retval;
#endif

	if (fifotransferlength > 0) {
		retval = agilent_82350b_write(board, buffer, 1, 0, &num_bytes);
		*bytes_written += num_bytes;
		if (retval < 0)
			return retval;
	}

	write_byte(tms_priv, tms_priv->imr0_bits & ~HR_BOIE, IMR0);
	for (i = 1; i < fifotransferlength;) {
@@ -217,7 +219,7 @@ static int agilent_82350b_accel_write(struct gpib_board *board, u8 *buffer,
			break;
	}
	write_byte(tms_priv, tms_priv->imr0_bits, IMR0);
	if (retval)
	if (retval < 0)
		return retval;

	if (send_eoi) {
+5 −0
Original line number Diff line number Diff line
@@ -1517,6 +1517,11 @@ void fmh_gpib_detach(struct gpib_board *board)
					   resource_size(e_priv->gpib_iomem_res));
	}
	fmh_gpib_generic_detach(board);

	if (board->dev) {
		put_device(board->dev);
		board->dev = NULL;
	}
}

static int fmh_gpib_pci_attach_impl(struct gpib_board *board,
+10 −3
Original line number Diff line number Diff line
@@ -327,7 +327,10 @@ static void ni_usb_soft_update_status(struct gpib_board *board, unsigned int ni_
	board->status &= ~clear_mask;
	board->status &= ~ni_usb_ibsta_mask;
	board->status |= ni_usb_ibsta & ni_usb_ibsta_mask;
	// FIXME should generate events on DTAS and DCAS
	if (ni_usb_ibsta & DCAS)
		push_gpib_event(board, EVENT_DEV_CLR);
	if (ni_usb_ibsta & DTAS)
		push_gpib_event(board, EVENT_DEV_TRG);

	spin_lock_irqsave(&board->spinlock, flags);
/* remove set status bits from monitored set why ?***/
@@ -694,8 +697,12 @@ static int ni_usb_read(struct gpib_board *board, u8 *buffer, size_t length,
		 */
		break;
	case NIUSB_ATN_STATE_ERROR:
		if (status.ibsta & DCAS) {
			retval = -EINTR;
		} else {
			retval = -EIO;
		dev_err(&usb_dev->dev, "read when ATN set\n");
			dev_dbg(&usb_dev->dev, "read when ATN set stat: 0x%06x\n", status.ibsta);
		}
		break;
	case NIUSB_ADDRESSING_ERROR:
		retval = -EIO;