On Wed, Nov 11, 2015 at 1:20 PM, Dave Penkler <dpenkler@xxxxxxxxx> wrote: > This is a convenience function to obtain an instrument's capabilities > from its file descriptor without having to access sysfs from the user > program. > > Signed-off-by: Dave Penkler <dpenkler@xxxxxxxxx> > --- > drivers/usb/class/usbtmc.c | 12 ++++++++++++ > include/uapi/linux/usb/tmc.h | 21 ++++++++++++++++++--- > 2 files changed, 30 insertions(+), 3 deletions(-) > > diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c > index bb9a6ab..deca4b5 100644 > --- a/drivers/usb/class/usbtmc.c > +++ b/drivers/usb/class/usbtmc.c > @@ -103,6 +103,9 @@ struct usbtmc_device_data { > u16 iin_wMaxPacketSize; > atomic_t srq_asserted; > > + /* coalesced usb488_caps from usbtmc_dev_capabilities */ > + u8 usb488_caps; > + > u8 rigol_quirk; > > /* attributes from the USB TMC spec for this device */ > @@ -1001,6 +1004,7 @@ static int get_capabilities(struct usbtmc_device_data *data) > data->capabilities.device_capabilities = buffer[5]; > data->capabilities.usb488_interface_capabilities = buffer[14]; > data->capabilities.usb488_device_capabilities = buffer[15]; > + data->usb488_caps = (buffer[14] & 0x07) | ((buffer[15] & 0x0f) << 4); > rv = 0; > > err_out: > @@ -1176,6 +1180,14 @@ static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) > retval = usbtmc_ioctl_abort_bulk_in(data); > break; > > + case USBTMC488_IOCTL_GET_CAPS: > + retval = copy_to_user((void __user *)arg, > + &data->usb488_caps, > + sizeof(data->usb488_caps)); > + if (retval) > + retval = -EFAULT; > + break; > + > case USBTMC488_IOCTL_READ_STB: > retval = usbtmc488_ioctl_read_stb(data, arg); > break; > diff --git a/include/uapi/linux/usb/tmc.h b/include/uapi/linux/usb/tmc.h > index 49060ea..2606664 100644 > --- a/include/uapi/linux/usb/tmc.h > +++ b/include/uapi/linux/usb/tmc.h > @@ -2,12 +2,14 @@ > * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany > * Copyright (C) 2008 Novell, Inc. > * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@xxxxxxx> > + * Copyright (C) 2015 Dave Penkler <dpenkler@xxxxxxxxx> > * > * This file holds USB constants defined by the USB Device Class > - * Definition for Test and Measurement devices published by the USB-IF. > + * and USB488 Subclass Definitions for Test and Measurement devices > + * published by the USB-IF. > * > - * It also has the ioctl definitions for the usbtmc kernel driver that > - * userspace needs to know about. > + * It also has the ioctl and capability definitions for the > + * usbtmc kernel driver that userspace needs to know about. Do not see what's changed here. > */ > > #ifndef __LINUX_USB_TMC_H > @@ -40,6 +42,19 @@ > #define USBTMC_IOCTL_ABORT_BULK_IN _IO(USBTMC_IOC_NR, 4) > #define USBTMC_IOCTL_CLEAR_OUT_HALT _IO(USBTMC_IOC_NR, 6) > #define USBTMC_IOCTL_CLEAR_IN_HALT _IO(USBTMC_IOC_NR, 7) > +#define USBTMC488_IOCTL_GET_CAPS _IO(USBTMC_IOC_NR, 17) > #define USBTMC488_IOCTL_READ_STB _IOR(USBTMC_IOC_NR, 18, unsigned char) > > +/* Driver encoded usb488 capabilities */ > +#define USBTMC488_CAPABILITY_TRIGGER 1 > +#define USBTMC488_CAPABILITY_SIMPLE 2 > +#define USBTMC488_CAPABILITY_REN_CONTROL 2 > +#define USBTMC488_CAPABILITY_GOTO_LOCAL 2 > +#define USBTMC488_CAPABILITY_LOCAL_LOCKOUT 2 > +#define USBTMC488_CAPABILITY_488_DOT_2 4 > +#define USBTMC488_CAPABILITY_DT1 16 > +#define USBTMC488_CAPABILITY_RL1 32 > +#define USBTMC488_CAPABILITY_SR1 64 > +#define USBTMC488_CAPABILITY_FULL_SCPI 128 > + > #endif > -- > 2.5.1 > -- > To unsubscribe from this list: send the line "unsubscribe linux-usb" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- With Best Regards, Andy Shevchenko -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html